]> source.dussan.org Git - aspectj.git/commitdiff
290087: fix
authoraclement <aclement>
Tue, 22 Sep 2009 20:34:29 +0000 (20:34 +0000)
committeraclement <aclement>
Tue, 22 Sep 2009 20:34:29 +0000 (20:34 +0000)
weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java

index f408d68d25d6c22a0fb6200a28f586569befb896..40b274b003f838e5d92aed741a4e86946f11befe 100644 (file)
@@ -131,10 +131,11 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
                // TAG: WeavingMessage
                if (changed && worthReporting && munger != null && !weaver.getWorld().getMessageHandler().isIgnoring(IMessage.WEAVEINFO)) {
                        String tName = weaver.getLazyClassGen().getType().getSourceLocation().getSourceFile().getName();
-                       if (tName.indexOf("no debug info available") != -1)
+                       if (tName.indexOf("no debug info available") != -1) {
                                tName = "no debug info available";
-                       else
+                       } else {
                                tName = getShortname(weaver.getLazyClassGen().getType().getSourceLocation().getSourceFile().getPath());
+                       }
                        String fName = getShortname(getAspectType().getSourceLocation().getSourceFile().getPath());
                        if (munger.getKind().equals(ResolvedTypeMunger.Parent)) {
                                // This message could come out of AjLookupEnvironment.addParent
@@ -214,16 +215,8 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
                        ResolvedMember superMethod = (ResolvedMember) iter.next();
                        if (!superMethod.getName().equals("<init>")) {
                                LazyMethodGen subMethod = findMatchingMethod(newParentTarget, superMethod);
-                               if (subMethod != null && !subMethod.isBridgeMethod()) { // FIXME
-                                       // asc
-                                       // is
-                                       // this
-                                       // safe
-                                       // for
-                                       // all
-                                       // bridge
-                                       // methods
-                                       // ?
+                               // FIXME asc is this safe for all bridge methods?
+                               if (subMethod != null && !subMethod.isBridgeMethod()) {
                                        if (!(subMethod.isSynthetic() && superMethod.isSynthetic())) {
                                                if (!(subMethod.isStatic() && subMethod.getName().startsWith("access$"))) { // ignore generated
                                                        // accessors
@@ -237,13 +230,15 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
                                }
                        }
                }
-               if (!cont)
+               if (!cont) {
                        return false; // A rule was violated and an error message already
-               // reported
+                       // reported
+               }
 
                if (newParent.isClass()) { // Changing the supertype
-                       if (!attemptToModifySuperCalls(weaver, newParentTarget, newParent))
+                       if (!attemptToModifySuperCalls(weaver, newParentTarget, newParent)) {
                                return false;
+                       }
                        newParentTarget.setSuperClass(newParent);
                } else { // Adding a new interface
                        newParentTarget.addInterface(newParent, getSourceLocation());
@@ -459,17 +454,19 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
         * The main part of implementing declare parents extends. Modify super ctor calls to target the new type.
         */
        public boolean attemptToModifySuperCalls(BcelClassWeaver weaver, LazyClassGen newParentTarget, ResolvedType newParent) {
-               String currentParent = newParentTarget.getSuperClass().getName();// getName();
-               if (newParent.getGenericType() != null)
+               ResolvedType currentParentType = newParentTarget.getSuperClass();
+               if (currentParentType.getGenericType() != null) {
+                       currentParentType = currentParentType.getGenericType();
+               }
+               String currentParent = currentParentType.getName();
+               if (newParent.getGenericType() != null) {
                        newParent = newParent.getGenericType(); // target new super calls at
-               // the generic type if its
-               // raw or parameterized
-               List mgs = newParentTarget.getMethodGens();
+               }
+               // the generic type if its raw or parameterized
+               List<LazyMethodGen> mgs = newParentTarget.getMethodGens();
 
                // Look for ctors to modify
-               for (Iterator iter = mgs.iterator(); iter.hasNext();) {
-                       LazyMethodGen aMethod = (LazyMethodGen) iter.next();
-
+               for (LazyMethodGen aMethod : mgs) {
                        if (aMethod.getName().equals("<init>")) {
                                InstructionList insList = aMethod.getBody();
                                InstructionHandle handle = insList.getStart();
@@ -479,9 +476,7 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
                                                InvokeInstruction invokeSpecial = (InvokeInstruction) handle.getInstruction();
                                                if (invokeSpecial.getClassName(cpg).equals(currentParent)
                                                                && invokeSpecial.getMethodName(cpg).equals("<init>")) {
-                                                       // System.err.println(
-                                                       // "Transforming super call '<init>"
-                                                       // +sp.getSignature(cpg)+"'");
+                                                       // System.err.println("Transforming super call '<init>" + invokeSpecial.getSignature(cpg) + "'");
 
                                                        // 1. Check there is a ctor in the new parent with
                                                        // the same signature
@@ -489,8 +484,7 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
 
                                                        if (newCtor == null) {
 
-                                                               // 2. Check ITDCs to see if the necessary ctor
-                                                               // is provided that way
+                                                               // 2. Check ITDCs to see if the necessary ctor is provided that way
                                                                boolean satisfiedByITDC = false;
                                                                for (Iterator ii = newParentTarget.getType().getInterTypeMungersIncludingSupers().iterator(); ii
                                                                                .hasNext()
@@ -534,12 +528,14 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
                sb.append("(");
                for (int i = 0; i < ctorArgs.length; i++) {
                        String argtype = ctorArgs[i].toString();
-                       if (argtype.lastIndexOf(".") != -1)
+                       if (argtype.lastIndexOf(".") != -1) {
                                sb.append(argtype.substring(argtype.lastIndexOf(".") + 1));
-                       else
+                       } else {
                                sb.append(argtype);
-                       if (i + 1 < ctorArgs.length)
+                       }
+                       if (i + 1 < ctorArgs.length) {
                                sb.append(",");
+                       }
                }
                sb.append(")");
                return sb.toString();
@@ -550,8 +546,9 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
                for (int i = 0; i < mems.length; i++) {
                        ResolvedMember rm = mems[i];
                        if (rm.getName().equals("<init>")) {
-                               if (rm.getSignature().equals(signature))
+                               if (rm.getSignature().equals(signature)) {
                                        return rm;
+                               }
                        }
                }
                return null;
@@ -562,8 +559,9 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
                ResolvedMember member = munger.getMember();
 
                ResolvedType onType = weaver.getWorld().resolve(member.getDeclaringType(), munger.getSourceLocation());
-               if (onType.isRawType())
+               if (onType.isRawType()) {
                        onType = onType.getGenericType();
+               }
 
                // System.out.println("munging: " + gen + " with " + member);
                if (onType.equals(gen.getType())) {
@@ -930,12 +928,14 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
                                if (classWeaver.getWorld().isInJava5Mode()) {
                                        AnnotationAJ annotationsOnRealMember[] = null;
                                        ResolvedType toLookOn = aspectType;
-                                       if (aspectType.isRawType())
+                                       if (aspectType.isRawType()) {
                                                toLookOn = aspectType.getGenericType();
+                                       }
                                        ResolvedMember realMember = getRealMemberForITDFromAspect(toLookOn, memberHoldingAnyAnnotations, false);
-                                       if (realMember == null)
+                                       if (realMember == null) {
                                                throw new BCException("Couldn't find ITD holder member '" + memberHoldingAnyAnnotations + "' on aspect "
                                                                + aspectType);
+                                       }
                                        annotationsOnRealMember = realMember.getAnnotations();
 
                                        if (annotationsOnRealMember != null) {
@@ -1014,13 +1014,15 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
                        ResolvedMember mungerSignature = munger.getSignature();
                        ResolvedMember toBridgeTo = munger.getDeclaredSignature().parameterizedWith(null,
                                        mungerSignature.getDeclaringType().resolve(getWorld()), false, munger.getTypeVariableAliases());
-                       if (!toBridgeTo.getReturnType().getErasureSignature().equals(mungerSignature.getReturnType().getErasureSignature()))
+                       if (!toBridgeTo.getReturnType().getErasureSignature().equals(mungerSignature.getReturnType().getErasureSignature())) {
                                needsbridging = true;
+                       }
                        UnresolvedType[] originalParams = toBridgeTo.getParameterTypes();
                        UnresolvedType[] newParams = mungerSignature.getParameterTypes();
                        for (int ii = 0; ii < originalParams.length; ii++) {
-                               if (!originalParams[ii].getErasureSignature().equals(newParams[ii].getErasureSignature()))
+                               if (!originalParams[ii].getErasureSignature().equals(newParams[ii].getErasureSignature())) {
                                        needsbridging = true;
+                               }
                        }
                        if (needsbridging) {
                                createBridge(classWeaver, unMangledInterMethod, classGen, toBridgeTo);
@@ -1123,8 +1125,9 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
                        ResolvedMember member = localMethods[i];
                        if (member.getName().equals(localMethodName)) {
                                // Check the params
-                               if (member.getParameterSignature().equals(localParameterSig))
+                               if (member.getParameterSignature().equals(localParameterSig)) {
                                        alreadyDone = true;
+                               }
                        }
                }
 
@@ -1431,8 +1434,9 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
                        if (member.getName().equals(lookingFor.getName())) {
                                UnresolvedType[] memberParams = member.getGenericParameterTypes();
                                if (memberParams.length == lookingForParams.length) {
-                                       if (debug)
+                                       if (debug) {
                                                System.err.println("Reviewing potential candidates: " + member);
+                                       }
                                        boolean matchOK = true;
                                        // If not related to a ctor ITD then the name is enough to
                                        // confirm we have the
@@ -1444,32 +1448,39 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
                                                        ResolvedType pMember = memberParams[j].resolve(world);
                                                        ResolvedType pLookingFor = lookingForParams[j].resolve(world);
 
-                                                       if (pMember.isTypeVariableReference())
+                                                       if (pMember.isTypeVariableReference()) {
                                                                pMember = ((TypeVariableReference) pMember).getTypeVariable().getFirstBound().resolve(world);
-                                                       if (pMember.isParameterizedType() || pMember.isGenericType())
+                                                       }
+                                                       if (pMember.isParameterizedType() || pMember.isGenericType()) {
                                                                pMember = pMember.getRawType().resolve(aspectType.getWorld());
+                                                       }
 
-                                                       if (pLookingFor.isTypeVariableReference())
+                                                       if (pLookingFor.isTypeVariableReference()) {
                                                                pLookingFor = ((TypeVariableReference) pLookingFor).getTypeVariable().getFirstBound()
                                                                                .resolve(world);
-                                                       if (pLookingFor.isParameterizedType() || pLookingFor.isGenericType())
+                                                       }
+                                                       if (pLookingFor.isParameterizedType() || pLookingFor.isGenericType()) {
                                                                pLookingFor = pLookingFor.getRawType().resolve(world);
+                                                       }
 
-                                                       if (debug)
+                                                       if (debug) {
                                                                System.err.println("Comparing parameter " + j + "   member=" + pMember + "   lookingFor="
                                                                                + pLookingFor);
+                                                       }
                                                        if (!pMember.equals(pLookingFor)) {
                                                                matchOK = false;
                                                        }
                                                }
                                        }
-                                       if (matchOK)
+                                       if (matchOK) {
                                                realMember = member;
+                                       }
                                }
                        }
                }
-               if (debug && realMember == null)
+               if (debug && realMember == null) {
                        System.err.println("Didn't find a match");
+               }
                return realMember;
        }
 
@@ -1483,10 +1494,11 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
                                // superMethod.getDeclaringType() + ", " + gen.getType());
                                boolean isSuper = !superMethod.getDeclaringType().equals(gen.getType());
                                String dispatchName;
-                               if (isSuper)
+                               if (isSuper) {
                                        dispatchName = NameMangler.superDispatchMethod(onType, superMethod.getName());
-                               else
+                               } else {
                                        dispatchName = NameMangler.protectedDispatchMethod(onType, superMethod.getName());
+                               }
                                superMethod = superMethod.resolve(weaver.getWorld());
                                LazyMethodGen dispatcher = makeDispatcher(gen, dispatchName, superMethod, weaver.getWorld(), isSuper);
 
@@ -1517,8 +1529,9 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
 
                ResolvedMember newConstructorMember = newConstructorTypeMunger.getSyntheticConstructor();
                ResolvedType onType = newConstructorMember.getDeclaringType().resolve(weaver.getWorld());
-               if (onType.isRawType())
+               if (onType.isRawType()) {
                        onType = onType.getGenericType();
+               }
 
                if (onType.isAnnotation()) {
                        signalError(WeaverMessages.ITDC_ON_ANNOTATION_NOT_ALLOWED, weaver, onType);
@@ -1530,8 +1543,9 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
                        return false;
                }
 
-               if (!onType.equals(currentClass.getType()))
+               if (!onType.equals(currentClass.getType())) {
                        return false;
+               }
 
                ResolvedMember explicitConstructor = newConstructorTypeMunger.getExplicitConstructor();
                // int declaredParameterCount =
@@ -1662,15 +1676,17 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
                Type returnType = BcelWorld.makeBcelType(superMethod.getReturnType());
 
                int modifiers = Modifier.PUBLIC;
-               if (onGen.isInterface())
+               if (onGen.isInterface()) {
                        modifiers |= Modifier.ABSTRACT;
+               }
 
                LazyMethodGen mg = new LazyMethodGen(modifiers, returnType, dispatchName, paramTypes, UnresolvedType.getNames(superMethod
                                .getExceptions()), onGen);
                InstructionList body = mg.getBody();
 
-               if (onGen.isInterface())
+               if (onGen.isInterface()) {
                        return mg;
+               }
 
                // assert (!superMethod.isStatic())
                InstructionFactory fact = onGen.getFactory();
@@ -1699,8 +1715,9 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
                ResolvedMember field = munger.getSignature();
 
                ResolvedType onType = weaver.getWorld().resolve(field.getDeclaringType(), munger.getSourceLocation());
-               if (onType.isRawType())
+               if (onType.isRawType()) {
                        onType = onType.getGenericType();
+               }
 
                boolean onInterface = onType.isInterface();
 
@@ -1775,8 +1792,9 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
                } else if (onInterface && gen.getType().isTopmostImplementor(onType)) {
                        // wew know that we can't be static since we don't allow statics on
                        // interfaces
-                       if (field.isStatic())
+                       if (field.isStatic()) {
                                throw new RuntimeException("unimplemented");
+                       }
                        weaver.addInitializer(this);
                        // System.err.println("impl body on " + gen.getType() + " for " +
                        // munger);
@@ -1823,8 +1841,9 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
                                                munger.getSignature().getDeclaringType().resolve(getWorld()), false, munger.getTypeVariableAliases());
                                boolean needsbridging = false;
                                if (!toBridgeTo.getReturnType().getErasureSignature().equals(
-                                               munger.getSignature().getReturnType().getErasureSignature()))
+                                               munger.getSignature().getReturnType().getErasureSignature())) {
                                        needsbridging = true;
+                               }
                                if (needsbridging) {
                                        ResolvedMember bridgingGetter = AjcMemberMaker.interFieldInterfaceGetter(toBridgeTo, gen.getType(), aspectType);
                                        createBridgeMethodForITDF(weaver, gen, itdfieldGetter, bridgingGetter);
@@ -1920,8 +1939,9 @@ public class BcelTypeMunger extends ConcreteTypeMunger {
 
        @Override
        public boolean equals(Object other) {
-               if (!(other instanceof BcelTypeMunger))
+               if (!(other instanceof BcelTypeMunger)) {
                        return false;
+               }
                BcelTypeMunger o = (BcelTypeMunger) other;
                return ((o.getMunger() == null) ? (getMunger() == null) : o.getMunger().equals(getMunger()))
                                && ((o.getAspectType() == null) ? (getAspectType() == null) : o.getAspectType().equals(getAspectType()));