Cannot generate artifacts with Xtext 2.9.2 from DSL made with 2.5.4 [message #1726317] |
Fri, 11 March 2016 05:47  |
Eclipse User |
|
|
|
Hi,
We have created 4 DSL in Eclipse Kepler with Xtext 2.5.4. I am currently working on changing the version to Mars and Xtext 2.9.2.
I had no problem for migrating the first 3 DSL. But I have far more issues with the last one.
I tried several things (setting the conversiontimeout option, using 4g of memory, ...), but I always get an OutOfMemoryError. Here is the last one I received :
[ERROR]: GeneratorException: (Element: -UNKNOWN-; Reported by: XtextGenerator)
org.eclipse.emf.common.util.WrappedException: java.lang.reflect.InvocationTargetException
at org.eclipse.xtext.xtext.generator.parser.antlr.AntlrToolFacade.runWithEncodingAndParams(AntlrToolFacade.java:157)
at org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2.runAntlr(XtextAntlrGeneratorFragment2.java:370)
at org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2.generateContentAssistGrammar(XtextAntlrGeneratorFragment2.java:294)
at org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2.doGenerate(XtextAntlrGeneratorFragment2.java:195)
at org.eclipse.xtext.xtext.generator.parser.antlr.AbstractAntlrGeneratorFragment2.generate(AbstractAntlrGeneratorFragment2.java:117)
at org.eclipse.xtext.xtext.generator.CompositeGeneratorFragment2.generate(CompositeGeneratorFragment2.java:48)
at org.eclipse.xtext.xtext.generator.XtextGenerator.invokeInternal(XtextGenerator.java:202)
at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:126)
at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:34)
at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:201)
at org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:35)
at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:19)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:102)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:62)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:52)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.run(Mwe2Launcher.java:78)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:36)
Caused by: java.lang.reflect.InvocationTargetException
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.xtext.xtext.generator.parser.antlr.AntlrToolFacade.runWithEncodingAndParams(AntlrToolFacade.java:155)
... 16 more
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.HashMap.newNode(Unknown Source)
at java.util.HashMap.putVal(Unknown Source)
at java.util.HashMap.put(Unknown Source)
at java.util.HashSet.add(Unknown Source)
at org.antlr.misc.OrderedHashSet.add(OrderedHashSet.java:63)
at org.antlr.analysis.DFAState.addNFAConfiguration(DFAState.java:226)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:633)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:709)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:709)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:756)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:709)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:756)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:709)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:765)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:709)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:709)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:683)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:709)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:709)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:683)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:756)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:709)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:709)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:692)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:709)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:709)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:709)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:709)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:765)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:709)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:709)
at org.antlr.analysis.NFAToDFAConverter.closure(NFAToDFAConverter.java:709)
at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.handleIssues(Mwe2Bridge.java:56)
at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:48)
at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:201)
at org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:35)
at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:19)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:102)
... 4 more
And here is the DSL :
grammar com.xxx.dsl.workflow.WfDsl
with org.eclipse.xtext.xbase.Xtype
hidden(WS, SL_COMMENT)
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
import "http://www.eclipse.org/xtext/common/JavaVMTypes" as jvmTypes
import "http://www.eclipse.org/xtext/xbase/Xbase" as xbase
generate wfDsl ".../dsl/workflow/WfDsl"
// Base elements allowed in the .wf file
Model:
(
(workflow=AvWFWorkflow)?
& (libs+=AvWFLib)*
);
// -----------------
// Language elements
AvWFLib:
"lib" name=ID ("extends" baseLib=[AvWFLib])? "{"
(
( stdparamdefs+=AvWFStdParamDef )*
& ( actiondefs+=AvWFActionDef )*
& ( allowdefs+=AvWFAllowDef )*
& ( validatordefs+=AvWFValidatorDef )*
& ( "script" scriptFileName=STRING ";" )?
)
"}";
AvWFStdParamDef:
(doc=ML_COMMENT)?
"stdparam" name=ID ":" type=Type ";";
AvWFActionDef:
(doc=ML_COMMENT)?
"action" name=ID actionContent=STRING ";";
AvWFAllowDef:
(doc=ML_COMMENT)?
"allow" key=STRING ";";
AvWFValidatorDef:
(doc=ML_COMMENT)?
// TODO Doesn't work because "workflow" is a keyword and imports often contain it :-(
// See http://www.eclipse.org/forums/index.php/m/1015388/
// "validator" name=ID ":" clsName=[ jvmTypes::JvmType | QualifiedName ] ";";
// "validator" name=ID ":" clsName=[ jvmTypes::JvmParameterizedTypeReference | QualifiedName ] ";";
"validator" name=ID clsName=STRING ";";
// AvWFWorkflow stuff
AvWFWorkflow:
"workflow" name=ID "{"
(
( "lib" lib=[AvWFLib] ";" )?
& ( "i18n" (i18nBundles+=QualifiedName) (',' i18nBundles+=QualifiedName)* ";" )?
& ( "start" startState=[AvWFState] ";" )?
& ( "script" scriptFileName=STRING ";" )?
& ( defaultValidator=AvWFValidator )?
& ( states+=AvWFState )*
)
"}";
AvWFValidator:
"validator" validator=[AvWFValidatorDef] ";";
// AvWFState stuff
AvWFState:
"state" name=ID "id" id=INT (isViewable?="viewable")? (isImportable?="importable")? "{"
(
("resKey" resKey=ResKeyValue ";")?
//& (params+=AvWFParam)*
& (targets+=AvWFTarget)*
)
"}";
// Param stuff
AvWFParam:
AvWFStdParam | AvWFUserParam;
AvWFUserParam:
"param" name=ID "=" value=STRING ";";
AvWFStdParam:
"stdparam" param=[AvWFStdParamDef] ("=" value=AvWFParamValue)? ";";
AvWFParamValue:
IntValue | StringValue | StatePointerValue;
// Target stuff
AvWFTarget:
"target" state=[AvWFState] "{"
(
("action" action=AvWFActionType ";")?
& ("resKey" resKey=ResKeyValue ";")?
& ("availableIf" available=AvWFBooleanGroovyCall ";")?
& ("automaticIf" automatic=AvWFBooleanGroovyCall ";")?
& ("preExecScript" preExecScript=AvWFGroovyCall ";")?
& ("postExecScript" postExecScript=AvWFGroovyCall ";")?
& (validator=AvWFValidator)?
& (allowAll?="allowAll" ";")?
& (allows+=AvWFAllow)*
& (params+=AvWFParam)*
)
"}";
AvWFAllow:
"allow" allow=AvWFAllowType ";";
AvWFAllowType:
StringValue | AvWFAllowDef;
AvWFActionType:
val=StringValue | actionDef=[AvWFActionDef];
AvWFBooleanGroovyCall:
method=ID "(" (params=STRING)? ")";
AvWFGroovyCall:
method=ID "(" (params=STRING)? ")";
// Data types */
IntValue:
val=INT;
StringValue:
val=STRING;
StatePointerValue:
state=[AvWFState];
Type:
PrimitiveType /* | ComplexType*/;
/*
ComplexType:
"XXX";
*/
PrimitiveType:
IntType | StringType | BooleanType | StatePointerType;
StatePointerType:
{StatePointerType} "statepointer";
IntType:
{IntType} "int";
StringType:
{StringType} "string";
BooleanType:
{BooleanType} "boolean";
ResKeyValue:
resKey=QualifiedName;
QualifiedName:
ID ("." ID)*;
terminal INT returns ecore::EInt: ('0'..'9')+;
Does anyone have any idea why this DSL stopped working with newer versions of Xtext ?
Do you think that splitting the workflow and the lib (more or less the workflow definition) could help to solve the issue ? (I want to avoid that as much as possible because it means that I would have to plan a migration of hundreds of customers files and potentially change a lot the existing plugin code)
Thanks in advance for your help.
|
|
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.03349 seconds