You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2013/01/17 13:38:40 UTC
svn commit: r1434645 - in /openwebbeans/trunk/webbeans-impl/src:
main/java/org/apache/webbeans/proxy/
test/java/org/apache/webbeans/test/unittests/inject/
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);