aries-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From eji...@apache.org
Subject 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/proxy/impl...
Date Fri, 27 Jan 2012 18:58:21 GMT
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();



Mime
View raw message