Community
Participate
Working Groups
Hi, I'm testing Acceleo 3.1.1 which is a stable release but I'm facing an emtl generation problem. In fact, if I got this in my mtl file : [template public generateElement(aClass : Class)] [for (aProperty : Property| aClass.attribute)] [if (i=0)] [aProperty.name/] [/if] [/for] [/template] Using `i` as index of the for loop provoke an error. I've tried to find this bug but I didn't find with the search functionnality. Maybe I missed it. Thank you. Best regards
I don't have any error during the parsing or the generation with your example. Could you please copy and paste the exception from the error log view? But you should keep in mind that with OCL we are working with 1 based index, so 'i' will never equals '0'.
Hi, this is what I've got in the error log while launching the mtl file : org.eclipse.acceleo.engine.AcceleoEvaluationException: Undefined condition of "If" at line 52 in Module enumeration for block if ("<null>".=(1)). Last recorded value of self was org.eclipse.uml2.uml.internal.impl.EnumerationImpl@16a34fe (name: TypeLeveeEcrou, visibility: <unset>) (isLeaf: false, isAbstract: false). at enumeration.generateAnEnumeration(Model,String)(enumeration.mtl:52) at enumeration.generateAnEnumeration(Model,String)(enumeration.mtl:15) at enumeration.generateAnEnumeration(Model,String)(enumeration.mtl:13) at enumeration.enumerationModel(Model)(enumeration.mtl:0) at enumeration.enumerationModel(Model)(enumeration.mtl:6) ============== java.lang.NullPointerException at org.eclipse.ocl.EvaluationVisitorImpl.visitVariableExp(EvaluationVisitorImpl.java:1879) at org.eclipse.ocl.EvaluationVisitorDecorator.visitVariableExp(EvaluationVisitorDecorator.java:347) at org.eclipse.ocl.ecore.impl.VariableExpImpl.accept(VariableExpImpl.java:250) at org.eclipse.ocl.EvaluationVisitorImpl.visitOperationCallExp(EvaluationVisitorImpl.java:162) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitOperationCallExp(AcceleoEvaluationVisitor.java:1100) at org.eclipse.ocl.ecore.impl.OperationCallExpImpl.accept(OperationCallExpImpl.java:390) 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:1721) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitExpression(AcceleoEvaluationVisitor.java:999) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitAcceleoIfBlock(AcceleoEvaluationVisitor.java:544) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.switchExpression(AcceleoEvaluationVisitor.java:1677) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitExpression(AcceleoEvaluationVisitor.java:999) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitAcceleoForBlock(AcceleoEvaluationVisitor.java:509) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.switchExpression(AcceleoEvaluationVisitor.java:1684) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitExpression(AcceleoEvaluationVisitor.java:999) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitAcceleoTemplate(AcceleoEvaluationVisitor.java:867) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.switchExpression(AcceleoEvaluationVisitor.java:1671) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitExpression(AcceleoEvaluationVisitor.java:999) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitAcceleoTemplateInvocation(AcceleoEvaluationVisitor.java:918) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.switchExpression(AcceleoEvaluationVisitor.java:1698) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitExpression(AcceleoEvaluationVisitor.java:999) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitAcceleoTemplate(AcceleoEvaluationVisitor.java:867) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.switchExpression(AcceleoEvaluationVisitor.java:1671) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitExpression(AcceleoEvaluationVisitor.java:999) 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:280) at org.eclipse.acceleo.engine.generation.AcceleoEngine.evaluate(AcceleoEngine.java:145) at org.eclipse.acceleo.engine.service.AcceleoService.doGenerateTemplate(AcceleoService.java:869) at org.eclipse.acceleo.engine.service.AcceleoService.doGenerate(AcceleoService.java:585) at org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.generate(AbstractAcceleoGenerator.java:188) at org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.doGenerate(AbstractAcceleoGenerator.java:158) at fr.sopra.acceleo.uml2.gen.java.main.Enumeration.doGenerate(Enumeration.java:190) at org.eclipse.acceleo.ide.ui.launching.strategy.AcceleoLaunchOperation.run(AcceleoLaunchOperation.java:133) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1957) at org.eclipse.acceleo.ide.ui.launching.strategy.AcceleoPluginLaunchingStrategy.launch(AcceleoPluginLaunchingStrategy.java:225) at org.eclipse.acceleo.ide.ui.launching.strategy.AcceleoPluginLaunchingStrategy.launch(AcceleoPluginLaunchingStrategy.java:128) at org.eclipse.acceleo.internal.ide.ui.launching.AcceleoLaunchDelegate.launch(AcceleoLaunchDelegate.java:51) at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:853) at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:702) at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:924) at org.eclipse.debug.internal.ui.DebugUIPlugin$8.run(DebugUIPlugin.java:1128) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) Hope this helps. By the way, thanks for the advice. Best regards
Seems like "i" is not recognized as a variable in your case. Are you sure you are within the scope of a "for" block? Could you copy/paste the exact example in which you get this exception?
Sorry, actually I'm not allowed to copy past the code. But trust me, it's really in a For loop. The basic example shown above provoke exactly the same error with the stable release 3.1.1RC4 downloaded in this page http://eclipse.org/modeling/m2t/downloads/?project=acceleo.
It seems very odd, we have multiple unit tests with this variables and none of them picked any problem. I tried this morning on my Acceleo 3.1.1 and 3.2.0 environment and it worked fine (there are no changes between the two versions for this variable), and this afternoon, I can reproduce your problem on both of my environments. I have contributed a fix on HEAD for Acceleo 3.2.0 and 3_1_maintenance for Acceleo 3.1.2 (I believe its a bit late for 3.1.1). Edit: From what I've seen, one clue seems to be the serialization. Does the problem disappears/appears after a switch of the resource serialization? (right click on a project then select properties and after that Acceleo). I'll have a closer look on our serialization options anyway.
In Acceleo Compiler properties, I've switched to binaries serialization and it works. No more errors. Thanks for the workaround :).
An improved version of the fix has been contributed on head.
Closing resolved bugs