summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/bugs187/475152/AbstractAspect.aj5
-rw-r--r--tests/bugs187/475152/AjTarget.java9
-rw-r--r--tests/bugs187/475152/BaseAspect.aj15
-rw-r--r--tests/bugs187/475152/TestAspect.aj5
-rw-r--r--tests/bugs187/475152/TestClass.java11
-rw-r--r--tests/src/org/aspectj/systemtest/ajc187/Ajc187Tests.java4
-rw-r--r--tests/src/org/aspectj/systemtest/ajc187/ajc187.xml4
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java7
8 files changed, 57 insertions, 3 deletions
diff --git a/tests/bugs187/475152/AbstractAspect.aj b/tests/bugs187/475152/AbstractAspect.aj
new file mode 100644
index 000000000..7003b8bf5
--- /dev/null
+++ b/tests/bugs187/475152/AbstractAspect.aj
@@ -0,0 +1,5 @@
+package ajtest;
+
+public abstract aspect AbstractAspect extends BaseAspect {
+
+}
diff --git a/tests/bugs187/475152/AjTarget.java b/tests/bugs187/475152/AjTarget.java
new file mode 100644
index 000000000..c025185ba
--- /dev/null
+++ b/tests/bugs187/475152/AjTarget.java
@@ -0,0 +1,9 @@
+package ajtest;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AjTarget {
+
+}
diff --git a/tests/bugs187/475152/BaseAspect.aj b/tests/bugs187/475152/BaseAspect.aj
new file mode 100644
index 000000000..ddfaa3183
--- /dev/null
+++ b/tests/bugs187/475152/BaseAspect.aj
@@ -0,0 +1,15 @@
+package ajtest;
+
+import java.lang.reflect.Field;
+
+import ajtest.AjTarget;
+
+public abstract aspect BaseAspect {
+
+ protected pointcut mapped(Object obj) : get(@(AjTarget) Long *) && target(obj);
+
+ Object around(Object obj) : mapped(obj) {
+ Object value = proceed(obj);
+ return value;
+ }
+}
diff --git a/tests/bugs187/475152/TestAspect.aj b/tests/bugs187/475152/TestAspect.aj
new file mode 100644
index 000000000..be1adeaf0
--- /dev/null
+++ b/tests/bugs187/475152/TestAspect.aj
@@ -0,0 +1,5 @@
+package ajtest;
+
+public aspect TestAspect extends AbstractAspect {
+
+}
diff --git a/tests/bugs187/475152/TestClass.java b/tests/bugs187/475152/TestClass.java
new file mode 100644
index 000000000..1b13a90e1
--- /dev/null
+++ b/tests/bugs187/475152/TestClass.java
@@ -0,0 +1,11 @@
+package ajtest;
+
+public class TestClass {
+ @AjTarget
+ private Long test;
+
+ public void testMethod() {
+ Object o = test;
+ System.out.println(o);
+ }
+}
diff --git a/tests/src/org/aspectj/systemtest/ajc187/Ajc187Tests.java b/tests/src/org/aspectj/systemtest/ajc187/Ajc187Tests.java
index 4907eeafe..ece3240e0 100644
--- a/tests/src/org/aspectj/systemtest/ajc187/Ajc187Tests.java
+++ b/tests/src/org/aspectj/systemtest/ajc187/Ajc187Tests.java
@@ -24,6 +24,10 @@ import org.aspectj.testing.XMLBasedAjcTestCase;
*/
public class Ajc187Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
+ public void testInfiniteLoop_475152() throws Exception {
+ runTest("infinite loop");
+ }
+
public void testAnnoConversion_474165() throws Exception {
runTest("anno conversion");
}
diff --git a/tests/src/org/aspectj/systemtest/ajc187/ajc187.xml b/tests/src/org/aspectj/systemtest/ajc187/ajc187.xml
index ccf87e34f..e6db6d5e5 100644
--- a/tests/src/org/aspectj/systemtest/ajc187/ajc187.xml
+++ b/tests/src/org/aspectj/systemtest/ajc187/ajc187.xml
@@ -2,6 +2,10 @@
<suite>
+<ajc-test dir="bugs187/475152" title="infinite loop">
+<compile files="AbstractAspect.aj, BaseAspect.aj, TestClass.java, AjTarget.java, TestAspect.aj" options="-1.8"/>
+</ajc-test>
+
<ajc-test dir="bugs187/469889" title="broken java">
<!--
<compile files="A.java B.java AbstractA.java BImpl.java Main.java" options="-1.8"/>
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java b/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java
index 64d6a1054..a9f214723 100644
--- a/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java
+++ b/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java
@@ -243,10 +243,11 @@ class BcelAdvice extends Advice {
containsInvokedynamic = 1;
LazyMethodGen lmg = boType.getLazyClassGen().getLazyMethodGen(this.signature.getName(), this.signature.getSignature(), true);
// Check Java8 supertypes
+ ResolvedType searchType = concreteAspect;
while (lmg == null) {
- ResolvedType superType = boType.getSuperclass();
- if (superType == null) break;
- ReferenceTypeDelegate rtd = ((ReferenceType)superType).getDelegate();
+ searchType = searchType.getSuperclass();
+ if (searchType == null) break;
+ ReferenceTypeDelegate rtd = ((ReferenceType)searchType).getDelegate();
if (rtd instanceof BcelObjectType) {
BcelObjectType bot = (BcelObjectType)rtd;
if (bot.javaClass.getMajor() < Constants.MAJOR_1_8) {