Community
Participate
Working Groups
Created attachment 264409 [details] Condensed example of the bug, includes generation and model project. Hi, we are considering upgrading from Eclipse Luna 3.5 with Acceleo to Eclipse Modelling Neon 4.6.0 with Acceleo 3.6.4.201605040614. Unfortunately, we hit on a bug as exposed in the attached condensed example. In short: - the evaluation of parameters of nested calls seems to be broken when using java service wrappers - the attached example boils down do: [query public combine(arg0 : String, arg1 : String) : String = invoke('org.eclipse.acceleo.sample.generator.services.DemoUtils', 'combine(java.lang.String, java.lang.String)', Sequence{arg0, arg1}) /] [query private doNothingWithMtl(model : Model) : String = 'secondArgument' /] [template public generateAll(model : Model)] [comment @main/] [file ('output.txt', false)] [comment type mismatch when calling java function combine. /] [combine('firstArgument', doNothingWithMtl(model))/] [/file] [/template] - during evaluation temporaryInvocationVariable$0 is stored twice in the AcceleoEvaluationEnvironment.globalVariableMap: - once for 'firstArgument' - once for model - when calling the java service wrappers function combine the wrong argument is taken from the map: model instead of 'firstArgument' - this results in the error message: org.eclipse.acceleo.engine.AcceleoEvaluationException: argument type mismatch This behaviour prevents us from upgrading. I hope it will be fixed, or that a work-around is available. Best, Alexander Fuchs Installation of the example: - extract - import the two contained projects into a new eclipse workspace - open acceleo perspective - create a launch configuration with: Project = Generators Main class = org.eclipse.acceleo.sample.generator.main.Main Model = /Model/model.uml Target = /Generators - run launch configuration - complete call stack: org.eclipse.acceleo.engine.AcceleoEvaluationException: argument type mismatch at org.eclipse.acceleo.engine.internal.environment.AcceleoLibraryOperationVisitor.invoke(AcceleoLibraryOperationVisitor.java:1218) at org.eclipse.acceleo.engine.internal.environment.AcceleoLibraryOperationVisitor.callNonStandardOperation(AcceleoLibraryOperationVisitor.java:136) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitOperationCallExp(AcceleoEvaluationVisitor.java:1220) at org.eclipse.ocl.ecore.impl.OperationCallExpImpl.accept(OperationCallExpImpl.java:386) at org.eclipse.ocl.AbstractEvaluationVisitor.visitExpression(AbstractEvaluationVisitor.java:242) at org.eclipse.ocl.EvaluationVisitorDecorator.visitExpression(EvaluationVisitorDecorator.java:150) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.switchExpression(AcceleoEvaluationVisitor.java:1965) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitExpression(AcceleoEvaluationVisitor.java:1049) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitAcceleoQueryInvocation(AcceleoEvaluationVisitor.java:879) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.switchExpression(AcceleoEvaluationVisitor.java:1942) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitExpression(AcceleoEvaluationVisitor.java:1049) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitAcceleoFileBlock(AcceleoEvaluationVisitor.java:431) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.switchExpression(AcceleoEvaluationVisitor.java:1926) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitExpression(AcceleoEvaluationVisitor.java:1049) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitAcceleoTemplate(AcceleoEvaluationVisitor.java:921) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.switchExpression(AcceleoEvaluationVisitor.java:1897) at org.eclipse.acceleo.engine.internal.evaluation.AcceleoEvaluationVisitor.visitExpression(AcceleoEvaluationVisitor.java:1049) at org.eclipse.ocl.internal.evaluation.QueryImpl.evaluate(QueryImpl.java:146) at org.eclipse.ocl.ecore.QueryImpl.evaluate(QueryImpl.java:56) at org.eclipse.acceleo.engine.generation.AcceleoEngine.doEvaluate(AcceleoEngine.java:365) at org.eclipse.acceleo.engine.generation.AcceleoEngine.evaluate(AcceleoEngine.java:142) at org.eclipse.acceleo.engine.service.AcceleoService.doGenerateTemplate(AcceleoService.java:984) at org.eclipse.acceleo.engine.service.AcceleoService.doGenerate(AcceleoService.java:641) at org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.generate(AbstractAcceleoGenerator.java:209) at org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.generate(AbstractAcceleoGenerator.java:172) at org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.doGenerate(AbstractAcceleoGenerator.java:159) at org.eclipse.acceleo.sample.generator.main.Main.doGenerate(Main.java:202) at org.eclipse.acceleo.sample.generator.main.Main.main(Main.java:160) Caused by: java.lang.IllegalArgumentException: argument type mismatch at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.acceleo.engine.internal.environment.AcceleoLibraryOperationVisitor.invoke(AcceleoLibraryOperationVisitor.java:1197) ... 27 more org.eclipse.acceleo.engine.AcceleoEvaluationException: Invalid result for expression self.invoke('org.eclipse.acceleo.sample.generator.services.DemoUtils', 'combine(java.lang.String, java.lang.String)', Sequence {arg0, arg1}) at line 4 in Module DemoUtils for query combine(String,String). Last recorded value of self was org.eclipse.uml2.uml.internal.impl.ModelImpl@5ddea849 (name: demoModel, visibility: <unset>) (URI: null) (viewpoint: <unset>). Problem found while generating the file 'E:\Daten\AcceleoBug\Generators\output.txt'. at main.generateAll(Model)(main.mtl:0) at main.generateAll(Model)(main.mtl:12) at main.generateAll(Model)(main.mtl:10) - Call stack after putting both temporaryInvocationVariable$0 into AcceleoEvaluationEnvironment.globalVariableMap: {temporaryInvocationVariable$0=[firstArgument, org.eclipse.uml2.uml.internal.impl.ModelImpl@2c42b421 (name: VisumNetwork, visibility: <unset>) (URI: null) (viewpoint: <unset>)], context$0=[org.eclipse.uml2.uml.internal.impl.ModelImpl@2c42b421 (name: VisumNetwork, visibility: <unset>) (URI: null) (viewpoint: <unset>)]} AcceleoEvaluationEnvironment.add(String, Object) line: 230 EvaluationVisitorImpl(EvaluationVisitorImpl<PK,C,O,P,EL,PM,S,COA,SSA,CT,CLS,E>).visitVariable(Variable<C,PM>) line: 2380 AcceleoEvaluationVisitor<PK,C,O,P,EL,PM,S,COA,SSA,CT,CLS,E>(EvaluationVisitorDecorator<PK,C,O,P,EL,PM,S,COA,SSA,CT,CLS,E>).visitVariable(Variable<C,PM>) line: 334 AcceleoEvaluationVisitor<PK,C,O,P,EL,PM,S,COA,SSA,CT,CLS,E>.prepareInvocation(QueryInvocation) line: 1756 AcceleoEvaluationVisitor<PK,C,O,P,EL,PM,S,COA,SSA,CT,CLS,E>.visitAcceleoQueryInvocation(QueryInvocation) line: 848 AcceleoEvaluationVisitor<PK,C,O,P,EL,PM,S,COA,SSA,CT,CLS,E>.switchExpression(OCLExpression<C>) line: 1942 AcceleoEvaluationVisitor<PK,C,O,P,EL,PM,S,COA,SSA,CT,CLS,E>.visitExpression(OCLExpression<C>) line: 1049 QueryInvocationSpec.accept(U) line: 49 AcceleoEvaluationVisitor$ParameterInitExpression.accept(U) line: 2046 EvaluationVisitorImpl(AbstractEvaluationVisitor<PK,C,O,P,EL,PM,S,COA,SSA,CT,CLS,E>).safeVisitExpression(OCLExpression<C>) line: 569 EvaluationVisitorImpl(EvaluationVisitorImpl<PK,C,O,P,EL,PM,S,COA,SSA,CT,CLS,E>).visitVariable(Variable<C,PM>) line: 2378 AcceleoEvaluationVisitor<PK,C,O,P,EL,PM,S,COA,SSA,CT,CLS,E>(EvaluationVisitorDecorator<PK,C,O,P,EL,PM,S,COA,SSA,CT,CLS,E>).visitVariable(Variable<C,PM>) line: 334 AcceleoEvaluationVisitor<PK,C,O,P,EL,PM,S,COA,SSA,CT,CLS,E>.prepareInvocation(QueryInvocation) line: 1756 AcceleoEvaluationVisitor<PK,C,O,P,EL,PM,S,COA,SSA,CT,CLS,E>.visitAcceleoQueryInvocation(QueryInvocation) line: 848 AcceleoEvaluationVisitor<PK,C,O,P,EL,PM,S,COA,SSA,CT,CLS,E>.switchExpression(OCLExpression<C>) line: 1942 AcceleoEvaluationVisitor<PK,C,O,P,EL,PM,S,COA,SSA,CT,CLS,E>.visitExpression(OCLExpression<C>) line: 1049 AcceleoEvaluationVisitor<PK,C,O,P,EL,PM,S,COA,SSA,CT,CLS,E>.visitAcceleoTemplate(Template) line: 921 AcceleoEvaluationVisitor<PK,C,O,P,EL,PM,S,COA,SSA,CT,CLS,E>.switchExpression(OCLExpression<C>) line: 1897 AcceleoEvaluationVisitor<PK,C,O,P,EL,PM,S,COA,SSA,CT,CLS,E>.visitExpression(OCLExpression<C>) line: 1049 QueryImpl<PK,C,O,P,EL,PM,S,COA,SSA,CT,CLS,E>.evaluate() line: 146 QueryImpl.evaluate() line: 56 AcceleoEngine.doEvaluate(Template, List<Object>) line: 365 AcceleoEngine.evaluate(Template, List<Object>, File, IAcceleoGenerationStrategy, Monitor) line: 142 AcceleoService.doGenerateTemplate(Template, List<Object>, File, Monitor) line: 984 AcceleoService.doGenerate(Module, String, EObject, boolean, List<Object>, File, Monitor) line: 641 VisionAcceleoGenerator(AbstractAcceleoGenerator).generate(Monitor, boolean) line: 209 VisionAcceleoGenerator(AbstractAcceleoGenerator).generate(Monitor) line: 172 VisionAcceleoGenerator(AbstractAcceleoGenerator).doGenerate(Monitor) line: 159 VisionAcceleoGenerator.doGenerate(Monitor) line: 431 VisionAcceleoGenerator.doTimedGenerate(Monitor, URI) line: 469 VisionAcceleoGenerator.generateTarget(String, String, URI) line: 301 Main.generateNetwork(String) line: 156 Main.run(String[], String) line: 98 GenerateAll.main(String[]) line: 7
Fixed with Acceleo 3.6.6, as shiped with Neon 4.6.1.