Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NullPointerException in AnnotationBinding.java #232

Closed
admxiii opened this issue Nov 22, 2016 · 10 comments
Closed

NullPointerException in AnnotationBinding.java #232

admxiii opened this issue Nov 22, 2016 · 10 comments

Comments

@admxiii
Copy link

admxiii commented Nov 22, 2016

I've been getting this exception randomly during compile since issue #224 has been fixed

java.lang.NullPointerException
at org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding.setMethodBindings(AnnotationBinding.java:222)
at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.createAnnotation(LookupEnvironment.java:683)
at org.eclipse.jdt.internal.compiler.ast.Annotation.resolveType(Annotation.java:805)
at org.eclipse.jdt.internal.compiler.ast.ASTNode.resolveAnnotations(ASTNode.java:837)
at org.eclipse.jdt.internal.compiler.ast.ASTNode.resolveAnnotations(ASTNode.java:705)
at org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.getAnnotationTagBits(SourceTypeBinding.java:992)
at org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.checkAnnotationsInType(SourceTypeBinding.java:857)
at org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.faultInTypesForFieldsAndMethods(SourceTypeBinding.java:868)
at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.faultInTypes(CompilationUnitScope.java:554)
at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:913)
at org.eclipse.jdt.internal.compiler.ProcessTaskManager.run(ProcessTaskManager.java:141)
at java.lang.Thread.run(Unknown Source)

@eric-milles
Copy link
Member

Can you share the source annotation that is being compiled?

@admxiii
Copy link
Author

admxiii commented Nov 22, 2016

its the same code example as issue #224. Happens randomly throughout the day during compile, not every time, and not always the same object (i have the custom annotation on many domain objects in the application). I can't share any real code because its confidential, so i created the simplified example.

@eric-milles
Copy link
Member

I've found that simplified examples can get you only so far. Case and point, the original issue has been patched but a more insidious issue is now happening intermittently. You could pull down the code, build the plug-ins and debug from your end.

@eric-milles
Copy link
Member

Can you retest with the latest snapshot?

@admxiii
Copy link
Author

admxiii commented Dec 5, 2016

i don't see that exact error anymore, now anytime i change a groovy file with one of these annotations, i immediately get an error with no stacktrace, then if i do a clean then i get a stacktrace. A 2rd clean usually fixes everything.

first error -
Problems occurred when invoking code from plug-in: "org.eclipse.core.resources".
java.lang.NullPointerException

second error after clean -
BUG! exception in phase 'semantic analysis' in source unit 'OMITTED.groovy' JDTClassNode.getTypeClass() cannot locate class for com.OMITTED.CustomEqualsAndHashCode using transform loader groovy.lang.GroovyClassLoader@7b6b2eab
at org.codehaus.jdt.groovy.internal.compiler.ast.JDTClassNode.getTypeClass(JDTClassNode.java:716)
at org.codehaus.groovy.transform.AnnotationCollectorTransform.getTargetListFromClass(AnnotationCollectorTransform.java:214)
at org.codehaus.groovy.transform.AnnotationCollectorTransform.getMeta(AnnotationCollectorTransform.java:51)
at org.codehaus.groovy.transform.AnnotationCollectorTransform.getStoredTargetList(AnnotationCollectorTransform.java:182)
at org.codehaus.groovy.transform.AnnotationCollectorTransform.getTargetAnnotationList(AnnotationCollectorTransform.java:277)
at org.codehaus.groovy.transform.AnnotationCollectorTransform.visit(AnnotationCollectorTransform.java:303)
at org.codehaus.groovy.transform.ASTTransformationCollectorCodeVisitor.addCollectedAnnotations(ASTTransformationCollectorCodeVisitor.java:178)
at org.codehaus.groovy.transform.ASTTransformationCollectorCodeVisitor.visitAnnotations(ASTTransformationCollectorCodeVisitor.java:105)
at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:53)
at org.codehaus.groovy.transform.ASTTransformationCollectorCodeVisitor.visitClass(ASTTransformationCollectorCodeVisitor.java:89)
at org.codehaus.groovy.transform.ASTTransformationVisitor$1.call(ASTTransformationVisitor.java:198)
at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1188)
at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:653)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:631)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:608)
at org.codehaus.jdt.groovy.internal.compiler.ast.GroovyCompilationUnitDeclaration.processToPhase(GroovyCompilationUnitDeclaration.java:214)
at org.codehaus.jdt.groovy.internal.compiler.ast.GroovyCompilationUnitDeclaration.resolve(GroovyCompilationUnitDeclaration.java:618)
at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:1085)
at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:1130)
at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:219)
at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:288)
at org.codehaus.jdt.groovy.model.GroovyReconcileWorkingCopyOperation.makeConsistent(GroovyReconcileWorkingCopyOperation.java:84)
at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:99)
at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:724)
at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:790)
at org.codehaus.jdt.groovy.model.GroovyCompilationUnit.reconcile(GroovyCompilationUnit.java:427)
at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1234)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:135)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.access$0(JavaReconcilingStrategy.java:110)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:90)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:87)
at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:154)
at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:89)
at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.reconcile(JavaCompositeReconcilingStrategy.java:104)
at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:73)
at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:207)

@eric-milles
Copy link
Member

Okay, I'm going to roll back one change in GroovyParser that I was unsure about. When the parser is reset, it looked up new class loaders; this may be why you are getting a class loader miss. Should be available for retest in about 30 mins.

@admxiii
Copy link
Author

admxiii commented Dec 5, 2016

The old error is back now, if you change any groovy file with a custom annotation you get this error until you do a full clean build.

Internal compiler error: java.lang.NullPointerException at org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding.setMethodBindings(AnnotationBinding.java:222)

@eric-milles
Copy link
Member

Okay, got it. Short-circuit in Annotation.resolveType:

		// GROOVY edit
		boolean isGroovyAlias = isFakeGroovyAnnotation(typeBinding);
		// ensure type refers to an annotation type
		if (!typeBinding.isAnnotationType() && typeBinding.isValidBinding()) {
			if (isGroovyAlias) {
				// allow the Groovy annotation to show in Javadoc
				// TODO: Does this cause unanticipated side effects?
				this.compilerAnnotation = scope.environment().createAnnotation(
						(ReferenceBinding) this.resolvedType, computeElementValuePairs());
			} else {
			scope.problemReporter().notAnnotationType(typeBinding, this.type);
			}
			return null;
		}

Under computeElementValuePairs(), an array with a null value is created. I'm trying with no EVPairs for this case...

@eric-milles
Copy link
Member

Could you recheck?

@admxiii
Copy link
Author

admxiii commented Dec 5, 2016

looks like its working now, tried a bunch of stuff and don't see any errors anymore, thanks for looking into this.

@admxiii admxiii closed this as completed Dec 5, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants