Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 354819 - [xbase] NPE in type computation
Summary: [xbase] NPE in type computation
Status: CLOSED FIXED
Alias: None
Product: TMF
Classification: Modeling
Component: Xtext (show other bugs)
Version: 2.0.1   Edit
Hardware: PC Linux
: P3 minor (vote)
Target Milestone: SR2   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-08-16 08:31 EDT by Achim Demelt CLA
Modified: 2017-09-19 17:54 EDT (History)
1 user (show)

See Also:
sebastian.zarnekow: indigo+


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Achim Demelt CLA 2011-08-16 08:31:56 EDT
I've recently stumbled over this NPE:


java.lang.NullPointerException: context
	at org.eclipse.xtext.common.types.util.TypeReferences.findDeclaredType(TypeReferences.java:170)
	at org.eclipse.xtext.common.types.util.TypeReferences.getTypeForName(TypeReferences.java:143)
	at org.eclipse.xtext.common.types.util.TypeConformanceComputer.getCommonSuperType(TypeConformanceComputer.java:689)
	at org.eclipse.xtext.xbase.typing.XbaseTypeProvider.getCommonType(XbaseTypeProvider.java:480)
	at org.eclipse.xtext.xbase.typing.XbaseTypeProvider._type(XbaseTypeProvider.java:452)
	at sun.reflect.GeneratedMethodAccessor44.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291)
	at org.eclipse.xtext.xbase.typing.AbstractTypeProvider$2.doComputation(AbstractTypeProvider.java:184)
	at org.eclipse.xtext.xbase.typing.AbstractTypeProvider$2.doComputation(AbstractTypeProvider.java:1)
	at org.eclipse.xtext.xbase.typing.AbstractTypeProvider$CyclicHandlingSupport$3.get(AbstractTypeProvider.java:457)
	at org.eclipse.xtext.xbase.typing.AbstractTypeProvider$CyclicHandlingSupport$3.get(AbstractTypeProvider.java:1)
	at org.eclipse.xtext.xbase.typing.AbstractTypeProvider$1.get(AbstractTypeProvider.java:121)
	at org.eclipse.xtext.xbase.typing.AbstractTypeProvider$CyclicHandlingSupport.getType(AbstractTypeProvider.java:454)
	at org.eclipse.xtext.xbase.typing.AbstractTypeProvider.doGetType(AbstractTypeProvider.java:215)
	at org.eclipse.xtext.xbase.typing.AbstractTypeProvider.getType(AbstractTypeProvider.java:227)
	at org.eclipse.xtext.xbase.typing.XbaseTypeProvider._type(XbaseTypeProvider.java:517)
	at sun.reflect.GeneratedMethodAccessor29.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291)
	at org.eclipse.xtext.xbase.typing.AbstractTypeProvider$2.doComputation(AbstractTypeProvider.java:184)
	at org.eclipse.xtext.xbase.typing.AbstractTypeProvider$2.doComputation(AbstractTypeProvider.java:1)
	at org.eclipse.xtext.xbase.typing.AbstractTypeProvider$CyclicHandlingSupport$3.get(AbstractTypeProvider.java:457)
	at org.eclipse.xtext.xbase.typing.AbstractTypeProvider$CyclicHandlingSupport$3.get(AbstractTypeProvider.java:1)
	at org.eclipse.xtext.xbase.typing.AbstractTypeProvider$1.get(AbstractTypeProvider.java:121)
	at org.eclipse.xtext.xbase.typing.AbstractTypeProvider$CyclicHandlingSupport.getType(AbstractTypeProvider.java:454)
	at org.eclipse.xtext.xbase.typing.AbstractTypeProvider.doGetType(AbstractTypeProvider.java:215)
	at org.eclipse.xtext.xbase.typing.AbstractTypeProvider.getType(AbstractTypeProvider.java:227)
	at org.eclipse.xtext.xbase.typing.AbstractTypeProvider.getType(AbstractTypeProvider.java:223)
	at org.eclipse.xtext.xbase.compiler.AbstractXbaseCompiler.isPrimitiveVoid(AbstractXbaseCompiler.java:106)
	at org.eclipse.xtext.xbase.compiler.AbstractXbaseCompiler.compile(AbstractXbaseCompiler.java:90)
	at org.eclipse.xtext.xtend2.compiler.Xtend2Compiler.compile(Xtend2Compiler.java:320)
	at org.eclipse.xtext.xtend2.compiler.Xtend2Compiler.compile(Xtend2Compiler.java:161)
	at org.eclipse.xtext.xtend2.compiler.Xtend2Compiler.compile(Xtend2Compiler.java:114)
	at org.eclipse.xtext.xtend2.ui.builder.Xtend2BuilderParticipant.compile(Xtend2BuilderParticipant.java:146)
	at org.eclipse.xtext.xtend2.ui.builder.Xtend2BuilderParticipant.processDelta(Xtend2BuilderParticipant.java:115)
	at org.eclipse.xtext.xtend2.ui.builder.Xtend2BuilderParticipant.build(Xtend2BuilderParticipant.java:75)
	at org.eclipse.xtext.builder.impl.RegistryBuilderParticipant.build(RegistryBuilderParticipant.java:60)
	at org.eclipse.xtext.builder.impl.XtextBuilder.doBuild(XtextBuilder.java:160)
	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)


The culprit is this method in my Xtend file:



def dispatch generateTypeRef(UiComponent c) {
  if (c.originalComponent != null)
    c.originalComponent.generateTypeRef
  else if (c.native)
    '''«c.name»'''
  else
    '''«c.packageName».«c.className»'''
}



Workaround: Explicitly cast the the first branch of the if expression:


def dispatch generateTypeRef(UiComponent c) {
  if (c.originalComponent != null)
    c.originalComponent.generateTypeRef as StringConcatenation
  else if (c.native)
    '''«c.name»'''
  else
    '''«c.packageName».«c.className»'''
}



I should note that my Xtend file also contains this definition:

def dispatch StringConcatenation generateTypeRef(EObject o) {
  o.computeType.generateTypeRef
}

so the generateTypeRef method is actually explicitly typed to return a StringConcatenation
Comment 1 Sebastian Zarnekow CLA 2011-09-30 07:17:43 EDT
No NPE is thrown, though you get an error marker because the return type of recursive dispatch functions can currently not be inferred and object is assumed.
Comment 2 Karsten Thoms CLA 2017-09-19 17:43:28 EDT
Closing all bugs that were set to RESOLVED before Neon.0
Comment 3 Karsten Thoms CLA 2017-09-19 17:54:34 EDT
Closing all bugs that were set to RESOLVED before Neon.0