Xbase 2.4.2 - Using new JvmUnknownTypeReference [message #1066144] |
Mon, 01 July 2013 09:29 |
Boris Brodski Messages: 112 Registered: July 2009 |
Senior Member |
|
|
Hello,
migration to Xtext 2.4.2 I found the new JvmUnknownTypeReference concept very interesting. As I understood,
I don't need those nasty null-checks any more after creating new references with newTypeRef(). So I can write
superTypes += myEntity.findTypeRef(myEntity.fullQualifiedName + "Factory")
if 'myEntity.fullQualifiedName + "Factory"' class exists, it get used
if 'myEntity.fullQualifiedName + "Factory"' class doesn't exist, the full qualified name get generated producing a simple java error. Quickfix can be used then to create missing class.
I expected to get the same nice behavior within body=[]. I tried
1. body = [ it.append(myEntity.findTypeRef(myEntity.fullQualifiedName + "Factory").type) ]
2. body = [ methodDefinition.newTypeRef("java.lang.String").serializeSafely(it) ] (extension ErrorSafeExtensions)
1: NullPointerException, if class doesn't exist (since JvmUnknownTypeReference.type returns null)
2: NullPointerException, if class exists! (see below)
How should I append/serialize a type within body=[] if unsure, that the class is present?
(Import manager should get involved, so just "append string" is not the solution I'm looking for)
Thank you!
Regards,
Boris
Stacktrace:
java.lang.NullPointerException
at org.eclipse.xtext.xbase.compiler.TypeReferenceSerializer.serialize(TypeReferenceSerializer.java:90)
at org.eclipse.xtext.xbase.compiler.TypeReferenceSerializer.serialize(TypeReferenceSerializer.java:84)
at org.eclipse.xtext.xbase.compiler.TypeReferenceSerializer.serialize(TypeReferenceSerializer.java:81)
at org.eclipse.xtext.xbase.compiler.ErrorSafeExtensions.serializeSafely(ErrorSafeExtensions.java:262)
at org.eclipse.xtext.xbase.compiler.ErrorSafeExtensions.serializeSafely(ErrorSafeExtensions.java:201)
at de.finkonsens.pingo.bnoapi.xtext.jvmmodel.BnoApiJvmModelInferrer$4$3$1.apply(BnoApiJvmModelInferrer.java:228)
at de.finkonsens.pingo.bnoapi.xtext.jvmmodel.BnoApiJvmModelInferrer$4$3$1.apply(BnoApiJvmModelInferrer.java:1)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator.generateExecutableBody(JvmModelGenerator.java:1101)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator._generateMember(JvmModelGenerator.java:873)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator.generateMember(JvmModelGenerator.java:1880)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator$2.apply(JvmModelGenerator.java:288)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator$2.apply(JvmModelGenerator.java:1)
at org.eclipse.xtext.xbase.lib.ObjectExtensions.operator_doubleArrow(ObjectExtensions.java:139)
at org.eclipse.xtext.xbase.compiler.LoopExtensions.forEach(LoopExtensions.java:34)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator._generateBody(JvmModelGenerator.java:292)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator.generateBody(JvmModelGenerator.java:1852)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator.generateType(JvmModelGenerator.java:211)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator._internalDoGenerate(JvmModelGenerator.java:202)
at org.eclipse.xtext.xbase.compiler.JvmModelGenerator.internalDoGenerate(JvmModelGenerator.java:1835)
at de.finkonsens.pingo.bnoapi.xtext.outputconfiguration.OutputConfigurationAwaredGenerator.doGenerate(OutputConfigurationAwaredGenerator.java:24)
at org.eclipse.xtext.builder.BuilderParticipant.handleChangedContents(BuilderParticipant.java:299)
at org.eclipse.xtext.builder.BuilderParticipant.build(BuilderParticipant.java:229)
at org.eclipse.xtext.builder.impl.RegistryBuilderParticipant.build(RegistryBuilderParticipant.java:60)
at org.eclipse.xtext.builder.impl.XtextBuilder.doBuild(XtextBuilder.java:186)
at org.eclipse.xtext.builder.impl.XtextBuilder.fullBuild(XtextBuilder.java:210)
at org.eclipse.xtext.builder.impl.XtextBuilder.build(XtextBuilder.java:89)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:726)
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:53)
|
|
|
|
Powered by
FUDForum. Page generated in 0.02661 seconds