You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@aries.apache.org by Emily Jiang <em...@googlemail.com> on 2012/01/29 23:16:54 UTC

Re: svn commit: r1236823 - in /aries/trunk/proxy/proxy-impl: ./ src/main/java/org/apache/aries/proxy/impl/common/ src/main/java/org/apache/aries/proxy/impl/gen/ src/main/java/org/apache/aries/proxy/impl/interfaces/ src/main/java/org/apache/aries/prox

On Sat, Jan 28, 2012 at 12:08 AM, David Jencks <da...@yahoo.com>wrote:

> I doubt you meant to commit EmptyVisitor?
>
> EmptyVisitor is a convenient class. I don't see the bad thing about it.

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.
>
> I defined a variable and refered to it instead. In the future, we might
need to change the value. Instead of going around to change everywhere. We
can just change one instance instead.


> david jencks
> On Jan 27, 2012, at 10:58 AM, ejiang@apache.org 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();
> >
> >
>
>


-- 
Thanks
Emily
=================
Emily Jiang
ejiang@apache.org

Re: svn commit: r1236823 - in /aries/trunk/proxy/proxy-impl: ./ src/main/java/org/apache/aries/proxy/impl/common/ src/main/java/org/apache/aries/proxy/impl/gen/ src/main/java/org/apache/aries/proxy/impl/interfaces/ src/main/java/org/apache/aries/prox

Posted by Emily Jiang <em...@googlemail.com>.
As I mentioned earlier, ASM4 has forgotten to add one method isHasSVUID()
although it was javadoced . As I have not looked at the implementation of
computeSVUID and you said it will be computed every time, I do agree your
suggestion is better for the time being. We will be able to change this
class when ASM4 fixes the problem or enhances their class. Will commit the
change soon.

Thanks
Emily

On Sun, Jan 29, 2012 at 11:19 PM, David Jencks <da...@yahoo.com>wrote:

>
> On Jan 29, 2012, at 2:16 PM, Emily Jiang wrote:
>
> > On Sat, Jan 28, 2012 at 12:08 AM, David Jencks <david_jencks@yahoo.com
> >wrote:
> >
> >> I doubt you meant to commit EmptyVisitor?
> >>
> >> EmptyVisitor is a convenient class. I don't see the bad thing about it.
>
> How does it differ from ClassVisitor etc?  I don't see how it's useful.  I
> don't think you are using it at all.  And it has definitely very wrong
> headers that need to be fixed if it stays.
>
> >
> > 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.
> >>
> >> I defined a variable and refered to it instead. In the future, we might
> > need to change the value. Instead of going around to change everywhere.
> We
> > can just change one instance instead.
>
> That might make sense if you called it "ASM_VERSION" but if its called
> ASM4 then it has to always match the Opcodes.ASM4.
>
> I think that the point of the constant is to promote using backwards
> compatible behavior unless you explicitly review what's happening and
> change the constant to e.g. ASM5 after verifying that it is appropriate.
>  So I'm very much against an ASM_VERSION non-constant.
>
> thanks
> david jencks
>
> >
> >
> >> david jencks
> >> On Jan 27, 2012, at 10:58 AM, ejiang@apache.org 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();
> >>>
> >>>
> >>
> >>
> >
> >
> > --
> > Thanks
> > Emily
> > =================
> > Emily Jiang
> > ejiang@apache.org
>
>


-- 
Thanks
Emily
=================
Emily Jiang
ejiang@apache.org

Re: svn commit: r1236823 - in /aries/trunk/proxy/proxy-impl: ./ src/main/java/org/apache/aries/proxy/impl/common/ src/main/java/org/apache/aries/proxy/impl/gen/ src/main/java/org/apache/aries/proxy/impl/interfaces/ src/main/java/org/apache/aries/prox

Posted by David Jencks <da...@yahoo.com>.
On Jan 29, 2012, at 2:16 PM, Emily Jiang wrote:

> On Sat, Jan 28, 2012 at 12:08 AM, David Jencks <da...@yahoo.com>wrote:
> 
>> I doubt you meant to commit EmptyVisitor?
>> 
>> EmptyVisitor is a convenient class. I don't see the bad thing about it.

How does it differ from ClassVisitor etc?  I don't see how it's useful.  I don't think you are using it at all.  And it has definitely very wrong headers that need to be fixed if it stays.

> 
> 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.
>> 
>> I defined a variable and refered to it instead. In the future, we might
> need to change the value. Instead of going around to change everywhere. We
> can just change one instance instead.

That might make sense if you called it "ASM_VERSION" but if its called ASM4 then it has to always match the Opcodes.ASM4.

I think that the point of the constant is to promote using backwards compatible behavior unless you explicitly review what's happening and change the constant to e.g. ASM5 after verifying that it is appropriate.  So I'm very much against an ASM_VERSION non-constant.

thanks
david jencks

> 
> 
>> david jencks
>> On Jan 27, 2012, at 10:58 AM, ejiang@apache.org 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();
>>> 
>>> 
>> 
>> 
> 
> 
> -- 
> Thanks
> Emily
> =================
> Emily Jiang
> ejiang@apache.org