Author: struberg
Date: Thu Jan 17 12:38:40 2013
New Revision: 1434645

URL: http://svn.apache.org/viewvc?rev=1434645&view=rev
Log:
OWB-344 proxying interfaces requires INVOKEINTERFACE and different ct handling

Modified:
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/AbstractProxyFactory.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/NormalScopeProxyFactory.java
    
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/DisposalInjectedComponentTest.java

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/AbstractProxyFactory.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/AbstractProxyFactory.java?rev=1434645&r1=1434644&r2=1434645&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/AbstractProxyFactory.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/AbstractProxyFactory.java
 Thu Jan 17 12:38:40 2013
@@ -239,7 +239,7 @@ public abstract class AbstractProxyFacto
         int modifiers = delegatedMethod.getModifiers();
 
         //X TODO how to deal with native functions?
-        return (modifiers & (Modifier.PRIVATE | Modifier.ABSTRACT | 
Modifier.STATIC | Modifier.FINAL | Modifier.NATIVE)) > 0 ||
+        return (modifiers & (Modifier.PRIVATE | Modifier.STATIC | 
Modifier.FINAL | Modifier.NATIVE)) > 0 ||
                "finalize".equals(delegatedMethod.getName());
     }
 

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/NormalScopeProxyFactory.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/NormalScopeProxyFactory.java?rev=1434645&r1=1434644&r2=1434645&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/NormalScopeProxyFactory.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/NormalScopeProxyFactory.java
 Thu Jan 17 12:38:40 2013
@@ -125,8 +125,17 @@ public class NormalScopeProxyFactory ext
     {
         String proxyClassName = getUnusedProxyClassName(classLoader, 
classToProxy.getName() + "$OwbNormalScopeProxy");
 
-        List<Method> methods = ClassUtil.getNonPrivateMethods(classToProxy);
-        Method[] nonInterceptedMethods = methods.toArray(new 
Method[methods.size()]);
+        Method[] nonInterceptedMethods;
+        if (classToProxy.isInterface())
+        {
+            nonInterceptedMethods = classToProxy.getMethods();
+        }
+        else
+        {
+            List<Method> methods = 
ClassUtil.getNonPrivateMethods(classToProxy);
+            nonInterceptedMethods = methods.toArray(new 
Method[methods.size()]);
+        }
+
         Class<T> clazz = createProxyClass(classLoader, proxyClassName, 
classToProxy, null, nonInterceptedMethods);
 
         return clazz;
@@ -261,7 +270,9 @@ public class NormalScopeProxyFactory ext
 
             // and finally invoke the target method on the provided Contextual 
Instance
             final Type declaringClass = 
Type.getType(delegatedMethod.getDeclaringClass());
-            mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, 
declaringClass.getInternalName(), delegatedMethod.getName(), methodDescriptor);
+            boolean interfaceMethod = 
Modifier.isAbstract(delegatedMethod.getModifiers());
+            mv.visitMethodInsn(interfaceMethod ? Opcodes.INVOKEINTERFACE : 
Opcodes.INVOKEVIRTUAL,
+                               declaringClass.getInternalName(), 
delegatedMethod.getName(), methodDescriptor);
 
             generateReturn(mv, delegatedMethod);
 

Modified: 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/DisposalInjectedComponentTest.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/DisposalInjectedComponentTest.java?rev=1434645&r1=1434644&r2=1434645&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/DisposalInjectedComponentTest.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/DisposalInjectedComponentTest.java
 Thu Jan 17 12:38:40 2013
@@ -46,9 +46,9 @@ public class DisposalInjectedComponentTe
         
         Assert.assertNotNull(producedService);
         
-        Object object = getInstance(ServiceImpl1.class);
+        IService service = getInstance(IService.class);
 
-        Assert.assertTrue(object instanceof ServiceImpl1);
+        Assert.assertEquals("ServiceImpl1", service.service());
 
         DisposalMethodComponent mc = 
getInstance(DisposalMethodComponent.class);
 


Reply via email to