Community
Participate
Working Groups
Build Identifier: 20110615-0604 java.lang.NullPointerException at org.aspectj.weaver.ResolvedPointcutDefinition.parameterizedWith(ResolvedPointcutDefinition.java:121) at org.aspectj.weaver.ReferenceType.getDeclaredPointcuts(ReferenceType.java:797) at org.aspectj.weaver.ResolvedType.getExposedPointcuts(ResolvedType.java:2323) at org.aspectj.weaver.ResolvedType.getExposedPointcuts(ResolvedType.java:2316) at org.aspectj.ajdt.internal.compiler.lookup.EclipseSourceType.che ... oBuildJob.run(AutoBuildJob.java:241) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) Compile error: NullPointerException thrown: null Reproducible: Always Steps to Reproduce: The code below fails during compilation: package test.aop; import java.io.Serializable; public abstract class AbstractAdapter<T extends Serializable> { protected abstract T execute(T message); } package test.aop; public class Adapter extends AbstractAdapter<String> { @Override public String execute(String message) { return message; } } package test.aop; import java.io.Serializable; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; @Aspect public abstract class AbstractProbingAspect<T extends Serializable> { @Pointcut("") protected abstract void adapterMethodExecution(); @Around("adapterMethodExecution()") public T around(ProceedingJoinPoint thisJoinPoint) throws Throwable { return (T) thisJoinPoint.proceed(); } protected abstract String extractFunctionName(T command); }
Created attachment 198894 [details] AbstractAdapter.java
Created attachment 198895 [details] Adapter.java
Created attachment 198896 [details] AbstractProbingAspect.java
Created attachment 198897 [details] ProbingAspect.java
Fixed. The problem was that annotation style was not handling an empty pointcut quite right, but this wouldn't trip anything up until it was used in a generic aspect. 3 testcases added based on the attached code. (1) the code as it is (2) the code style version of it (3) the annotation style but extended to actually run and check the matching