I doubt you meant to commit EmptyVisitor? I also don't think it's a good idea to copy the ASM4 constant. Why not just use it from asm Opcodes directly? Copying it makes it look like it might have a different meaning.
david jencks On Jan 27, 2012, at 10:58 AM, [email protected] wrote: > Author: ejiang > Date: Fri Jan 27 18:58:20 2012 > New Revision: 1236823 > > URL: http://svn.apache.org/viewvc?rev=1236823&view=rev > Log: > ARIES-817: Upgrade to ASM4 > > Added: > > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/OSGiFriendlyClassVisitor.java > > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/EmptyVisitor.java > Modified: > aries/trunk/proxy/proxy-impl/pom.xml > > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/AbstractWovenProxyAdapter.java > > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/ConstructorFinder.java > > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/OSGiFriendlyClassWriter.java > > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/Constants.java > > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/ProxySubclassAdapter.java > > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/ProxySubclassHierarchyAdapter.java > > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceCombiningClassAdapter.java > > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceProxyGenerator.java > > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/MethodCopyingClassAdapter.java > > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/SyntheticSerialVerUIDAdder.java > > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/WovenProxyGenerator.java > > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/synthesizer/Synthesizer.java > > aries/trunk/proxy/proxy-impl/src/main/resources/org/apache/aries/proxy/nls/ProxyImplMessages.properties > > aries/trunk/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/InterfaceProxyingTest.java > > Modified: aries/trunk/proxy/proxy-impl/pom.xml > URL: > http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/pom.xml?rev=1236823&r1=1236822&r2=1236823&view=diff > ============================================================================== > --- aries/trunk/proxy/proxy-impl/pom.xml (original) > +++ aries/trunk/proxy/proxy-impl/pom.xml Fri Jan 27 18:58:20 2012 > @@ -70,10 +70,10 @@ > > <dependencies> > <dependency> > - <groupId>asm</groupId> > + <groupId>org.ow2.asm</groupId> > <artifactId>asm-all</artifactId> > <optional>true</optional> > - <version>3.2</version> > + <version>4.0</version> > </dependency> > <dependency> > <groupId>org.slf4j</groupId> > > Modified: > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/AbstractWovenProxyAdapter.java > URL: > http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/AbstractWovenProxyAdapter.java?rev=1236823&r1=1236822&r2=1236823&view=diff > ============================================================================== > --- > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/AbstractWovenProxyAdapter.java > (original) > +++ > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/AbstractWovenProxyAdapter.java > Fri Jan 27 18:58:20 2012 > @@ -21,7 +21,6 @@ package org.apache.aries.proxy.impl.comm > import java.io.IOException; > import java.io.InputStream; > import java.io.Serializable; > -import java.lang.reflect.Modifier; > import java.math.BigDecimal; > import java.util.ArrayList; > import java.util.Arrays; > @@ -29,9 +28,9 @@ import java.util.HashMap; > import java.util.HashSet; > import java.util.List; > import java.util.Map; > -import java.util.Map.Entry; > import java.util.Set; > import java.util.UUID; > +import java.util.Map.Entry; > import java.util.concurrent.Callable; > > import org.apache.aries.proxy.InvocationListener; > @@ -39,7 +38,6 @@ import org.apache.aries.proxy.UnableToPr > import org.apache.aries.proxy.impl.NLS; > import org.apache.aries.proxy.impl.gen.Constants; > import org.apache.aries.proxy.weaving.WovenProxy; > -import org.objectweb.asm.ClassAdapter; > import org.objectweb.asm.ClassReader; > import org.objectweb.asm.ClassVisitor; > import org.objectweb.asm.FieldVisitor; > @@ -63,7 +61,7 @@ import org.slf4j.LoggerFactory; > * used to weave classes being loaded by the framework, and > InterfaceCombiningClassAdapter > * which is used to dynamically create objects that implement multiple > interfaces > */ > -public abstract class AbstractWovenProxyAdapter extends ClassAdapter > implements Opcodes { > +public abstract class AbstractWovenProxyAdapter extends ClassVisitor > implements Opcodes { > private static final Logger LOGGER = LoggerFactory > .getLogger(AbstractWovenProxyAdapter.class); > > @@ -200,7 +198,7 @@ public abstract class AbstractWovenProxy > */ > public AbstractWovenProxyAdapter(ClassVisitor writer, String className, > ClassLoader loader) { > - super(writer); > + super(Constants.ASM4, writer); > typeBeingWoven = Type.getType("L" + className.replace('.', '/') + ";"); > this.loader = loader; > } > @@ -345,7 +343,7 @@ public abstract class AbstractWovenProxy > //to write our init code to static_init_UUID instead > staticInitMethod = new Method("static_init_" + UU_ID, Type.VOID_TYPE, > NO_ARGS); > staticInitMethodFlags = staticInitMethodFlags | ACC_FINAL; > - methodVisitorToReturn = new AdviceAdapter(cv.visitMethod(access, name, > desc, signature, > + methodVisitorToReturn = new AdviceAdapter(Constants.ASM4, > cv.visitMethod(access, name, desc, signature, > exceptions), access, name, desc){ > @Override > protected void onMethodEnter() > > Modified: > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/ConstructorFinder.java > URL: > http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/ConstructorFinder.java?rev=1236823&r1=1236822&r2=1236823&view=diff > ============================================================================== > --- > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/ConstructorFinder.java > (original) > +++ > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/ConstructorFinder.java > Fri Jan 27 18:58:20 2012 > @@ -18,14 +18,17 @@ > */ > package org.apache.aries.proxy.impl.common; > > -import org.objectweb.asm.ClassAdapter; > +import org.apache.aries.proxy.impl.gen.Constants; > +import org.apache.aries.proxy.impl.weaving.EmptyVisitor; > + > +import org.objectweb.asm.ClassVisitor; > import org.objectweb.asm.MethodVisitor; > import org.objectweb.asm.Type; > -import org.objectweb.asm.commons.EmptyVisitor; > + > > import static org.objectweb.asm.Opcodes.ACC_PRIVATE; > > -public class ConstructorFinder extends ClassAdapter > +public class ConstructorFinder extends ClassVisitor > { > > private boolean hasNoArgsConstructor = false; > @@ -37,7 +40,7 @@ public class ConstructorFinder extends C > > public ConstructorFinder() > { > - super(new EmptyVisitor()); > + super(Constants.ASM4, new EmptyVisitor(Constants.ASM4)); > } > > @Override > > Added: > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/OSGiFriendlyClassVisitor.java > URL: > http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/OSGiFriendlyClassVisitor.java?rev=1236823&view=auto > ============================================================================== > --- > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/OSGiFriendlyClassVisitor.java > (added) > +++ > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/OSGiFriendlyClassVisitor.java > Fri Jan 27 18:58:20 2012 > @@ -0,0 +1,57 @@ > +/* > + * Licensed to the Apache Software Foundation (ASF) under one > + * or more contributor license agreements. See the NOTICE file > + * distributed with this work for additional information > + * regarding copyright ownership. The ASF licenses this file > + * to you under the Apache License, Version 2.0 (the > + * "License"); you may not use this file except in compliance > + * with the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, > + * software distributed under the License is distributed on an > + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > + * KIND, either express or implied. See the License for the > + * specific language governing permissions and limitations > + * under the License. > + */ > +package org.apache.aries.proxy.impl.common; > + > +import org.apache.aries.proxy.impl.gen.Constants; > +import org.objectweb.asm.ClassVisitor; > +import org.objectweb.asm.ClassWriter; > +import org.objectweb.asm.MethodVisitor; > +import org.objectweb.asm.commons.JSRInlinerAdapter; > +/** > + * We need to override ASM's default behaviour in {@link > #getCommonSuperClass(String, String)} > + * so that it doesn't load classes (which it was doing on the wrong {@link > ClassLoader} > + * anyway...) > + */ > +public final class OSGiFriendlyClassVisitor extends ClassVisitor { > + > + > + private final boolean inlineJSR; > + > + public OSGiFriendlyClassVisitor(ClassVisitor cv, int arg1) { > + > + super(Constants.ASM4, cv); > + > + inlineJSR = arg1 == ClassWriter.COMPUTE_FRAMES; > + } > + > + > + > + > + @Override > + public MethodVisitor visitMethod(int arg0, String arg1, String arg2, > + String arg3, String[] arg4) { > + MethodVisitor mv = cv.visitMethod(arg0, arg1, arg2, arg3, arg4); > + > + if(inlineJSR) > + mv = new JSRInlinerAdapter(mv, arg0, arg1, arg2, arg3, arg4); > + > + return mv; > + } > + > +} > > Modified: > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/OSGiFriendlyClassWriter.java > URL: > http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/OSGiFriendlyClassWriter.java?rev=1236823&r1=1236822&r2=1236823&view=diff > ============================================================================== > --- > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/OSGiFriendlyClassWriter.java > (original) > +++ > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/common/OSGiFriendlyClassWriter.java > Fri Jan 27 18:58:20 2012 > @@ -27,8 +27,6 @@ import org.apache.aries.proxy.UnableToPr > import org.apache.aries.proxy.impl.NLS; > import org.objectweb.asm.ClassReader; > import org.objectweb.asm.ClassWriter; > -import org.objectweb.asm.MethodVisitor; > -import org.objectweb.asm.commons.JSRInlinerAdapter; > /** > * We need to override ASM's default behaviour in {@link > #getCommonSuperClass(String, String)} > * so that it doesn't load classes (which it was doing on the wrong {@link > ClassLoader} > @@ -40,18 +38,22 @@ public final class OSGiFriendlyClassWrit > private final ClassLoader loader; > private String currentClassInternalName; > private String currentSuperClassInternalName; > - private final boolean inlineJSR; > + > > - public OSGiFriendlyClassWriter(ClassReader arg0, int arg1, ClassLoader > loader) { > + public OSGiFriendlyClassWriter(ClassReader arg0, int arg1, ClassLoader > loader, String currentClassInternalName, String > currentSuperClassInternalName) { > super(arg0, arg1); > - inlineJSR = arg1 == COMPUTE_FRAMES; > + > this.loader = loader; > + this.currentClassInternalName = currentClassInternalName; > + this.currentSuperClassInternalName = currentSuperClassInternalName; > } > > - public OSGiFriendlyClassWriter(int arg0, ClassLoader loader) { > + public OSGiFriendlyClassWriter(int arg0, ClassLoader loader, String > currentClassInternalName, String currentSuperClassInternalName) { > super(arg0); > - inlineJSR = arg0 == COMPUTE_FRAMES; > + > this.loader = loader; > + this.currentClassInternalName = currentClassInternalName; > + this.currentSuperClassInternalName = currentSuperClassInternalName; > } > > /** > @@ -133,23 +135,6 @@ public final class OSGiFriendlyClassWrit > /** > * We need access to the super's name and our class name > */ > - @Override > - public final void visit(int arg0, int arg1, String arg2, String arg3, > String arg4, > - String[] arg5) { > - currentClassInternalName = arg2; > - currentSuperClassInternalName = arg4; > - super.visit(arg0, arg1, arg2, arg3, arg4, arg5); > - } > - > - @Override > - public MethodVisitor visitMethod(int arg0, String arg1, String arg2, > - String arg3, String[] arg4) { > - MethodVisitor mv = super.visitMethod(arg0, arg1, arg2, arg3, arg4); > - > - if(inlineJSR) > - mv = new JSRInlinerAdapter(mv, arg0, arg1, arg2, arg3, arg4); > - > - return mv; > - } > + > > } > > Modified: > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/Constants.java > URL: > http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/Constants.java?rev=1236823&r1=1236822&r2=1236823&view=diff > ============================================================================== > --- > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/Constants.java > (original) > +++ > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/Constants.java > Fri Jan 27 18:58:20 2012 > @@ -18,9 +18,12 @@ > */ > package org.apache.aries.proxy.impl.gen; > > +import org.objectweb.asm.Opcodes; > + > public interface Constants > { > final static String LOG_ENTRY = "Method entry: {}, args {}"; > final static String LOG_EXIT = "Method exit: {}, returning {}"; > final static String LOG_EXCEPTION = "Caught exception"; > + final static int ASM4 = Opcodes.ASM4; > } > > Modified: > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/ProxySubclassAdapter.java > URL: > http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/ProxySubclassAdapter.java?rev=1236823&r1=1236822&r2=1236823&view=diff > ============================================================================== > --- > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/ProxySubclassAdapter.java > (original) > +++ > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/ProxySubclassAdapter.java > Fri Jan 27 18:58:20 2012 > @@ -23,7 +23,6 @@ import java.lang.reflect.InvocationHandl > > import org.objectweb.asm.AnnotationVisitor; > import org.objectweb.asm.Attribute; > -import org.objectweb.asm.ClassAdapter; > import org.objectweb.asm.ClassReader; > import org.objectweb.asm.ClassVisitor; > import org.objectweb.asm.FieldVisitor; > @@ -35,7 +34,7 @@ import org.objectweb.asm.commons.Method; > import org.slf4j.Logger; > import org.slf4j.LoggerFactory; > > -public class ProxySubclassAdapter extends ClassAdapter implements Opcodes > +public class ProxySubclassAdapter extends ClassVisitor implements Opcodes > { > > private static final Type STRING_TYPE = Type.getType(String.class); > @@ -62,7 +61,7 @@ public class ProxySubclassAdapter extend > public ProxySubclassAdapter(ClassVisitor writer, String newClassName, > ClassLoader loader) > { > // call the superclass constructor > - super(writer); > + super(Constants.ASM4, writer); > // the writer is now the cv in the superclass of ClassAdapter > > LOGGER.debug(Constants.LOG_ENTRY, "ProxySubclassAdapter", new Object[] { > this, writer, > > Modified: > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/ProxySubclassHierarchyAdapter.java > URL: > http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/ProxySubclassHierarchyAdapter.java?rev=1236823&r1=1236822&r2=1236823&view=diff > ============================================================================== > --- > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/ProxySubclassHierarchyAdapter.java > (original) > +++ > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/gen/ProxySubclassHierarchyAdapter.java > Fri Jan 27 18:58:20 2012 > @@ -37,7 +37,7 @@ import org.slf4j.LoggerFactory; > * > * > */ > -public class ProxySubclassHierarchyAdapter implements ClassVisitor, Opcodes > +public class ProxySubclassHierarchyAdapter extends ClassVisitor implements > Opcodes > { > > private ProxySubclassAdapter adapter = null; > @@ -47,6 +47,7 @@ public class ProxySubclassHierarchyAdapt > > ProxySubclassHierarchyAdapter(ProxySubclassAdapter adapter, > Collection<String> methodsToImplement) > { > + super(Constants.ASM4); > LOGGER.debug(Constants.LOG_ENTRY, "ProxySubclassHeirarchyAdapter", new > Object[] { > this, adapter, methodsToImplement }); > > > Modified: > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceCombiningClassAdapter.java > URL: > http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceCombiningClassAdapter.java?rev=1236823&r1=1236822&r2=1236823&view=diff > ============================================================================== > --- > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceCombiningClassAdapter.java > (original) > +++ > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceCombiningClassAdapter.java > Fri Jan 27 18:58:20 2012 > @@ -26,13 +26,17 @@ import java.util.List; > > import org.apache.aries.proxy.UnableToProxyException; > import org.apache.aries.proxy.impl.common.AbstractWovenProxyAdapter; > +import org.apache.aries.proxy.impl.common.OSGiFriendlyClassVisitor; > import org.apache.aries.proxy.impl.common.OSGiFriendlyClassWriter; > +import org.apache.aries.proxy.impl.gen.Constants; > +import org.apache.aries.proxy.impl.weaving.EmptyVisitor; > import org.apache.aries.proxy.weaving.WovenProxy; > +import org.objectweb.asm.ClassVisitor; > import org.objectweb.asm.ClassWriter; > import org.objectweb.asm.MethodVisitor; > import org.objectweb.asm.Opcodes; > import org.objectweb.asm.Type; > -import org.objectweb.asm.commons.EmptyVisitor; > + > import org.objectweb.asm.commons.Method; > > /** > @@ -60,8 +64,10 @@ final class InterfaceCombiningClassAdapt > */ > InterfaceCombiningClassAdapter(String className, > ClassLoader loader, Class<? extends WovenProxy> superclass, > Collection<Class<?>> interfaces) { > - writer = new OSGiFriendlyClassWriter(ClassWriter.COMPUTE_FRAMES, loader); > - adapter = new InterfaceUsingWovenProxyAdapter(writer, className, loader); > + super(Constants.ASM4); > + writer = new OSGiFriendlyClassWriter(ClassWriter.COMPUTE_FRAMES, loader, > className, (superclass!=null)? superclass.getName(): null); > + ClassVisitor cv = new OSGiFriendlyClassVisitor(writer, > ClassWriter.COMPUTE_FRAMES); > + adapter = new InterfaceUsingWovenProxyAdapter(cv, className, loader); > > this.interfaces = interfaces; > this.superclass = superclass; > > Modified: > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceProxyGenerator.java > URL: > http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceProxyGenerator.java?rev=1236823&r1=1236822&r2=1236823&view=diff > ============================================================================== > --- > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceProxyGenerator.java > (original) > +++ > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceProxyGenerator.java > Fri Jan 27 18:58:20 2012 > @@ -23,7 +23,6 @@ import java.lang.reflect.Constructor; > import java.util.Arrays; > import java.util.Collection; > import java.util.Comparator; > -import java.util.LinkedHashSet; > import java.util.Map; > import java.util.SortedSet; > import java.util.TreeSet; > @@ -32,9 +31,10 @@ import java.util.concurrent.Callable; > > import org.apache.aries.proxy.InvocationListener; > import org.apache.aries.proxy.UnableToProxyException; > +import org.apache.aries.proxy.impl.gen.Constants; > +import org.apache.aries.proxy.impl.weaving.EmptyVisitor; > import org.apache.aries.proxy.weaving.WovenProxy; > import org.objectweb.asm.Opcodes; > -import org.objectweb.asm.commons.EmptyVisitor; > import org.osgi.framework.Bundle; > > /** > @@ -45,6 +45,12 @@ import org.osgi.framework.Bundle; > */ > public final class InterfaceProxyGenerator extends EmptyVisitor implements > Opcodes { > > + public InterfaceProxyGenerator() > + { > + super(Constants.ASM4); > + > + } > + > private static final Map<Bundle, WeakReference<ProxyClassLoader>> cache = > new WeakHashMap<Bundle, WeakReference<ProxyClassLoader>>(128); > > > Added: > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/EmptyVisitor.java > URL: > http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/EmptyVisitor.java?rev=1236823&view=auto > ============================================================================== > --- > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/EmptyVisitor.java > (added) > +++ > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/EmptyVisitor.java > Fri Jan 27 18:58:20 2012 > @@ -0,0 +1,32 @@ > +/* > + * @start_prolog@ > + * > ============================================================================ > + * IBM Confidential OCO Source Materials > + * > + * 5724-J08, 5724-I63, 5724-H88, 5724-H89, 5655-N02, 5733-W70 Copyright IBM > Corp. 2010 > + * > + * The source code for this program is not published or otherwise divested > + * of its trade secrets, irrespective of what has been deposited with the > + * U.S. Copyright Office. > + * > ============================================================================ > + * @end_prolog@ > + * > + * Change activity: > + * > + * Issue Date Name Description > + * ----------- ----------- -------- ------------------------------------ > + */ > +package org.apache.aries.proxy.impl.weaving; > + > +import org.objectweb.asm.ClassVisitor; > + > +public class EmptyVisitor extends ClassVisitor > +{ > + > + public EmptyVisitor(int asmVersion) > + { > + super(asmVersion); > + > + } > + > +} > > Modified: > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/MethodCopyingClassAdapter.java > URL: > http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/MethodCopyingClassAdapter.java?rev=1236823&r1=1236822&r2=1236823&view=diff > ============================================================================== > --- > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/MethodCopyingClassAdapter.java > (original) > +++ > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/MethodCopyingClassAdapter.java > Fri Jan 27 18:58:20 2012 > @@ -26,6 +26,7 @@ import org.apache.aries.proxy.UnableToPr > import org.apache.aries.proxy.impl.NLS; > import org.apache.aries.proxy.impl.common.AbstractWovenProxyAdapter; > import org.apache.aries.proxy.impl.common.TypeMethod; > +import org.apache.aries.proxy.impl.gen.Constants; > import org.objectweb.asm.AnnotationVisitor; > import org.objectweb.asm.Attribute; > import org.objectweb.asm.ClassReader; > @@ -33,7 +34,7 @@ import org.objectweb.asm.ClassVisitor; > import org.objectweb.asm.MethodVisitor; > import org.objectweb.asm.Opcodes; > import org.objectweb.asm.Type; > -import org.objectweb.asm.commons.EmptyVisitor; > + > import org.objectweb.asm.commons.Method; > > /** > @@ -65,6 +66,7 @@ final class MethodCopyingClassAdapter ex > public MethodCopyingClassAdapter(ClassVisitor cv, Class<?> superToCopy, > Type overridingClassType, Set<Method> knownMethods, > Map<String, TypeMethod> transformedMethods) { > + super(Constants.ASM4); > this.cv = cv; > this.superToCopy = superToCopy; > this.overridingClassType = overridingClassType; > @@ -132,7 +134,7 @@ final class MethodCopyingClassAdapter ex > * the body with a call to the super-types implementation. The original > annotations > * attributes etc are all copied. > */ > - private static final class CopyingMethodAdapter extends EmptyVisitor { > + private static final class CopyingMethodAdapter extends MethodVisitor { > /** The visitor to delegate to */ > private final MethodVisitor mv; > /** The type that declares this method (not the one that will override > it) */ > @@ -142,11 +144,13 @@ final class MethodCopyingClassAdapter ex > > public CopyingMethodAdapter(MethodVisitor mv, Type superType, > Method currentTransformMethod) { > + super(Constants.ASM4); > this.mv = mv; > this.superType = superType; > this.currentTransformMethod = currentTransformMethod; > } > > + //TODO might not work for attributes > @Override > public final AnnotationVisitor visitAnnotation(String arg0, boolean arg1) > { > return mv.visitAnnotation(arg0, arg1); > > Modified: > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/SyntheticSerialVerUIDAdder.java > URL: > http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/SyntheticSerialVerUIDAdder.java?rev=1236823&r1=1236822&r2=1236823&view=diff > ============================================================================== > --- > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/SyntheticSerialVerUIDAdder.java > (original) > +++ > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/SyntheticSerialVerUIDAdder.java > Fri Jan 27 18:58:20 2012 > @@ -18,10 +18,17 @@ > */ > package org.apache.aries.proxy.impl.weaving; > > +import java.io.IOException; > + > +import org.apache.aries.proxy.impl.gen.Constants; > import org.objectweb.asm.commons.SerialVersionUIDAdder; > +import org.slf4j.Logger; > +import org.slf4j.LoggerFactory; > > class SyntheticSerialVerUIDAdder extends SerialVersionUIDAdder { > > + private static Logger LOGGER = > LoggerFactory.getLogger(SyntheticSerialVerUIDAdder.class); > + > private WovenProxyAdapter wpa; > > public SyntheticSerialVerUIDAdder(WovenProxyAdapter cv) { > @@ -31,7 +38,26 @@ class SyntheticSerialVerUIDAdder extends > > @Override > public void visitEnd() { > - wpa.setSVUIDGenerated(!!!hasSVUID); > + > + wpa.setSVUIDGenerated(!!!isHasSVUID()); > super.visitEnd(); > } > + > + private boolean isHasSVUID() { > + try { > + if (computeSVUID() == 0 ) { > + // This means the class has a serial id already > + return true; > + } else { > + return false; > + } > + } catch (IOException ioe) { > + > + LOGGER.debug(Constants.LOG_ENTRY, "cannot.compute.serial.id", new > Object[] { ioe }); > + > + } finally { > + return false; > + } > + > + } > } > > Modified: > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/WovenProxyGenerator.java > URL: > http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/WovenProxyGenerator.java?rev=1236823&r1=1236822&r2=1236823&view=diff > ============================================================================== > --- > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/WovenProxyGenerator.java > (original) > +++ > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/WovenProxyGenerator.java > Fri Jan 27 18:58:20 2012 > @@ -23,6 +23,7 @@ import static org.objectweb.asm.Opcodes. > import static org.objectweb.asm.Opcodes.ACC_INTERFACE; > > import org.apache.aries.proxy.impl.common.AbstractWovenProxyAdapter; > +import org.apache.aries.proxy.impl.common.OSGiFriendlyClassVisitor; > import org.apache.aries.proxy.impl.common.OSGiFriendlyClassWriter; > import org.objectweb.asm.ClassReader; > import org.objectweb.asm.ClassVisitor; > @@ -41,12 +42,13 @@ public final class WovenProxyGenerator > > //If we are Java 1.6 + compiled then we need to compute stack frames, > otherwise > //maxs are fine (and faster) > - ClassWriter cWriter = new OSGiFriendlyClassWriter(cReader, > AbstractWovenProxyAdapter.IS_AT_LEAST_JAVA_6 ? > - ClassWriter.COMPUTE_FRAMES : ClassWriter.COMPUTE_MAXS, loader); > - > + int computeVal = AbstractWovenProxyAdapter.IS_AT_LEAST_JAVA_6 ? > + ClassWriter.COMPUTE_FRAMES : ClassWriter.COMPUTE_MAXS; > + ClassWriter cWriter = new OSGiFriendlyClassWriter(cReader, computeVal, > loader, cReader.getClassName(), cReader.getSuperName()); > + ClassVisitor cv = new OSGiFriendlyClassVisitor(cWriter, computeVal ); > //Wrap our outer layer to add the original SerialVersionUID if it was > previously being defaulted > ClassVisitor weavingAdapter = new SyntheticSerialVerUIDAdder( > - new WovenProxyAdapter(cWriter, className, > loader)); > + new WovenProxyAdapter(cv, className, loader)); > > // If we are Java 1.6 + then we need to skip frames as they will be > recomputed > cReader.accept(weavingAdapter, > AbstractWovenProxyAdapter.IS_AT_LEAST_JAVA_6 ? ClassReader.SKIP_FRAMES : 0); > > Modified: > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/synthesizer/Synthesizer.java > URL: > http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/synthesizer/Synthesizer.java?rev=1236823&r1=1236822&r2=1236823&view=diff > ============================================================================== > --- > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/synthesizer/Synthesizer.java > (original) > +++ > aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/synthesizer/Synthesizer.java > Fri Jan 27 18:58:20 2012 > @@ -22,7 +22,9 @@ package org.apache.aries.proxy.synthesiz > import java.io.FileInputStream; > import java.io.FileOutputStream; > > +import org.apache.aries.proxy.impl.gen.Constants; > import org.objectweb.asm.ClassReader; > +import org.objectweb.asm.ClassVisitor; > import org.objectweb.asm.ClassWriter; > import org.objectweb.asm.Opcodes; > > @@ -46,6 +48,7 @@ public class Synthesizer > for (String arg : args) { > FileInputStream classInStream = null; > ClassWriter writer = null; > + > try { > //read in the class > classInStream = new FileInputStream(arg); > @@ -55,18 +58,11 @@ public class Synthesizer > //we just need to override the visit method so we can add > //the synthetic modifier, otherwise we use the methods in > //a standard writer > - writer = new ClassWriter(reader, 0) { > - @Override > - public void visit(int version, int access, String name, String > signature, > - String superName, String[] interfaces) > - { > - super.visit(version, access | Opcodes.ACC_SYNTHETIC, name, > signature, superName, > - interfaces); > - } > - }; > + writer = new ClassWriter(reader, 0) ; > + ClassVisitor cv = new CustomClassVisitor((ClassVisitor)writer); > //call accept on the reader to start the visits > //using the writer we created as the visitor > - reader.accept(writer, 0); > + reader.accept(cv, 0); > } finally { > //close the InputStream if it is hanging around > if (classInStream != null) classInStream.close(); > @@ -82,4 +78,22 @@ public class Synthesizer > } > } > } > + > + public static class CustomClassVisitor extends ClassVisitor > + { > + > + public CustomClassVisitor( ClassVisitor cv) > + { > + super(Constants.ASM4, cv); > + > + } > + @Override > + public void visit(int version, int access, String name, String signature, > + String superName, String[] interfaces) > + { > + cv.visit(version, access | Opcodes.ACC_SYNTHETIC, name, signature, > superName, > + interfaces); > + } > + > + } > } > > Modified: > aries/trunk/proxy/proxy-impl/src/main/resources/org/apache/aries/proxy/nls/ProxyImplMessages.properties > URL: > http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/resources/org/apache/aries/proxy/nls/ProxyImplMessages.properties?rev=1236823&r1=1236822&r2=1236823&view=diff > ============================================================================== > --- > aries/trunk/proxy/proxy-impl/src/main/resources/org/apache/aries/proxy/nls/ProxyImplMessages.properties > (original) > +++ > aries/trunk/proxy/proxy-impl/src/main/resources/org/apache/aries/proxy/nls/ProxyImplMessages.properties > Fri Jan 27 18:58:20 2012 > @@ -47,3 +47,4 @@ no.common.superclass=The class {0} and { > cannot.weave=The class {0} cannot be woven, it may not be possible for the > runtime to proxy this class. > # {0} The class that could not be woven. > fatal.weaving.failure=There was a serious error trying to weave the class > {0}. See the associated exception for more information. > +cannot.compute.serial.id=An internal error occurred while computing serial > id. {0} > > Modified: > aries/trunk/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/InterfaceProxyingTest.java > URL: > http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/InterfaceProxyingTest.java?rev=1236823&r1=1236822&r2=1236823&view=diff > ============================================================================== > --- > aries/trunk/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/InterfaceProxyingTest.java > (original) > +++ > aries/trunk/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/InterfaceProxyingTest.java > Fri Jan 27 18:58:20 2012 > @@ -53,7 +53,7 @@ public class InterfaceProxyingTest { > > private Object list = new Callable<Object>() { > > - @Override > + > public Object call() throws Exception { > return null; > } > @@ -127,7 +127,7 @@ public class InterfaceProxyingTest { > > tc.setReturn(new Callable<Object>() { > > - @Override > + > public Object call() throws Exception { > throw new RuntimeException(); > } > @@ -145,7 +145,7 @@ public class InterfaceProxyingTest { > > tc.setReturn(new Callable<Object>() { > > - @Override > + > public Object call() throws Exception { > try { > throw new RuntimeException(); > >
