Skip to content

NullPointerException preventing Groovy compilation #616

@magao

Description

@magao

Eclipse Oxygen and Photon, JDK10 (for compilation), Groovy-Eclipse 3.0.0 (snapshot). This occurs with the latest snapshot 3.0.0.xx-201806281902-e47 (for Oxygen).

This error prevents compilation of Groovy code entirely.

On Eclipse Oxygen, the error is:

java.lang.NullPointerException
	at org.eclipse.jdt.internal.compiler.lookup.Scope.findDirectMemberType(Scope.java:1250)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.getTypeOrPackage(Scope.java:3311)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.getPackage(Scope.java:2916)
	at org.eclipse.jdt.internal.compiler.ast.QualifiedTypeReference.getTypeBinding(QualifiedTypeReference.java:104)
	at org.eclipse.jdt.internal.compiler.ast.TypeReference.internalResolveType(TypeReference.java:503)
	at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:607)
	at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:603)
	at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:599)
	at org.eclipse.jdt.internal.compiler.ast.Annotation.resolveType(Annotation.java:813)
	at org.eclipse.jdt.internal.compiler.ast.ASTNode.resolveAnnotations(ASTNode.java:865)
	at org.eclipse.jdt.internal.compiler.ast.ASTNode.resolveAnnotations(ASTNode.java:724)
	at org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.getAnnotationTagBits(SourceTypeBinding.java:1025)
	at org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.retrieveAnnotationHolder(SourceTypeBinding.java:2355)
	at org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding.retrieveAnnotations(ReferenceBinding.java:1724)
	at org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding.getAnnotations(ReferenceBinding.java:997)
	at org.codehaus.jdt.groovy.internal.compiler.ast.GroovyClassScope$TraitHelper.isTrait(GroovyClassScope.java:525)
	at org.codehaus.jdt.groovy.internal.compiler.ast.GroovyClassScope$TraitHelper.access$1(GroovyClassScope.java:518)
	at org.codehaus.jdt.groovy.internal.compiler.ast.GroovyClassScope.augmentMethodBindings(GroovyClassScope.java:168)
	at org.eclipse.jdt.internal.compiler.lookup.ClassScope.buildMethods(ClassScope.java:387)
	at org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.initializeForStaticImports(SourceTypeBinding.java:1390)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.findField(Scope.java:1424)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.findField(Scope.java:1328)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.getBinding(Scope.java:2064)
	at org.eclipse.jdt.internal.compiler.lookup.BlockScope.getBinding(BlockScope.java:485)
	at org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference.resolveType(QualifiedNameReference.java:999)
	at org.eclipse.jdt.internal.compiler.ast.MemberValuePair.resolveTypeExpecting(MemberValuePair.java:141)
	at org.eclipse.jdt.internal.compiler.ast.Annotation.resolveType(Annotation.java:862)
	at org.eclipse.jdt.internal.compiler.ast.ASTNode.resolveAnnotations(ASTNode.java:865)
	at org.eclipse.jdt.internal.compiler.ast.ASTNode.resolveAnnotations(ASTNode.java:724)
	at org.eclipse.jdt.internal.compiler.lookup.MethodBinding.getAnnotationTagBits(MethodBinding.java:651)
	at org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.resolveTypesWithSuspendedTempErrorHandlingPolicy(SourceTypeBinding.java:1869)
	at org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.resolveTypesFor(SourceTypeBinding.java:1849)
	at org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.methods(SourceTypeBinding.java:1539)
	at org.codehaus.jdt.groovy.internal.compiler.ast.GroovyClassScope.buildFieldsAndMethods(GroovyClassScope.java:430)
	at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.buildFieldsAndMethods(CompilationUnitScope.java:98)
	at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.completeTypeBindings(LookupEnvironment.java:514)
	at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:873)
	at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:397)
	at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:447)
	at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:429)
	at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:396)
	at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:191)
	at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:329)
	at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:62)
	at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:256)
	at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:180)
	at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:735)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246)
	at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:301)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:304)
	at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:360)
	at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:383)
	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:142)
	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:232)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)

Digging into the code - org.eclipse.jdt.internal.compiler.lookup.Scope.java:

public ReferenceBinding findDirectMemberType(char[] typeName, ReferenceBinding enclosingType) {
	if ((enclosingType.tagBits & TagBits.HasNoMemberTypes) != 0)
		return null; // know it has no member types (nor inherited member types)

it looks like enclosingType must be null. I would guess the fix is:

public ReferenceBinding findDirectMemberType(char[] typeName, ReferenceBinding enclosingType) {
	if (enclosingType == null || (enclosingType.tagBits & TagBits.HasNoMemberTypes) != 0)
		return null; // know it has no member types (nor inherited member types)

but I have no idea why enclosingType would be null, so there may be a more complex fix needed.

Unfortunately I'm having trouble building Groovy-Eclipse in my environment, so I can't test this fix at the moment.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions