-
Notifications
You must be signed in to change notification settings - Fork 97
Description
I've run into an aspectj compiler problem that only happens in a very specific case. It might be related to #316 because it also involves the @deprecated annotation.
See https://github.com/zuckel/aspectj-nullrecipient-reproducer for a minimal reproducer.
The setup involves
- a
@Deprecatedannotation on a parameter in an interface - a
@Pointcutof the form"execution(* *(@SomeAnnotation (*), ..))"(the comma being the important part)
The annotation does not have to exist at all or be present on the interface or class.
@kriegaex I am fully aware that you are not currently actively maintaining this, and am not expecting any update. I am merely documenting this issue. Maybe sometime, someone (maybe me?) has time to look into it.
Environment
Apache Maven 3.9.8 (36645f6c9b5079805ea5009217e36f2cffd34256)
Java version: 21.0.5, vendor: Eclipse Adoptium, runtime: /home/flasinger/jvm/jdk-21.0.5+11
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "6.8.0-51-generic", arch: "amd64", family: "unix"
It happens on all the latest aspectj versions up to at least 1.9.22.1.
For some of my colleagues it happens every time, while for others it never happens. We haven't been able to figure out why, yet. We are all on the exact same JDK version. (Maven version does differ but is not conclusive.)
Code
public class TheClass implements TheInterface {
@Override
public void method(int param) {
}
}
public interface TheInterface {
void method(@Deprecated int param);
}
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
@Aspect
public class TheAspect {
@Around("execution(* *(@SomeAnnotation (*), ..))")
public Object aroundContext(ProceedingJoinPoint pjp) throws Throwable {
return pjp.proceed();
}
}
Error
[ERROR] Failed to execute goal dev.aspectj:aspectj-maven-plugin:1.14:compile (default) on project aspectj-nullrecipient-reproducer: AJC compiler errors:
[ERROR] abort trouble in:
[ERROR] public class TheClass extends java.lang.Object implements TheInterface:
[ERROR] public void <init>():
[ERROR] ALOAD_0 // LTheClass; this (line 1)
[ERROR] INVOKESPECIAL java.lang.Object.<init> ()V
[ERROR] constructor-execution(void TheClass.<init>())
[ERROR] | RETURN
[ERROR] constructor-execution(void TheClass.<init>())
[ERROR] end public void <init>()
[ERROR]
[ERROR] public void method(int) org.aspectj.weaver.MethodDeclarationLineNumber: 4:79
[ERROR] :
[ERROR] RETURN (line 6)
[ERROR] end public void method(int)
[ERROR]
[ERROR] end public class TheClass
[ERROR] -- (NullPointerException) Cannot invoke "org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Binding.setAnnotations(org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding[], boolean)" because "this.recipient" is null
[ERROR] Cannot invoke "org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Binding.setAnnotations(org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding[], boolean)" because "this.recipient" is null
[ERROR] java.lang.NullPointerException: Cannot invoke "org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Binding.setAnnotations(org.aspectj.org.eclipse.jdt.internal.compiler.lookup.AnnotationBinding[], boolean)" because "this.recipient" is null
[ERROR] at org.aspectj.org.eclipse.jdt.internal.compiler.ast.Annotation.resolveType(Annotation.java:973)
[ERROR] at org.aspectj.ajdt.internal.compiler.lookup.EclipseResolvedMember.getEclipseParameterAnnotations(EclipseResolvedMember.java:378)
[ERROR] at org.aspectj.ajdt.internal.compiler.lookup.EclipseResolvedMember.getParameterAnnotationTypes(EclipseResolvedMember.java:253)
[ERROR] at org.aspectj.weaver.JoinPointSignature.getParameterAnnotationTypes(JoinPointSignature.java:257)
[ERROR] at org.aspectj.weaver.patterns.SignaturePattern.matchesExactlyMethod(SignaturePattern.java:532)
[ERROR] at org.aspectj.weaver.patterns.SignaturePattern.matchesExactly(SignaturePattern.java:360)
[ERROR] at org.aspectj.weaver.patterns.SignaturePattern.matches(SignaturePattern.java:320)
[ERROR] at org.aspectj.weaver.patterns.KindedPointcut.matchInternal(KindedPointcut.java:202)
[ERROR] at org.aspectj.weaver.patterns.Pointcut.match(Pointcut.java:137)
[ERROR] at org.aspectj.weaver.patterns.AndPointcut.matchInternal(AndPointcut.java:56)
[ERROR] at org.aspectj.weaver.patterns.Pointcut.match(Pointcut.java:137)
[ERROR] at org.aspectj.weaver.ShadowMunger.match(ShadowMunger.java:113)
[ERROR] at org.aspectj.weaver.Advice.match(Advice.java:113)
[ERROR] at org.aspectj.weaver.bcel.BcelAdvice.match(BcelAdvice.java:161)
[ERROR] at org.aspectj.weaver.bcel.BcelClassWeaver.match(BcelClassWeaver.java:3336)
[ERROR] at org.aspectj.weaver.bcel.BcelClassWeaver.match(BcelClassWeaver.java:2716)
[ERROR] at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:483)
[ERROR] at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:103)
[ERROR] at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1703)
[ERROR] at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:1647)
[ERROR] at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1414)
[ERROR] at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1189)
[ERROR] at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.weaveQueuedEntries(AjPipeliningCompilerAdapter.java:510)
[ERROR] at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.queueForWeaving(AjPipeliningCompilerAdapter.java:446)
[ERROR] at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.afterProcessing(AjPipeliningCompilerAdapter.java:431)
[ERROR] at org.aspectj.ajdt.internal.compiler.CompilerAdapter.ajc$after$org_aspectj_ajdt_internal_compiler_CompilerAdapter$5$6b855184(CompilerAdapter.aj:104)
[ERROR] at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:945)
[ERROR] at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.processCompiledUnits(Compiler.java:575)
[ERROR] at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:475)
[ERROR] at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:426)
[ERROR] at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:1101)
[ERROR] at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:275)
[ERROR] at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:188)
[ERROR] at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:103)
[ERROR] at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:47)
[ERROR] at org.aspectj.tools.ajc.Main.run(Main.java:385)
[ERROR] at org.aspectj.tools.ajc.Main.runMain(Main.java:274)
[ERROR] at org.codehaus.mojo.aspectj.AbstractAjcCompiler.execute(AbstractAjcCompiler.java:627)
[ERROR] at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:126)
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2(MojoExecutor.java:328)
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:316)
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:174)
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.access$000(MojoExecutor.java:75)
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor$1.run(MojoExecutor.java:162)
[ERROR] at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute(DefaultMojosExecutionStrategy.java:39)
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:159)
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:105)
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:73)
[ERROR] at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:53)
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:118)
[ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:261)
[ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:173)
[ERROR] at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:101)
[ERROR] at org.apache.maven.cli.MavenCli.execute(MavenCli.java:903)
[ERROR] at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:280)
[ERROR] at org.apache.maven.cli.MavenCli.main(MavenCli.java:203)
[ERROR] at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
[ERROR] at java.base/java.lang.reflect.Method.invoke(Method.java:580)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:255)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:201)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:361)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:314)