Author: arne
Date: Sat Jan 19 08:50:08 2013
New Revision: 1435507
URL: http://svn.apache.org/viewvc?rev=1435507&view=rev
Log:
OWB-344: Fixed resolution of generic delegate points
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/DecoratorProxyFactory.java
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java?rev=1435507&r1=1435506&r2=1435507&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
Sat Jan 19 08:50:08 2013
@@ -32,6 +32,7 @@ import javax.interceptor.Interceptors;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collections;
@@ -319,6 +320,10 @@ public class InterceptorResolutionServic
Set<Type> decoratedTypes = decorator.getDecoratedTypes();
for (Type decoratedType : decoratedTypes)
{
+ if (decoratedType instanceof ParameterizedType) {
+ ParameterizedType parameterizedType =
(ParameterizedType)decoratedType;
+ decoratedType = parameterizedType.getRawType();
+ }
if (decoratedType instanceof Class)
{
Class decoratedClass = (Class) decoratedType;
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/DecoratorProxyFactory.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/DecoratorProxyFactory.java?rev=1435507&r1=1435506&r2=1435507&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/DecoratorProxyFactory.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/DecoratorProxyFactory.java
Sat Jan 19 08:50:08 2013
@@ -161,9 +161,9 @@ public class DecoratorProxyFactory exten
{
T proxy = proxyClass.newInstance();
- Field delegateField =
proxy.getClass().getDeclaredField(FIELD_INSTANCE_PROVIDER);
- delegateField.setAccessible(true);
- delegateField.set(proxy, provider);
+// Field delegateField =
proxy.getClass().getDeclaredField(FIELD_INSTANCE_PROVIDER);
+// delegateField.setAccessible(true);
+// delegateField.set(proxy, provider);
return proxy;
}
@@ -175,10 +175,10 @@ public class DecoratorProxyFactory exten
{
throw new ProxyGenerationException(e);
}
- catch (NoSuchFieldException e)
- {
- throw new ProxyGenerationException(e);
- }
+// catch (NoSuchFieldException e)
+// {
+// throw new ProxyGenerationException(e);
+// }
}
@@ -208,7 +208,7 @@ public class DecoratorProxyFactory exten
mv.visitVarInsn(Opcodes.ALOAD, 0);
mv.visitInsn(Opcodes.ACONST_NULL);
- mv.visitFieldInsn(Opcodes.PUTFIELD, proxyClassFileName,
FIELD_INSTANCE_PROVIDER, Type.getDescriptor(Provider.class));
+// mv.visitFieldInsn(Opcodes.PUTFIELD, proxyClassFileName,
FIELD_INSTANCE_PROVIDER, Type.getDescriptor(Provider.class));
mv.visitInsn(Opcodes.RETURN);
mv.visitMaxs(-1, -1);
@@ -224,8 +224,8 @@ public class DecoratorProxyFactory exten
protected void createInstanceVariables(ClassWriter cw, Class<?>
classToProxy, String classFileName)
{
// variable #1, the Provider<?> for the Contextual Instance
- cw.visitField(Opcodes.ACC_PRIVATE,
- FIELD_INSTANCE_PROVIDER, Type.getDescriptor(Provider.class),
null, null).visitEnd();
+// cw.visitField(Opcodes.ACC_PRIVATE,
+// FIELD_INSTANCE_PROVIDER, Type.getDescriptor(Provider.class),
null, null).visitEnd();
}
@Override
@@ -263,7 +263,7 @@ public class DecoratorProxyFactory exten
// load the contextual instance Provider
mv.visitVarInsn(Opcodes.ALOAD, 0);
- mv.visitFieldInsn(Opcodes.GETFIELD, proxyClassFileName,
FIELD_INSTANCE_PROVIDER, Type.getDescriptor(Provider.class));
+// mv.visitFieldInsn(Opcodes.GETFIELD, proxyClassFileName,
FIELD_INSTANCE_PROVIDER, Type.getDescriptor(Provider.class));
// invoke the get() method on the Provider
mv.visitMethodInsn(Opcodes.INVOKEINTERFACE,
Type.getInternalName(Provider.class), "get", "()Ljava/lang/Object;");