aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/ajcTests.xml12
-rw-r--r--tests/bugs/concretizeNpe/base/ExceptionHandling.java6
-rw-r--r--tests/bugs/concretizeNpe/model/ModelExceptionHandling.java13
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java6
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);
}