Skip to content

ajc error for particular Pointcut and @Deprecated #322

@zuckel

Description

@zuckel

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 @Deprecated annotation on a parameter in an interface
  • a @Pointcut of 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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions