aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/compatibility/case1/Simple.java (renamed from tests/compatibility/Simple.java)0
-rw-r--r--tests/compatibility/case2/A.java20
-rw-r--r--tests/compatibility/case2/TrackingErrors.aj86
-rw-r--r--tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java3
-rw-r--r--tests/src/org/aspectj/systemtest/ajc150/ajc150.xml14
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/BcelShadow.java16
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/LazyClassGen.java51
7 files changed, 160 insertions, 30 deletions
diff --git a/tests/compatibility/Simple.java b/tests/compatibility/case1/Simple.java
index 72fec1886..72fec1886 100644
--- a/tests/compatibility/Simple.java
+++ b/tests/compatibility/case1/Simple.java
diff --git a/tests/compatibility/case2/A.java b/tests/compatibility/case2/A.java
new file mode 100644
index 000000000..e3acbb4bd
--- /dev/null
+++ b/tests/compatibility/case2/A.java
@@ -0,0 +1,20 @@
+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);
+}
+
diff --git a/tests/compatibility/case2/TrackingErrors.aj b/tests/compatibility/case2/TrackingErrors.aj
new file mode 100644
index 000000000..42659de6c
--- /dev/null
+++ b/tests/compatibility/case2/TrackingErrors.aj
@@ -0,0 +1,86 @@
+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;
+ }
+
+}
+*/
diff --git a/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java b/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java
index 3fa9ff605..603cc05b3 100644
--- a/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java
+++ b/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java
@@ -48,7 +48,8 @@ public class Ajc150Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
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");}
diff --git a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml
index 7cb13ac68..027648cf8 100644
--- a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml
+++ b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml
@@ -113,17 +113,21 @@
<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">
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java b/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
index 124b46f88..5ce739a8c 100644
--- a/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
+++ b/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
@@ -1179,11 +1179,17 @@ public class BcelShadow extends Shadow {
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());
diff --git a/weaver/src/org/aspectj/weaver/bcel/LazyClassGen.java b/weaver/src/org/aspectj/weaver/bcel/LazyClassGen.java
index 806b4e82c..6279ef144 100644
--- a/weaver/src/org/aspectj/weaver/bcel/LazyClassGen.java
+++ b/weaver/src/org/aspectj/weaver/bcel/LazyClassGen.java
@@ -901,10 +901,13 @@ public final class LazyClassGen {
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;
@@ -999,7 +1002,7 @@ public final class LazyClassGen {
// 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(),
@@ -1091,21 +1094,31 @@ public final class LazyClassGen {
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));
+ }
}