[Acceleo] How to create a generator for composed metamodels [message #661383] |
Thu, 24 March 2011 09:38  |
Eclipse User |
|
|
|
I defined two metamodels in my project: one very basic metamodel which defines the "Type" EClass and another metamodel which is referencing this Type at several places.
So, my model will then contain elements from both metamodels, and my generator should access both metamodels too.
I created a mtl file for each metamodel and I call the "Type template" in my other template this way:
[generateTypeName(p.type)]
generateTypeName is a template defined in my other mtl file.
Unfortunately, this doesn't work since there is an error in the mtl editor saying:
Quote: | illegal operation signature: (generateTypeName(null))
|
So, my Type is not recognized here (instead of it, it is considered to be null). Of course, I imported my Type template:
I found an article that might perhaps fix my problem here: http://metaplop.blogspot.com/2010/06/how-to-create-acceleo-2 x-generator-for.html but there is a problem with the images and the explanations alone are not enough to understand what they are doing.
|
|
|
|
|
|
|
|
Re: [Acceleo] How to create a generator for composed metamodels [message #662303 is a reply to message #661383] |
Wed, 30 March 2011 04:08   |
Eclipse User |
|
|
|
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.02985 seconds