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 2012/12/31 16:20:24 UTC
svn commit: r1427146 - in /openwebbeans/trunk/webbeans-impl/src:
main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java
test/java/org/apache/webbeans/newtests/interceptors/factory/InterceptorDecoratorProxyFactoryTest.java
Author: struberg
Date: Mon Dec 31 15:20:23 2012
New Revision: 1427146
URL: http://svn.apache.org/viewvc?rev=1427146&view=rev
Log:
OWB-344 prepare to move business stuff outside of the interceptor class generator
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/InterceptorDecoratorProxyFactoryTest.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java?rev=1427146&r1=1427145&r2=1427146&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java Mon Dec 31 15:20:23 2012
@@ -105,28 +105,29 @@ public class InterceptorDecoratorProxyFa
/**
* Create a decorator and interceptor proxy for the given type.
*
- * TODO: we also need to pass in the decorator and interceptor stack definition
- * plus the list of methods which are intercepted
- *
- * TODO: create a way to access the internal delegation point for invoking private methods later.
*
* @param classLoader to use for creating the class in
* @param classToProxy
+ * @param interceptedMethods the list of intercepted or decorated methods
+ * @param nonInterceptedMethods all methods which are <b>not</b> intercepted nor decorated and shall get delegated directly
* @param <T>
* @return the proxy class
*/
- public synchronized <T> Class<T> createInterceptorDecoratorProxyClass(ClassLoader classLoader, Class<T> classToProxy)
+ public synchronized <T> Class<T> createProxyClass(ClassLoader classLoader, Class<T> classToProxy,
+ List<Method> interceptedMethods, List<Method> nonInterceptedMethods)
throws ProxyGenerationException
{
String proxyClassName = classToProxy.getName() + "$OwbInterceptProxy";
String proxyClassFileName = proxyClassName.replace('.', '/');
- final byte[] proxyBytes = generateProxy(classToProxy, proxyClassName, proxyClassFileName);
+ final byte[] proxyBytes = generateProxy(classToProxy, proxyClassName, proxyClassFileName, interceptedMethods, nonInterceptedMethods);
+
return defineAndLoadClass(classLoader, proxyClassName, proxyBytes);
}
- private byte[] generateProxy(Class<?> classToProxy, String proxyClassName, String proxyClassFileName)
+ private byte[] generateProxy(Class<?> classToProxy, String proxyClassName, String proxyClassFileName,
+ List<Method> interceptedMethods, List<Method> nonInterceptedMethods)
throws ProxyGenerationException
{
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
@@ -210,6 +211,10 @@ public class InterceptorDecoratorProxyFa
}
+ /**
+ * @deprecated move this method to some other place. The proxy should get the list of methods from outside.
+ * Otherwise we would drag in business logic into the purely technical interceptor code.
+ */
private Map<String, List<Method>> getNonPrivateMethods(Class<?> clazz)
{
Map<String, List<Method>> methodMap = new HashMap<String, List<Method>>();
@@ -260,6 +265,9 @@ public class InterceptorDecoratorProxyFa
return methodMap;
}
+ /**
+ * @deprecated see explanation in {@link #getNonPrivateMethods(Class)}
+ */
private boolean isOverridden(final List<Method> methods, final Method method)
{
for (final Method m : methods)
Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/InterceptorDecoratorProxyFactoryTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/InterceptorDecoratorProxyFactoryTest.java?rev=1427146&r1=1427145&r2=1427146&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/InterceptorDecoratorProxyFactoryTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/factory/InterceptorDecoratorProxyFactoryTest.java Mon Dec 31 15:20:23 2012
@@ -46,7 +46,7 @@ public class InterceptorDecoratorProxyFa
ClassLoader classLoader = this.getClass().getClassLoader();
- Class<ClassInterceptedClass> proxyClass = pf.createInterceptorDecoratorProxyClass(classLoader, ClassInterceptedClass.class);
+ Class<ClassInterceptedClass> proxyClass = pf.createProxyClass(classLoader, ClassInterceptedClass.class, null, null);
Assert.assertNotNull(proxyClass);
ClassInterceptedClass proxy = pf.createProxyInstance(proxyClass, new ClassInterceptedClass(), null);