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/09/17 13:05:37 UTC

svn commit: r1171946 - in /aries/trunk/proxy/proxy-impl/src: main/java/org/apache/aries/proxy/impl/interfaces/ test/java/org/apache/aries/blueprint/proxy/

Author: timothyjward
Date: Sat Sep 17 11:05:37 2011
New Revision: 1171946

URL: http://svn.apache.org/viewvc?rev=1171946&view=rev
Log:
ARIES-746: Fix Object methods on pure interface proxies - avoid implementing interfaces in a random order (In particular make sure that we get the same behaviour from Sun and IBM derived VMs)

Modified:
    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/interfaces/ProxyClassLoader.java
    aries/trunk/proxy/proxy-impl/src/test/java/org/apache/aries/blueprint/proxy/InterfaceProxyingTest.java

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=1171946&r1=1171945&r2=1171946&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 Sat Sep 17 11:05:37 2011
@@ -23,6 +23,7 @@ import java.lang.reflect.Constructor;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.WeakHashMap;
 import java.util.concurrent.Callable;
@@ -55,7 +56,7 @@ public final class InterfaceProxyGenerat
     
     ProxyClassLoader pcl = null;
     
-    HashSet<Class<?>> classSet = createSet(ifaces);
+    LinkedHashSet<Class<?>> classSet = createSet(ifaces);
     
     synchronized (cache) {
       WeakReference<ProxyClassLoader> ref = cache.get(client);
@@ -92,8 +93,8 @@ public final class InterfaceProxyGenerat
    * @param ifaces
    * @return
    */
-  private static HashSet<Class<?>> createSet(Collection<Class<?>> ifaces) {
-    HashSet<Class<?>> classes = new HashSet<Class<?>>();
+  private static LinkedHashSet<Class<?>> createSet(Collection<Class<?>> ifaces) {
+    LinkedHashSet<Class<?>> classes = new LinkedHashSet<Class<?>>();
     for(Class<?> c : ifaces) {
       //If we already have a class contained then we have already covered its hierarchy
       if(classes.add(c))

Modified: aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/ProxyClassLoader.java
URL: http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/ProxyClassLoader.java?rev=1171946&r1=1171945&r2=1171946&view=diff
==============================================================================
--- aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/ProxyClassLoader.java (original)
+++ aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/ProxyClassLoader.java Sat Sep 17 11:05:37 2011
@@ -5,6 +5,7 @@ import java.security.PermissionCollectio
 import java.security.Permissions;
 import java.security.ProtectionDomain;
 import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -32,8 +33,8 @@ final class ProxyClassLoader extends Cla
   }
   
   /** A {@link Map} of classes we already know */
-  private final ConcurrentMap<HashSet<Class<?>>, String> classes = 
-                new ConcurrentHashMap<HashSet<Class<?>>, String>();
+  private final ConcurrentMap<LinkedHashSet<Class<?>>, String> classes = 
+                new ConcurrentHashMap<LinkedHashSet<Class<?>>, String>();
   
   private final ConcurrentMap<String, Class<?>> locatedClasses = 
                 new ConcurrentHashMap<String, Class<?>>();
@@ -96,7 +97,7 @@ final class ProxyClassLoader extends Cla
       return false;
   }
 
-  public Class<?> createProxyClass(HashSet<Class<?>> createSet) throws UnableToProxyException {
+  public Class<?> createProxyClass(LinkedHashSet<Class<?>> createSet) throws UnableToProxyException {
     
     String className = classes.get(createSet);
     

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=1171946&r1=1171945&r2=1171946&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 Sat Sep 17 11:05:37 2011
@@ -197,10 +197,10 @@ public class InterfaceProxyingTest {
       
       // obeys hashCode and equals, they *are* on the interface
       assertTrue(proxied.equals(Arrays.asList("one", "two", "three")));
-      assertEquals(Collection.class.getMethod("equals", Object.class), listener.getLastMethod());
+      assertEquals(List.class.getMethod("equals", Object.class), listener.getLastMethod());
       listener.clear();
       assertEquals(Arrays.asList("one", "two", "three").hashCode(), proxied.hashCode());
-      assertEquals(Collection.class.getMethod("hashCode"), listener.getLastMethod());
+      assertEquals(List.class.getMethod("hashCode"), listener.getLastMethod());
       listener.clear();
       // and toString
       assertEquals(list.toString(), proxied.toString());