|
|
|
|
Re: [Acceleo] How to create a generator for composed metamodels [message #661849 is a reply to message #661383] |
Mon, 28 March 2011 09:19   |
|
Cedric,
I have looked into this problem a bit more and it appears that changing this:
- <eStructuralFeatures xsi:type="ecore:EReference" name="type" lowerBound="1" eType="ecore:EClass Types.ecore#//Type"/>
for that:
- <eStructuralFeatures xsi:type="ecore:EReference" name="type" lowerBound="1" eType="ecore:EClass /org.eclipse.acceleo.module.sample/model/Types.ecore#//Type"/ >
Solved the problem for me with dynamic metamodels. The problem is not coming from the way we are handling multiple metamodels in the workspace but the proxies cannot be resolved with a purely relative uri like "Type.ecore" while there are no problem with a workspace relative uri like "/org.eclipse.acceleo.module.sample/model/Type.ecore". I don't know why EMF shows a workspace relative uri in the sample ecore editor but serialize another uri in the file. I think that we can handle this with an uri converter, I'll keep you in touch.
Stephane Begaudeau, Obeo
--
Twitter: @sbegaudeau
Acceleo wiki: http://wiki.eclipse.org/Acceleo
Blogs: http://stephanebegaudeau.tumblr.com & http://sbegaudeau.tumblr.com
|
|
|
|
Re: [Acceleo] How to create a generator for composed metamodels [message #662303 is a reply to message #661383] |
Wed, 30 March 2011 08:08   |
Cedric Moonen Messages: 274 Registered: August 2009 |
Senior Member |
|
|
Stephane,
Thanks for your answer. Indeed, if I make the modification in my ecore model, then I don't have any errors in my generate.mtl file anymore.
However, this still doesn't seem to work fine at code generation. I test my bundle by launching a separate eclipse application (with all my workspace bundles), an there I create a new Types model and a new "OroDSL" model. Everything works fine, I can import my types model into my OroDSL model and reference existing types.
When I try to generate the code, I end up with something like this for the "port" features:
ReadDataPort<org.eclipse.emf.ecore.impl.DynamicEObjectImpl@439b01 (eClass: org.eclipse.emf.ecore.impl.EClassImpl@7581aa (name: OclInvalid_Class) (instanceClassName: null) (abstract: false, interface: false))> MyDataPortA;
(the part in error is inside < >). Furthermore, an exception is thrown in the console of my development Eclipse instance:
!ENTRY org.eclipse.ocl 4 10 2011-03-30 09:59:37.797
!MESSAGE Evaluation failed with an exception: (no message)
!STACK 0
java.lang.IllegalArgumentException
at org.eclipse.ocl.ecore.EcoreEvaluationEnvironment.navigateProperty(EcoreEvaluationEnvironment.java:226)
at org.eclipse.ocl.ecore.EcoreEvaluationEnvironment.navigateProperty(EcoreEvaluationEnvironment.java:1)
at org.eclipse.ocl.EvaluationVisitorImpl.visitPropertyCallExp(EvaluationVisitorImpl.java:1925)
at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitPropertyCallExp(AcceleoEvaluationVisitor.java:1009)
at org.eclipse.ocl.ecore.impl.PropertyCallExpImpl.accept(PropertyCallExpImpl.java:238)
at org.eclipse.ocl.AbstractEvaluationVisitor.visitExpression(AbstractEvaluationVisitor.java:247)
at org.eclipse.ocl.EvaluationVisitorDecorator.visitExpression(EvaluationVisitorDecorator.java:156)
at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.switchExpression(AcceleoEvaluationVisitor.java:1517)
at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitExpression(AcceleoEvaluationVisitor.java:912)
at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitAcceleoForBlock(AcceleoEvaluationVisitor.java:423)
at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.switchExpression(AcceleoEvaluationVisitor.java:1480)
at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitExpression(AcceleoEvaluationVisitor.java:912)
at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitAcceleoFileBlock(AcceleoEvaluationVisitor.java:316)
at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.switchExpression(AcceleoEvaluationVisitor.java:1487)
at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitExpression(AcceleoEvaluationVisitor.java:912)
at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitAcceleoTemplate(AcceleoEvaluationVisitor.java:781)
at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.switchExpression(AcceleoEvaluationVisitor.java:1467)
at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitExpression(AcceleoEvaluationVisitor.java:912)
at org.eclipse.ocl.internal.evaluation.QueryImpl.evaluate(QueryImpl.java:152)
at org.eclipse.ocl.ecore.QueryImpl.evaluate(QueryImpl.java:62)
at org.eclipse.acceleo.engine.generation.AcceleoEngine.doEvaluate(AcceleoEngine.java:267)
at org.eclipse.acceleo.engine.generation.AcceleoEngine.evaluate(AcceleoEngine.java:131)
at org.eclipse.acceleo.engine.service.AcceleoService.doGenerateTemplate(AcceleoService.java:544)
at org.eclipse.acceleo.engine.service.AcceleoService.doGenerate(AcceleoService.java:380)
at org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.generate(AbstractAcceleoGenerator.java:120)
at org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.doGenerate(AbstractAcceleoGenerator.java:99)
at org.orocos.dsl.acceleo.files.Generate.doGenerate(Generate.java:157)
at org.orocos.dsl.acceleo.ui.common.GenerateAll.doGenerate(GenerateAll.java:89)
at org.orocos.dsl.acceleo.ui.popupMenus.AcceleoGenerateAcceleoAction$1.run(AcceleoGenerateAcceleoAction.java:76)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.01556 seconds