diff options
-rw-r--r-- | tests/ajcTests.xml | 12 | ||||
-rw-r--r-- | tests/bugs/concretizeNpe/base/ExceptionHandling.java | 6 | ||||
-rw-r--r-- | tests/bugs/concretizeNpe/model/ModelExceptionHandling.java | 13 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java | 6 |
4 files changed, 35 insertions, 2 deletions
diff --git a/tests/ajcTests.xml b/tests/ajcTests.xml index 9fd028f8f..cd3310c0c 100644 --- a/tests/ajcTests.xml +++ b/tests/ajcTests.xml @@ -6763,4 +6763,16 @@ <compile files="AdviceInteraction.java"/> <run class="AdviceInteraction"/> </ajc-test> + + <ajc-test dir="bugs/concretizeNpe" pr="43033" + title="NPE in concretization error path"> + <compile files="base/ExceptionHandling.java,model/ModelExceptionHandling.java"> + <message line="5" kind="error" text="pointcut base.ExceptionHandling.scope() is abstract"/> + <message line="4" kind="error" text="inherited abstract pointcut base.ExceptionHandling.scope() is not made concrete"/> + <message line="8" kind="error" text="inherited abstract pointcut base.ExceptionHandling.scope() is not made concrete"/> + <message line="12" kind="error" text="Unmatched bracket"/> + <message line="13" kind="error" text="Syntax error on token"/> + </compile> + </ajc-test> + </suite> diff --git a/tests/bugs/concretizeNpe/base/ExceptionHandling.java b/tests/bugs/concretizeNpe/base/ExceptionHandling.java new file mode 100644 index 000000000..5f63ad61a --- /dev/null +++ b/tests/bugs/concretizeNpe/base/ExceptionHandling.java @@ -0,0 +1,6 @@ +package base; + +public abstract aspect ExceptionHandling { + public abstract pointcut scope(); + declare soft: Exception: scope(); +} diff --git a/tests/bugs/concretizeNpe/model/ModelExceptionHandling.java b/tests/bugs/concretizeNpe/model/ModelExceptionHandling.java new file mode 100644 index 000000000..0778aec22 --- /dev/null +++ b/tests/bugs/concretizeNpe/model/ModelExceptionHandling.java @@ -0,0 +1,13 @@ + +package model; + +import java.lang.RuntimeException; + +import base.ExceptionHandling; + +public aspect ModelExceptionHandling extends ExceptionHandling { + public pointcut scope() : within(*); + + protected RuntimeException convertCheckedException(Throwable t) { + return new RuntimeException(t.getMessage(),t +} diff --git a/weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java b/weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java index 8781641c7..1b9848ccf 100644 --- a/weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java +++ b/weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java @@ -18,10 +18,10 @@ import java.io.DataOutputStream; import java.io.IOException; import java.lang.reflect.Modifier; -import org.apache.bcel.classfile.JavaClass; import org.aspectj.bridge.IMessage; import org.aspectj.bridge.MessageUtil; import org.aspectj.util.FuzzyBoolean; +import org.aspectj.weaver.ShadowMunger; import org.aspectj.weaver.BCException; import org.aspectj.weaver.ISourceContext; import org.aspectj.weaver.IntMap; @@ -240,9 +240,11 @@ public class ReferencePointcut extends Pointcut { if (pointcutDec.isAbstract()) { //Thread.currentThread().dumpStack(); + ShadowMunger enclosingAdvice = bindings.getEnclosingAdvice(); searchStart.getWorld().showMessage(IMessage.ERROR, pointcutDec + " is abstract", - getSourceLocation(), bindings.getEnclosingAdvice().getSourceLocation()); + getSourceLocation(), + (null == enclosingAdvice) ? null : enclosingAdvice.getSourceLocation()); return Pointcut.makeMatchesNothing(Pointcut.CONCRETE); } |