Browse Source

Bug 475152 - infinite loop during build time weaving when more than 2 aspects in hierarchy at org.aspectj.weaver.bcel.BcelAdvice.canInline

tags/V1_8_7
Andy Clement 8 years ago
parent
commit
a9ea7010ab

+ 5
- 0
tests/bugs187/475152/AbstractAspect.aj View File

@@ -0,0 +1,5 @@
package ajtest;

public abstract aspect AbstractAspect extends BaseAspect {

}

+ 9
- 0
tests/bugs187/475152/AjTarget.java View File

@@ -0,0 +1,9 @@
package ajtest;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface AjTarget {

}

+ 15
- 0
tests/bugs187/475152/BaseAspect.aj View File

@@ -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;
}
}

+ 5
- 0
tests/bugs187/475152/TestAspect.aj View File

@@ -0,0 +1,5 @@
package ajtest;

public aspect TestAspect extends AbstractAspect {

}

+ 11
- 0
tests/bugs187/475152/TestClass.java View File

@@ -0,0 +1,11 @@
package ajtest;

public class TestClass {
@AjTarget
private Long test;
public void testMethod() {
Object o = test;
System.out.println(o);
}
}

+ 4
- 0
tests/src/org/aspectj/systemtest/ajc187/Ajc187Tests.java View File

@@ -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");
}

+ 4
- 0
tests/src/org/aspectj/systemtest/ajc187/ajc187.xml View File

@@ -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"/>

+ 4
- 3
weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java View File

@@ -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) {

Loading…
Cancel
Save