Ok
I am lazy, whatever I can reuse I do.
Good practice.
So yes it is Adrian's version, although I don't remember where or how I got it. Somebody (Simon?) must have given it to me.
nicolas
On Tue, Dec 14, 2010 at 11:54 AM, Stéphane Ducasse stephane.ducasse@inria.fr wrote:
nicolas
Do you use the FAME version of adrian in Java or you recoded your own?
Stef
On Dec 13, 2010, at 10:53 PM, anquetil.nicolas@gmail.com wrote:
Hi all,
I need some help with the Java implementation of Fame.
I am trying to implement separate parsing in VerveineJ so that one can deal with larger project by parsing them piece by piece. This implies loading in verveine the MSE already created to be able to add new entities to it.
And The import method of Repository does not work for big MSE files (that were generated by the export method of Repository BTW) :-(
It crashes with a StackOverflow: Exception in thread "main" java.lang.StackOverflowError at java.util.HashMap.put(HashMap.java:389) at java.util.HashMap.putAll(HashMap.java:541) at ch.akuhn.fame.fm3.MetaDescription.collectAllAttributes(MetaDescription.java:192) at ch.akuhn.fame.fm3.MetaDescription.collectAllAttributes(MetaDescription.java:191) at ch.akuhn.fame.fm3.MetaDescription.collectAllAttributes(MetaDescription.java:191) at ch.akuhn.fame.fm3.MetaDescription.collectAllAttributes(MetaDescription.java:191) at ch.akuhn.fame.fm3.MetaDescription.collectAllAttributes(MetaDescription.java:191) at ch.akuhn.fame.fm3.MetaDescription.collectAllAttributes(MetaDescription.java:191) at ch.akuhn.fame.fm3.MetaDescription.allAttributes(MetaDescription.java:139) at ch.akuhn.fame.Repository.add(Repository.java:121) at ch.akuhn.fame.Repository.add(Repository.java:131) at ch.akuhn.fame.Repository.add(Repository.java:131)
- zillions of this same line, Repository.add calling itself
recursively at line 131
I looked a bit into it and think that the problem may come from line 131 into the Repository.add() method :-)
public void add(Object element) { assert element != null; if (elements.add(element)) { MetaDescription meta = metamodel.getDescription(element.getClass()); assert meta != null : element.getClass(); for (PropertyDescription property : meta.allAttributes()) { <--- line 121 if (!property.isPrimitive()) { boolean isRoot = property.getType().isRoot(); for (Object value : property.readAll(element)) { assert value != null : property.getFullname(); if (!(isRoot && (value instanceof String || value instanceof Boolean || value instanceof Number))) { try { this.add(value); <--- line 131 } catch (ClassNotMetadescribedException e) { throw new ElementInPropertyNotMetadescribed(property); } } } } } } }
My suspicion is that this recursive call is actually walking through the entire graph of FamixEntities because every entity is related to some other entity ...
1- Anybody want to comment on this suspicion? 2- Any idea how to correct it?
nicolas
-- Nicolas Anquetil Univ. Lille1 / INRIA-equipe RMod
Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev
-- Nicolas Anquetil Univ. Lille1 / INRIA-equipe RMod
Moose-dev mailing list Moose-dev@iam.unibe.ch https://www.iam.unibe.ch/mailman/listinfo/moose-dev