From fdfc78fba8bbc7afc8cd03e2cf11c3547c032b87 Mon Sep 17 00:00:00 2001 From: aclement Date: Tue, 15 Nov 2005 10:58:04 +0000 Subject: [PATCH] test and fix for pr114436 --- tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java | 1 + tests/src/org/aspectj/systemtest/ajc150/ajc150.xml | 6 ++++++ weaver/src/org/aspectj/weaver/ConcreteTypeMunger.java | 5 +++++ .../org/aspectj/weaver/PerObjectInterfaceTypeMunger.java | 4 ++++ weaver/src/org/aspectj/weaver/ResolvedTypeMunger.java | 8 ++++++++ weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java | 2 +- 6 files changed, 25 insertions(+), 1 deletion(-) diff --git a/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java b/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java index f2d435ee0..f6f142f21 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java +++ b/tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java @@ -49,6 +49,7 @@ public class Ajc150Tests extends org.aspectj.testing.XMLBasedAjcTestCase { public void testGenericITDsAndAbstractMethodError_pr102357() { runTest("generic itds and abstract method error");} */ + public void testClassFormatError_pr114436() { runTest("ClassFormatError binary weaving perthis");} public void testParserException_pr115788() { runTest("parser exception");} public void testPossibleStaticImports_pr113066_1() { runTest("possible static imports bug - 1");} public void testPossibleStaticImports_pr113066_2() { runTest("possible static imports bug - 2");} diff --git a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml index 174172e84..f49ea1c2e 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml +++ b/tests/src/org/aspectj/systemtest/ajc150/ajc150.xml @@ -53,6 +53,12 @@ + + + + + + diff --git a/weaver/src/org/aspectj/weaver/ConcreteTypeMunger.java b/weaver/src/org/aspectj/weaver/ConcreteTypeMunger.java index cacaa37d4..24ce48348 100644 --- a/weaver/src/org/aspectj/weaver/ConcreteTypeMunger.java +++ b/weaver/src/org/aspectj/weaver/ConcreteTypeMunger.java @@ -110,4 +110,9 @@ public abstract class ConcreteTypeMunger implements PartialOrder.PartialComparab * of the generic type - either in its raw or parameterized form. */ public abstract ConcreteTypeMunger parameterizedFor(ResolvedType targetType); + + public boolean isLateMunger() { + if (munger==null) return false; + return munger.isLateMunger(); + } } diff --git a/weaver/src/org/aspectj/weaver/PerObjectInterfaceTypeMunger.java b/weaver/src/org/aspectj/weaver/PerObjectInterfaceTypeMunger.java index 4f4f22c39..3c3e31509 100644 --- a/weaver/src/org/aspectj/weaver/PerObjectInterfaceTypeMunger.java +++ b/weaver/src/org/aspectj/weaver/PerObjectInterfaceTypeMunger.java @@ -64,4 +64,8 @@ public class PerObjectInterfaceTypeMunger extends ResolvedTypeMunger { if (matchType.isInterface()) return false; return getTestTypePattern(aspectType).matchesStatically(matchType); } + + public boolean isLateMunger() { + return true; + } } diff --git a/weaver/src/org/aspectj/weaver/ResolvedTypeMunger.java b/weaver/src/org/aspectj/weaver/ResolvedTypeMunger.java index 67846d5f3..0e95d39c5 100644 --- a/weaver/src/org/aspectj/weaver/ResolvedTypeMunger.java +++ b/weaver/src/org/aspectj/weaver/ResolvedTypeMunger.java @@ -393,4 +393,12 @@ public abstract class ResolvedTypeMunger { public ResolvedMember getDeclaredSignature() { return declaredSignature; } + + /** + * A late munger has to be done after shadow munging since which shadows are matched + * can affect the operation of the late munger. e.g. perobjectinterfacemunger + */ + public boolean isLateMunger() { + return false; + } } diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java b/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java index 7c0f3f405..794fc84c5 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java @@ -1472,7 +1472,7 @@ public class BcelWeaver implements IWeaver { if (onType.isRawType() || onType.isParameterizedType()) onType = onType.getGenericType(); for (Iterator i = typeMungerList.iterator(); i.hasNext(); ) { ConcreteTypeMunger m = (ConcreteTypeMunger)i.next(); - if (m.matches(onType)) { + if (!m.isLateMunger() && m.matches(onType)) { onType.addInterTypeMunger(m); } } -- 2.39.5