UnsupportedOperationException on XExpression compiling [message #996612] |
Wed, 02 January 2013 14:22 |
|
I've got these simple rules:
Expression:
expression=XExpression
;
IfStatement:
'IF''('condition=Expression')''{'
statements+=Statement*
'}'
;
Now, if I try (in my inferrer) to do something like this:
it.newLine.append('''if(«ifStat.condition.expression.toJavaExpression(it)») {''')
it causes following exception:
!STACK 0
java.lang.UnsupportedOperationException
at org.eclipse.xtext.common.types.impl.JvmIdentifiableElementImpl.getSimpleName(JvmIdentifiableElementImpl.java:68)
at org.eclipse.xtext.xbase.featurecalls.IdentifiableSimpleNameProvider.getSimpleName(IdentifiableSimpleNameProvider.java:48)
at org.eclipse.xtext.xbase.compiler.AbstractXbaseCompiler.getFavoriteVariableName(AbstractXbaseCompiler.java:382)
at org.eclipse.xtext.xbase.compiler.AbstractXbaseCompiler.declareFreshLocalVariable(AbstractXbaseCompiler.java:432)
at org.eclipse.xtext.xbase.compiler.FeatureCallCompiler._toJavaStatement(FeatureCallCompiler.java:146)
at org.eclipse.xtext.xbase.compiler.FeatureCallCompiler._toJavaStatement(FeatureCallCompiler.java:158)
at org.eclipse.xtext.xbase.compiler.FeatureCallCompiler.doInternalToJavaStatement(FeatureCallCompiler.java:111)
at org.eclipse.xtext.xbase.compiler.XbaseCompiler.doInternalToJavaStatement(XbaseCompiler.java:127)
at org.eclipse.xtext.xbase.compiler.AbstractXbaseCompiler.internalToJavaStatement(AbstractXbaseCompiler.java:289)
at org.eclipse.xtext.xbase.compiler.FeatureCallCompiler.prepareExpression(FeatureCallCompiler.java:237)
at org.eclipse.xtext.xbase.compiler.FeatureCallCompiler._toJavaStatement(FeatureCallCompiler.java:128)
at org.eclipse.xtext.xbase.compiler.FeatureCallCompiler.doInternalToJavaStatement(FeatureCallCompiler.java:113)
at org.eclipse.xtext.xbase.compiler.XbaseCompiler.doInternalToJavaStatement(XbaseCompiler.java:127)
at org.eclipse.xtext.xbase.compiler.AbstractXbaseCompiler.internalToJavaStatement(AbstractXbaseCompiler.java:289)
at org.eclipse.xtext.xbase.compiler.AbstractXbaseCompiler.toJavaStatement(AbstractXbaseCompiler.java:301)
at it.rcpvision.ats.suitetest.jvmmodel.LanguageJvmModelInferrer.compileStatement(LanguageJvmModelInferrer.java:190)
at it.rcpvision.ats.suitetest.jvmmodel.LanguageJvmModelInferrer$1$2$1.apply(LanguageJvmModelInferrer.java:124)
at it.rcpvision.ats.suitetest.jvmmodel.LanguageJvmModelInferrer$1$2$1.apply(LanguageJvmModelInferrer.java:1)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator.generateExecutableBody(JvmModelGenerator.java:784)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator._generateMember(JvmModelGenerator.java:574)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator.generateMember(JvmModelGenerator.java:1529)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator$2.apply(JvmModelGenerator.java:220)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator$2.apply(JvmModelGenerator.java:1)
at org.eclipse.xtext.xbase.lib.IterableExtensions.forEach(IterableExtensions.java:395)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator._generateBody(JvmModelGenerator.java:225)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator.generateBody(JvmModelGenerator.java:1501)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator.generateType(JvmModelGenerator.java:160)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator._internalDoGenerate(JvmModelGenerator.java:144)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator.internalDoGenerate(JvmModelGenerator.java:1486)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator.doGenerate(JvmModelGenerator.java:133)
at org.eclipse.xtext.builder.BuilderParticipant.handleChangedContents(BuilderParticipant.java:259)
at org.eclipse.xtext.builder.BuilderParticipant.build(BuilderParticipant.java:194)
at org.eclipse.xtext.builder.impl.RegistryBuilderParticipant.build(RegistryBuilderParticipant.java:60)
at org.eclipse.xtext.builder.impl.XtextBuilder.doBuild(XtextBuilder.java:161)
at org.eclipse.xtext.builder.impl.XtextBuilder.incrementalBuild(XtextBuilder.java:141)
at org.eclipse.xtext.builder.impl.XtextBuilder.build(XtextBuilder.java:91)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374)
at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143)
at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
[Updated on: Wed, 02 January 2013 14:48] Report message to a moderator
|
|
|
Re: UnsupportedOperationException on XExpression compiling [message #996647 is a reply to message #996612] |
Wed, 02 January 2013 15:44 |
|
I've found the reason of Exception, but I can't solve it:
when there is a variable in my XExpression it wants to get simple name of that variable
public String getSimpleName(JvmIdentifiableElement element) {
if (element == null || element.eIsProxy()) {
return null;
}
if (element instanceof JvmFeature) {
return ((JvmFeature) element).getSimpleName();
}
if (element instanceof JvmFormalParameter) {
return ((JvmFormalParameter) element).getName();
}
if (element instanceof XVariableDeclaration) {
return ((XVariableDeclaration) element).getName();
}
if (element instanceof XSwitchExpression) {
final XSwitchExpression xSwitchExpression = (XSwitchExpression) element;
String varName = xSwitchExpression.getLocalVarName();
if (varName!=null)
return varName;
XExpression expression = xSwitchExpression.getSwitch();
if (expression instanceof XFeatureCall) {
return getSimpleName(((XFeatureCall) expression).getFeature());
} else {
return null;
}
}
return element.getSimpleName();
}
note: return element.getSimpleName();
but my variable has no simple name:
Variable returns jvmTypes::JvmIdentifiableElement:
{Variable}type=JvmTypeReference simpleName=ID ';'
;
[Updated on: Wed, 02 January 2013 15:45] Report message to a moderator
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.01570 seconds