You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ti...@apache.org on 2011/07/07 18:40:25 UTC

svn commit: r1143912 - in /aries/trunk/proxy/proxy-impl/src: main/java/org/apache/aries/proxy/impl/common/ main/java/org/apache/aries/proxy/impl/weaving/ test/java/org/apache/aries/blueprint/proxy/

Author: timothyjward
Date: Thu Jul  7 16:40:25 2011
New Revision: 1143912

URL: http://svn.apache.org/viewvc?rev=1143912&view=rev
Log:
ARIES-705 : Avoid generating a serialVersionUID for classes that aren't Serializable

Modified:
    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/weaving/WovenProxyAdapter.java
    aries/trunk/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/WovenProxyGeneratorTest.java

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=1143912&r1=1143911&r2=1143912&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 Thu Jul  7 16:40:25 2011
@@ -19,9 +19,11 @@
 package org.apache.aries.proxy.impl.common;
 
 import java.io.IOException;
+import java.io.Serializable;
 import java.lang.reflect.Modifier;
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -160,6 +162,11 @@ public abstract class AbstractWovenProxy
    */
   private boolean hasNoArgsConstructor = false;
   /**
+   * If we have a no-args constructor then we can delegate there rather than 
+   * to a super no-args
+   */
+  protected boolean isSerializable = false;
+  /**
    * The default static initialization method where we will write the proxy init
    * code. If there is an existing <clinit> then we will change this and write a
    * static_init_UUID instead (see the overriden 
@@ -214,6 +221,9 @@ public abstract class AbstractWovenProxy
       Class<?> superClass = Class.forName(superName.replace('/', '.'), false,
           loader);
 
+      isSerializable = Serializable.class.isAssignableFrom(superClass) || 
+                       Arrays.asList(interfaces).contains(Type.getInternalName(Serializable.class));
+      
       if (!!!WovenProxy.class.isAssignableFrom(superClass)) {
 
         // We have found a type we need to add WovenProxy information to

Modified: aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/WovenProxyAdapter.java
URL: http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/WovenProxyAdapter.java?rev=1143912&r1=1143911&r2=1143912&view=diff
==============================================================================
--- aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/WovenProxyAdapter.java (original)
+++ aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/weaving/WovenProxyAdapter.java Thu Jul  7 16:40:25 2011
@@ -61,9 +61,17 @@ final class WovenProxyAdapter extends Ab
   @Override
   public FieldVisitor visitField(int access, String name, String arg2,
       String arg3, Object arg4) {
+    
     //If this sVUID is generated then make it synthetic
-    if(sVUIDGenerated && "serialVersionUID".equals(name)) 
+    if(sVUIDGenerated && "serialVersionUID".equals(name)) {
+      
+      //If we aren't a serializable class then don't add a generated sVUID
+      if(!!!isSerializable) {
+        return null;
+      }
+      
       access |= ACC_SYNTHETIC;
+    }
     return super.visitField(access, name, arg2, arg3, arg4);
   }
 

Modified: aries/trunk/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/WovenProxyGeneratorTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/WovenProxyGeneratorTest.java?rev=1143912&r1=1143911&r2=1143912&view=diff
==============================================================================
--- aries/trunk/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/WovenProxyGeneratorTest.java (original)
+++ aries/trunk/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/WovenProxyGeneratorTest.java Thu Jul  7 16:40:25 2011
@@ -313,6 +313,12 @@ public class WovenProxyGeneratorTest ext
     }
   }
   
+  @Test(expected=NoSuchFieldException.class)
+  public void testNonSerializableClassHasNoGeneratedSerialVersionUID() throws Exception {
+    Class<?> woven = getProxyClass(TEST_CLASS);
+    woven.getDeclaredField("serialVersionUID");
+  }
+  
   @Test
   public void testSerialization() throws Exception {