Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 357770

Summary: The object i : Integer is not contained in a resource
Product: [Modeling] Acceleo Reporter: bkhamphousone
Component: CoreAssignee: Project Inbox <acceleo-inbox>
Status: CLOSED FIXED QA Contact:
Severity: critical    
Priority: P3 CC: laurent.goubet, stephane.begaudeau
Version: unspecified   
Target Milestone: ---   
Hardware: PC   
OS: Windows XP   
Whiteboard:

Description bkhamphousone CLA 2011-09-15 06:37:46 EDT
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
Comment 1 Stephane Begaudeau CLA 2011-09-15 06:50:23 EDT
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'.
Comment 2 bkhamphousone CLA 2011-09-15 07:50:33 EDT
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
Comment 3 Laurent Goubet CLA 2011-09-15 08:14:03 EDT
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?
Comment 4 bkhamphousone CLA 2011-09-15 08:49:51 EDT
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.
Comment 5 Stephane Begaudeau CLA 2011-09-15 08:59:24 EDT
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.
Comment 6 bkhamphousone CLA 2011-09-15 10:34:26 EDT
In Acceleo Compiler properties, I've switched to binaries serialization and it works. No more errors.

Thanks for the workaround :).
Comment 7 Stephane Begaudeau CLA 2011-09-19 05:38:55 EDT
An improved version of the fix has been contributed on head.
Comment 8 Laurent Goubet CLA 2015-05-27 08:56:47 EDT
Closing resolved bugs