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/16 15:19:25 UTC
svn commit: r1171540 - 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: Fri Sep 16 13:19:24 2011
New Revision: 1171540
URL: http://svn.apache.org/viewvc?rev=1171540&view=rev
Log:
ARIES-746: Fix Object methods on pure interface proxies
Modified:
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/InterfaceUsingWovenProxyMethodAdapter.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/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=1171540&r1=1171539&r2=1171540&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 Sep 16 13:19:24 2011
@@ -101,6 +101,7 @@ final class InterfaceCombiningClassAdapt
}
}
+ adapter.setCurrentInterface(Type.getType(Object.class));
visitObjectMethods();
adapter.visitEnd();
Modified: aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceUsingWovenProxyMethodAdapter.java
URL: http://svn.apache.org/viewvc/aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceUsingWovenProxyMethodAdapter.java?rev=1171540&r1=1171539&r2=1171540&view=diff
==============================================================================
--- aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceUsingWovenProxyMethodAdapter.java (original)
+++ aries/trunk/proxy/proxy-impl/src/main/java/org/apache/aries/proxy/impl/interfaces/InterfaceUsingWovenProxyMethodAdapter.java Fri Sep 16 13:19:24 2011
@@ -31,12 +31,16 @@ import org.objectweb.asm.commons.Method;
final class InterfaceUsingWovenProxyMethodAdapter extends AbstractWovenProxyMethodAdapter {
private final Type interfaceType;
+
+ private final boolean isInterfaceType;
+
public InterfaceUsingWovenProxyMethodAdapter(MethodVisitor mv, int access, String name,
String desc, String methodStaticFieldName, Method currentTransformMethod,
Type typeBeingWoven, Type interfaceType) {
super(mv, access, name, desc, methodStaticFieldName, currentTransformMethod,
typeBeingWoven);
this.interfaceType = interfaceType;
+ this.isInterfaceType = !!!interfaceType.equals(OBJECT_TYPE);
}
/**
@@ -81,6 +85,6 @@ final class InterfaceUsingWovenProxyMeth
@Override
protected final boolean isTypeToCastToInterface() {
- return true;
+ return isInterfaceType;
}
}
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=1171540&r1=1171539&r2=1171540&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 Sep 16 13:19:24 2011
@@ -191,24 +191,34 @@ public class InterfaceProxyingTest {
@Test
public void testHandlesObjectMethods() throws Exception {
+ TestListener listener = new TestListener();
List<String> list = Arrays.asList("one", "two", "three");
- Object proxied = InterfaceProxyGenerator.getProxyInstance(testBundle, Arrays.<Class<?>>asList(List.class), constantly(list), null);
+ Object proxied = InterfaceProxyGenerator.getProxyInstance(testBundle, Arrays.<Class<?>>asList(List.class), constantly(list), listener);
// 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());
+ listener.clear();
assertEquals(Arrays.asList("one", "two", "three").hashCode(), proxied.hashCode());
-
+ assertEquals(Collection.class.getMethod("hashCode"), listener.getLastMethod());
+ listener.clear();
// and toString
assertEquals(list.toString(), proxied.toString());
+ assertEquals(Object.class.getMethod("toString"), listener.getLastMethod());
+ listener.clear();
Runnable runnable = new Runnable() {
public void run() {}
};
- proxied = InterfaceProxyGenerator.getProxyInstance(testBundle, Arrays.<Class<?>>asList(Runnable.class), constantly(runnable), null);
+ proxied = InterfaceProxyGenerator.getProxyInstance(testBundle, Arrays.<Class<?>>asList(Runnable.class), constantly(runnable), listener);
// obeys hashCode and equals, they *are not* on the interface
assertTrue(proxied.equals(runnable));
+ assertEquals(Object.class.getMethod("equals", Object.class), listener.getLastMethod());
+ listener.clear();
assertEquals(runnable.hashCode(), proxied.hashCode());
+ assertEquals(Object.class.getMethod("hashCode"), listener.getLastMethod());
+ listener.clear();
}
private static class TestClassLoader extends ClassLoader {