@@ -0,0 +1,13 @@ | |||
import org.aspectj.lang.annotation.Around; | |||
import org.aspectj.lang.annotation.Aspect; | |||
@Aspect | |||
public abstract class AbstractAspect { | |||
@Around("execution(* ClassWithJoinPoint.getValue(..))") | |||
public Object ClassWithJoinPoint_getValue() { | |||
return getValueReplacement(); | |||
} | |||
protected abstract Boolean getValueReplacement(); | |||
} |
@@ -0,0 +1,17 @@ | |||
public class ClassWithJoinPoint { | |||
public Boolean getValue() { | |||
return Boolean.FALSE; | |||
} | |||
public static void main(String[] arguments) { | |||
/* | |||
System.out.println("Testing aspect style (should print \"true\"):"); | |||
System.out.println(new aspect_style.ClassWithJoinPoint().getValue()); | |||
System.out.println(); | |||
*/ | |||
System.out.println("Testing annotation style (should print \"true\"):"); | |||
System.out.println(new ClassWithJoinPoint().getValue()); | |||
} | |||
} |
@@ -0,0 +1,10 @@ | |||
import org.aspectj.lang.annotation.Aspect; | |||
@Aspect | |||
public class ConcreteAspect extends AbstractAspect { | |||
@Override | |||
protected Boolean getValueReplacement() { | |||
return Boolean.TRUE; | |||
} | |||
} |
@@ -0,0 +1,30 @@ | |||
package com.j4fe.aspects; | |||
import javax.persistence.EntityManager; | |||
import javax.persistence.PersistenceContext; | |||
import javax.persistence.Entity; | |||
import org.springframework.beans.factory.annotation.Configurable; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
public aspect SpringConfigurableMixin { | |||
public static interface EntityManagerAware { | |||
EntityManager getEntityManager(); | |||
} | |||
// not working | |||
// declare @type : (@Entity *) : @Configurable(autowire = Autowire.BY_TYPE, preConstruction = true); | |||
// also not working | |||
// declare @type : (@Entity *) : @Configurable | |||
declare parents : (@Entity *) implements EntityManagerAware; | |||
@PersistenceContext | |||
transient private EntityManager EntityManagerAware.entityManager; | |||
public EntityManager EntityManagerAware.getEntityManager() { | |||
return entityManager; | |||
} | |||
} |
@@ -0,0 +1,42 @@ | |||
import org.aspectj.lang.annotation.Aspect; | |||
import org.aspectj.lang.annotation.DeclareMixin; | |||
@Aspect | |||
public class PR298388 { | |||
@DeclareMixin("Thing2") | |||
public static <T> Thing<T> createThingImplementation() { | |||
return new ThingImpl<T>(); | |||
} | |||
public static void main(String[] args) { | |||
Thing<String> ts = (Thing<String>) new Thing2<String>(); | |||
ts.wibble(); | |||
ts.wibble("abc"); | |||
String s = ts.wibbleBack("wobble"); | |||
System.out.println("done"); | |||
} | |||
} | |||
class Thing2<X> { | |||
} | |||
interface Thing<X> { | |||
void wibble(); | |||
void wibble(X x); | |||
X wibbleBack(X x); | |||
} | |||
class ThingImpl<X> implements Thing<X> { | |||
ThingImpl() { | |||
} | |||
public void wibble() { | |||
} | |||
public void wibble(X x) {} | |||
public X wibbleBack(X x) { return x;} | |||
} |
@@ -18,6 +18,14 @@ import org.aspectj.testing.XMLBasedAjcTestCase; | |||
public class Ajc169Tests extends org.aspectj.testing.XMLBasedAjcTestCase { | |||
public void testPr298388() { | |||
runTest("declare mixin and generics"); | |||
} | |||
public void testPr292584() { | |||
runTest("annotation around advice verifyerror"); | |||
} | |||
// --- | |||
public static Test suite() { | |||
@@ -26,7 +34,7 @@ public class Ajc169Tests extends org.aspectj.testing.XMLBasedAjcTestCase { | |||
@Override | |||
protected File getSpecFile() { | |||
return new File("../tests/src/org/aspectj/systemtest/ajc167/ajc167.xml"); | |||
return new File("../tests/src/org/aspectj/systemtest/ajc169/ajc169.xml"); | |||
} | |||
} |
@@ -2,4 +2,27 @@ | |||
<suite> | |||
<ajc-test dir="bugs169/pr298388" title="declare mixin and generics"> | |||
<compile files="PR298388.java" options="-1.5"/> | |||
<run class="PR298388"> | |||
<stdout> | |||
<line text="done"/> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
<ajc-test dir="bugs169/pr295491" title="model annotation npe"> | |||
<compile files="SpringConfigurableMixin.java" options="-1.5 -emacssym"/> | |||
</ajc-test> | |||
<ajc-test dir="bugs169/pr292584" title="annotation around advice verifyerror"> | |||
<compile files="AbstractAspect.java,ClassWithJoinPoint.java,ConcreteAspect.java" options="-1.5"/> | |||
<run class="ClassWithJoinPoint"> | |||
<stdout> | |||
<line text="Testing annotation style (should print "true"):"/> | |||
<line text="true"/> | |||
</stdout> | |||
</run> | |||
</ajc-test> | |||
</suite> |