package ajtest; | |||||
public abstract aspect AbstractAspect extends BaseAspect { | |||||
} |
package ajtest; | |||||
import java.lang.annotation.Retention; | |||||
import java.lang.annotation.RetentionPolicy; | |||||
@Retention(RetentionPolicy.RUNTIME) | |||||
public @interface AjTarget { | |||||
} |
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; | |||||
} | |||||
} |
package ajtest; | |||||
public aspect TestAspect extends AbstractAspect { | |||||
} |
package ajtest; | |||||
public class TestClass { | |||||
@AjTarget | |||||
private Long test; | |||||
public void testMethod() { | |||||
Object o = test; | |||||
System.out.println(o); | |||||
} | |||||
} |
*/ | */ | ||||
public class Ajc187Tests extends 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 { | public void testAnnoConversion_474165() throws Exception { | ||||
runTest("anno conversion"); | runTest("anno conversion"); | ||||
} | } |
<suite> | <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"> | <ajc-test dir="bugs187/469889" title="broken java"> | ||||
<!-- | <!-- | ||||
<compile files="A.java B.java AbstractA.java BImpl.java Main.java" options="-1.8"/> | <compile files="A.java B.java AbstractA.java BImpl.java Main.java" options="-1.8"/> |
containsInvokedynamic = 1; | containsInvokedynamic = 1; | ||||
LazyMethodGen lmg = boType.getLazyClassGen().getLazyMethodGen(this.signature.getName(), this.signature.getSignature(), true); | LazyMethodGen lmg = boType.getLazyClassGen().getLazyMethodGen(this.signature.getName(), this.signature.getSignature(), true); | ||||
// Check Java8 supertypes | // Check Java8 supertypes | ||||
ResolvedType searchType = concreteAspect; | |||||
while (lmg == null) { | 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) { | if (rtd instanceof BcelObjectType) { | ||||
BcelObjectType bot = (BcelObjectType)rtd; | BcelObjectType bot = (BcelObjectType)rtd; | ||||
if (bot.javaClass.getMajor() < Constants.MAJOR_1_8) { | if (bot.javaClass.getMajor() < Constants.MAJOR_1_8) { |