From bfa83c307db4fa4635c21470dce3be3270173462 Mon Sep 17 00:00:00 2001 From: aclement Date: Wed, 28 Jan 2009 00:26:11 +0000 Subject: [PATCH] refactoring to make around advice lvt fixes easier to apply - and make the code a bit clearer --- .../org/aspectj/weaver/bcel/BcelShadow.java | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java b/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java index 1a95aad93..ff38115ad 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java @@ -2142,7 +2142,7 @@ public class BcelShadow extends Shadow { // now generate the aroundBody method // eg. "private static final void method_aroundBody0(M, M, String, org.aspectj.lang.JoinPoint)" - LazyMethodGen extractedShadowMethod = extractMethod(NameMangler.aroundCallbackMethodName(getSignature(), new Integer( + LazyMethodGen extractedShadowMethod = createShadowMethodGen(NameMangler.aroundCallbackMethodName(getSignature(), new Integer( getEnclosingClass().getNewGeneratedNameTag()).toString()), Modifier.PRIVATE, munger); List argsToCallLocalAdviceMethodWith = new ArrayList(); @@ -2252,8 +2252,8 @@ public class BcelShadow extends Shadow { : new InstructionList(InstructionConstants.ACONST_NULL))); // adviceMethodInvocation = advice.append(Utility.createInvoke(fact, localAdviceMethod)); // (fact, getWorld(), munger.getSignature())); - advice.append(Utility.createConversion(getFactory(), BcelWorld.makeBcelType(mungerSig.getReturnType()), extractedShadowMethod - .getReturnType(), world.isInJava5Mode())); + advice.append(Utility.createConversion(getFactory(), BcelWorld.makeBcelType(mungerSig.getReturnType()), + extractedShadowMethod.getReturnType(), world.isInJava5Mode())); if (!isFallsThrough()) { advice.append(InstructionFactory.createReturn(extractedShadowMethod.getReturnType())); } @@ -2692,7 +2692,7 @@ public class BcelShadow extends Shadow { int linenumber = getSourceLine(); // MOVE OUT ALL THE INSTRUCTIONS IN MY SHADOW INTO ANOTHER METHOD! - LazyMethodGen callbackMethod = extractMethod(NameMangler.aroundCallbackMethodName(getSignature(), new Integer( + LazyMethodGen callbackMethod = createShadowMethodGen(NameMangler.aroundCallbackMethodName(getSignature(), new Integer( getEnclosingClass().getNewGeneratedNameTag()).toString()), 0, munger); BcelVar[] adviceVars = munger.getExposedStateAsBcelVars(true); @@ -2968,7 +2968,7 @@ public class BcelShadow extends Shadow { // ---- extraction methods - public LazyMethodGen extractMethod(String newMethodName, int visibilityModifier, ShadowMunger munger) { + public LazyMethodGen createShadowMethodGen(String newMethodName, int visibilityModifier, ShadowMunger munger) { LazyMethodGen.assertGoodBody(range.getBody(), newMethodName); if (!getKind().allowsExtraction()) throw new BCException("Attempt to extract method from a shadow kind that does not support this operation (" + getKind() @@ -3082,14 +3082,9 @@ public class BcelShadow extends Shadow { * this/target If it's argsOnFrame, it shares this and target. ??? rewrite this to do less array munging, please */ private LazyMethodGen createMethodGen(String newMethodName, int visibilityModifier) { - Type[] parameterTypes = BcelWorld.makeBcelTypes(getArgTypes()); - int modifiers = Modifier.FINAL | visibilityModifier; + Type[] shadowParameterTypes = BcelWorld.makeBcelTypes(getArgTypes()); + int modifiers = Modifier.FINAL | Modifier.STATIC | visibilityModifier; - // XXX some bug - // if (! isExpressionKind() && getSignature().isStrict(world)) { - // modifiers |= Modifier.STRICT; - // } - modifiers |= Modifier.STATIC; if (targetVar != null && targetVar != thisVar) { UnresolvedType targetType = getTargetType(); targetType = ensureTargetTypeIsCorrect(targetType); @@ -3119,18 +3114,18 @@ public class BcelShadow extends Shadow { targetType = getThisType(); } } - parameterTypes = addTypeToFront(BcelWorld.makeBcelType(targetType), parameterTypes); + shadowParameterTypes = addTypeToFront(BcelWorld.makeBcelType(targetType), shadowParameterTypes); } if (thisVar != null) { UnresolvedType thisType = getThisType(); - parameterTypes = addTypeToFront(BcelWorld.makeBcelType(thisType), parameterTypes); + shadowParameterTypes = addTypeToFront(BcelWorld.makeBcelType(thisType), shadowParameterTypes); } // We always want to pass down thisJoinPoint in case we have already woven // some advice in here. If we only have a single piece of around advice on a // join point, it is unnecessary to accept (and pass) tjp. if (thisJoinPointVar != null) { - parameterTypes = addTypeToEnd(LazyClassGen.tjpType, parameterTypes); + shadowParameterTypes = addTypeToEnd(LazyClassGen.tjpType, shadowParameterTypes); // FIXME ALEX? which one // parameterTypes = addTypeToEnd(LazyClassGen.proceedingTjpType, parameterTypes); } @@ -3149,7 +3144,7 @@ public class BcelShadow extends Shadow { // returnType = getReturnType(); // for this and above lines, see pr137496 } } - return new LazyMethodGen(modifiers, BcelWorld.makeBcelType(returnType), newMethodName, parameterTypes, + return new LazyMethodGen(modifiers, BcelWorld.makeBcelType(returnType), newMethodName, shadowParameterTypes, NoDeclaredExceptions, // XXX again, we need to look up methods! // UnresolvedType.getNames(getSignature().getExceptions(world)), -- 2.39.5