+++ /dev/null
-public class Simple {
- public static void main(String []argv) {
- new Simple().a();
- }
-
- public void a() {}
-}
-
-aspect X {
- before():execution(* a(..)) {
- System.err.println(thisJoinPoint);
- System.err.println(thisJoinPointStaticPart);
- System.err.println(thisEnclosingJoinPointStaticPart);
- }
-
- before():execution(Simple.new(..)) {
- System.err.println(thisJoinPoint);
- System.err.println(thisEnclosingJoinPointStaticPart);
- System.err.println(thisJoinPointStaticPart);
- }
-}
--- /dev/null
+public class Simple {
+ public static void main(String []argv) {
+ new Simple().a();
+ }
+
+ public void a() {}
+}
+
+aspect X {
+ before():execution(* a(..)) {
+ System.err.println(thisJoinPoint);
+ System.err.println(thisJoinPointStaticPart);
+ System.err.println(thisEnclosingJoinPointStaticPart);
+ }
+
+ before():execution(Simple.new(..)) {
+ System.err.println(thisJoinPoint);
+ System.err.println(thisEnclosingJoinPointStaticPart);
+ System.err.println(thisJoinPointStaticPart);
+ }
+}
--- /dev/null
+public class A {
+ public static void main(String []argv) {
+ try {
+ new A().foo();
+ } catch (Exception e) {
+ }
+ }
+
+ public void foo() {
+ try {
+ } catch (Exception e) {
+ }
+ }
+}
+
+
+aspect ComplexSub extends TrackingErrors {
+ public pointcut errorScope(): within(A);
+}
+
--- /dev/null
+import org.aspectj.lang.*;
+
+import org.aspectj.lang.JoinPoint;
+
+public abstract aspect TrackingErrors {
+
+ protected abstract pointcut errorScope ();
+
+ private pointcut staticContext () : !this(Object);
+ private pointcut nonStaticContext (Object obj) : this(obj);
+ private pointcut caughtThrowable (Throwable th) : handler(Throwable+)
+ && args(th);
+
+
+
+ private pointcut excluded () : within(TrackingErrors+);
+
+ before (Throwable th) : caughtThrowable(th) && errorScope() &&
+ !excluded() && staticContext() {
+
+ processStaticTrackingErrors(th,thisJoinPointStaticPart,thisEnclosingJoinPointStaticPart);
+ }
+
+ before (Throwable th, Object obj) : caughtThrowable(th) && errorScope()
+ && !excluded() && nonStaticContext(obj) {
+
+ processNonStaticTrackingErrors(th,obj,thisJoinPointStaticPart,thisEnclosingJoinPointStaticPart);
+ }
+
+ protected void processStaticTrackingErrors (Throwable th,
+ JoinPoint.StaticPart tjp, JoinPoint.StaticPart ejp) {}
+
+ protected void processNonStaticTrackingErrors (Throwable th, Object obj,
+ JoinPoint.StaticPart tjp, JoinPoint.StaticPart ejp) {}
+
+ protected String getSourceId (JoinPoint.StaticPart ejp) {
+ String typeName =
+ ejp.getSignature().getDeclaringTypeName();
+ String name = ejp.getSignature().getName();
+ return typeName + "." + name;
+ }
+
+ protected String getProbeId (JoinPoint.StaticPart tjp) {
+ String sourceLocation =
+ tjp.getSourceLocation().toString();
+ return sourceLocation;
+ }
+
+}
+/*public abstract aspect Complex {
+
+ protected abstract pointcut scope ();
+
+ private pointcut staticContext () : !this(Object);
+ private pointcut nonStaticContext (Object obj) : this(obj);
+ private pointcut caughtThrowable (Throwable th) : handler(Throwable+) && args(th);
+
+ private pointcut excluded () : within(Complex+);
+
+ before (Throwable th) : caughtThrowable(th) && scope() && !excluded() && staticContext() {
+ processStaticData(th,thisJoinPointStaticPart,thisEnclosingJoinPointStaticPart);
+ }
+
+ before (Throwable th, Object obj) : caughtThrowable(th) && scope() && !excluded() && nonStaticContext(obj) {
+ processNonStaticData(th,obj,thisJoinPointStaticPart,thisEnclosingJoinPointStaticPart);
+ }
+
+ private void processStaticData (Throwable th, JoinPoint.StaticPart tjp, JoinPoint.StaticPart ejp) {
+ }
+
+ private void processNonStaticData (Throwable th, Object obj, JoinPoint.StaticPart tjp, JoinPoint.StaticPart ejp) {
+ }
+
+ protected String getSourceId (JoinPoint.StaticPart ejp) {
+ String typeName = ejp.getSignature().getDeclaringTypeName();
+ String name = ejp.getSignature().getName();
+ return typeName + "." + name;
+ }
+
+ protected String getProbeId (JoinPoint.StaticPart tjp) {
+ String sourceLocation = String.valueOf(tjp.getSourceLocation().getLine());
+ return sourceLocation;
+ }
+
+}
+*/
public void testCunningDeclareParents_pr92311() { runTest("cunning declare parents");}
public void testGenericITDsAndAbstractMethodError_pr102357() { runTest("generic itds and abstract method error");}
*/
- public void testGeneratingCodeForAnOldRuntime_pr116679() { runTest("generating code for a 1.2.1 runtime");}
+ public void testGeneratingCodeForAnOldRuntime_pr116679_1() { runTest("generating code for a 1.2.1 runtime - 1");}
+ public void testGeneratingCodeForAnOldRuntime_pr116679_2() { runTest("generating code for a 1.2.1 runtime - 2");}
public void testAtDeclareParents_pr117681() { runTest("at declare parents");}
public void testPrivilegeProblem_pr87525() { runTest("privilege problem with switch");}
<run class="ReflectOnAjcCompiledPointcuts" classpath="../lib/bcel/bcel.jar"/>
</ajc-test>
- <ajc-test dir="compatibility" title="generating code for a 1.2.1 runtime">
- <compile files="Simple.java" options="-Xajruntimetarget:1.2"></compile>
+ <ajc-test dir="compatibility/case1" title="generating code for a 1.2.1 runtime - 1">
+ <compile files="Simple.java" options="-Xajruntimetarget:1.2"/>
<run class="Simple" classpath="../lib/aspectj/lib/aspectjrt121.jar"/>
</ajc-test>
-
+
+ <ajc-test dir="compatibility/case2" title="generating code for a 1.2.1 runtime - 2">
+ <compile files="TrackingErrors.aj,A.java" options="-Xajruntimetarget:1.2"/>
+ <run class="A" classpath="../lib/aspectj/lib/aspectjrt121.jar"/>
+ </ajc-test>
+
<ajc-test dir="java5/reflection" title="arg names in advice annotations">
<compile files="AdviceWithArgs.aj" options="-1.5"></compile>
<run class="AdviceWithArgs"/>
</ajc-test>
-
-
+
<ajc-test dir="java5/reflection" pr="114322" title="reflection on abstract ITDs (Billing example)">
<compile files="ReflectBilling.java,Billing.aj" options="-1.5"/>
<run class="ReflectBilling">
public BcelVar getThisJoinPointStaticPartBcelVar(final boolean isEnclosingJp) {
if (thisJoinPointStaticPartVar == null) {
Field field = getEnclosingClass().getTjpField(this, isEnclosingJp);
- thisJoinPointStaticPartVar =
- new BcelFieldRef(
- isEnclosingJp?
- world.getCoreType(UnresolvedType.forName("org.aspectj.lang.JoinPoint$EnclosingStaticPart")):
- world.getCoreType(UnresolvedType.forName("org.aspectj.lang.JoinPoint$StaticPart")),
+
+ ResolvedType sjpType = null;
+ if (world.isTargettingAspectJRuntime12()) { // TAG:SUPPORTING12: We didn't have different jpsp types in 1.2
+ sjpType = world.getCoreType(UnresolvedType.forName("org.aspectj.lang.JoinPoint$StaticPart"));
+ } else {
+ sjpType = isEnclosingJp?
+ world.getCoreType(UnresolvedType.forName("org.aspectj.lang.JoinPoint$EnclosingStaticPart")):
+ world.getCoreType(UnresolvedType.forName("org.aspectj.lang.JoinPoint$StaticPart"));
+ }
+ thisJoinPointStaticPartVar = new BcelFieldRef(
+ sjpType,
getEnclosingClass().getClassName(),
field.getName());
// getEnclosingClass().warnOnAddedStaticInitializer(this,munger.getSourceLocation());
else {
modifiers |= Modifier.PRIVATE;
}
- ret = new FieldGen(modifiers,
- isEnclosingJp?enclosingStaticTjpType:staticTjpType,
- "ajc$tjp_" + tjpFields.size(),
- getConstantPoolGen()).getField();
+ ObjectType jpType = null;
+ if (world.isTargettingAspectJRuntime12()) { // TAG:SUPPORTING12: We didn't have different staticjp types in 1.2
+ jpType = staticTjpType;
+ } else {
+ jpType = isEnclosingJp?enclosingStaticTjpType:staticTjpType;
+ }
+ ret = new FieldGen(modifiers,jpType,"ajc$tjp_" + tjpFields.size(),getConstantPoolGen()).getField();
addField(ret);
tjpFields.put(shadow, ret);
return ret;
// create the signature
list.append(InstructionFactory.createLoad(factoryType, 0));
- if (world.getTargetAspectjRuntimeLevel().equals(org.aspectj.weaver.Constants.RUNTIME_LEVEL_12)) {
+ if (world.isTargettingAspectJRuntime12()) { // TAG:SUPPORTING12: We didn't have optimized factory methods in 1.2
list.append(new PUSH(getConstantPoolGen(), sig.getSignatureString(shadow.getWorld())));
list.append(fact.createInvoke(factoryType.getClassName(),
sig.getSignatureMakerName(),
list.append(Utility.createConstant(fact, shadow.getSourceLine()));
final String factoryMethod;
- if (staticTjpType.equals(field.getType())) {
- factoryMethod = "makeSJP";
- } else if (enclosingStaticTjpType.equals(field.getType())) {
- factoryMethod = "makeESJP";
+
+ if (world.isTargettingAspectJRuntime12()) { // TAG:SUPPORTING12: We didn't have makeESJP() in 1.2
+ list.append(fact.createInvoke(factoryType.getClassName(),
+ "makeSJP", staticTjpType,
+ new Type[] { Type.STRING, sigType, Type.INT},
+ Constants.INVOKEVIRTUAL));
+
+ // put it in the field
+ list.append(fact.createFieldAccess(getClassName(), field.getName(),staticTjpType, Constants.PUTSTATIC));
+
} else {
- throw new Error("should not happen");
- }
- list.append(fact.createInvoke(factoryType.getClassName(),
- factoryMethod, field.getType(),
- new Type[] { Type.STRING, sigType, Type.INT},
- Constants.INVOKEVIRTUAL));
-
- // put it in the field
- list.append(fact.createFieldAccess(getClassName(), field.getName(),
- field.getType(), Constants.PUTSTATIC));
+ if (staticTjpType.equals(field.getType())) {
+ factoryMethod = "makeSJP";
+ } else if (enclosingStaticTjpType.equals(field.getType())) {
+ factoryMethod = "makeESJP";
+ } else {
+ throw new Error("should not happen");
+ }
+ list.append(fact.createInvoke(factoryType.getClassName(),
+ factoryMethod, field.getType(),
+ new Type[] { Type.STRING, sigType, Type.INT},
+ Constants.INVOKEVIRTUAL));
+ // put it in the field
+ list.append(fact.createFieldAccess(getClassName(), field.getName(), field.getType(), Constants.PUTSTATIC));
+ }
}