diff options
-rw-r--r-- | tests/bugs187/475152/AbstractAspect.aj | 5 | ||||
-rw-r--r-- | tests/bugs187/475152/AjTarget.java | 9 | ||||
-rw-r--r-- | tests/bugs187/475152/BaseAspect.aj | 15 | ||||
-rw-r--r-- | tests/bugs187/475152/TestAspect.aj | 5 | ||||
-rw-r--r-- | tests/bugs187/475152/TestClass.java | 11 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc187/Ajc187Tests.java | 4 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc187/ajc187.xml | 4 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java | 7 |
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) { |