aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/ajcTests.xml8
-rw-r--r--tests/bugs/WithincodeNPE01.java13
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/BcelShadow.java4
3 files changed, 25 insertions, 0 deletions
diff --git a/tests/ajcTests.xml b/tests/ajcTests.xml
index 8b42152d3..e7031e59c 100644
--- a/tests/ajcTests.xml
+++ b/tests/ajcTests.xml
@@ -7832,4 +7832,12 @@
</compile>
</ajc-test>
+ <ajc-test dir="bugs"
+ pr="67774" title="Nullpointer-Exception when defining a withincode() pointcut">
+ <compile files="WithincodeNPE01.java">
+ <!-- there are 3 join points that result in decw match, but 2 are on the same line! -->
+ <message kind="warning" line="2" text="In String ctor"/>
+ <message kind="warning" line="11" text="In String ctor"/>
+ </compile>
+ </ajc-test>
</suite>
diff --git a/tests/bugs/WithincodeNPE01.java b/tests/bugs/WithincodeNPE01.java
new file mode 100644
index 000000000..8e7accb23
--- /dev/null
+++ b/tests/bugs/WithincodeNPE01.java
@@ -0,0 +1,13 @@
+aspect B {
+ public A.new(String s) { }
+ public void A.foo() { int i = 1; }
+
+ declare warning: withincode(void main(..)): "X"; // Would NPE without the fix for PR67774
+
+ declare warning: withincode(A.new(String)): "In String ctor";
+
+}
+
+class A {
+ private final static String name = A.class.getName();
+} \ No newline at end of file
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java b/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
index 3c0588a39..e81c43ff2 100644
--- a/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
+++ b/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
@@ -1015,6 +1015,10 @@ public class BcelShadow extends Shadow {
public Member getEnclosingCodeSignature() {
if (getKind().isEnclosingKind()) {
return getSignature();
+ } else if (getKind() == Shadow.PreInitialization) {
+ // PreInit doesn't enclose code but its signature
+ // is correctly the signature of the ctor.
+ return getSignature();
} else if (enclosingShadow == null) {
return getEnclosingMethod().getMemberView();
} else {