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/21 11:35:22 UTC
svn commit: r1436265 - in /openwebbeans/trunk/webbeans-impl/src:
main/java/org/apache/webbeans/intercept/
main/java/org/apache/webbeans/proxy/ main/java/org/apache/webbeans/util/
test/java/org/apache/webbeans/newtests/ test/java/org/apache/webbeans/new...
Author: struberg
Date: Mon Jan 21 10:35:21 2013
New Revision: 1436265
URL: http://svn.apache.org/viewvc?rev=1436265&view=rev
Log:
OWB-344 fix for TCK: detect decoration of final method and throw deployment error
Added:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/FinalMethodDecoratedBean.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/SomeBrokenDecorated.java (contents, props changed)
- copied, changed from r1436233, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/BrokenBean.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/ValidDecorator.java
Removed:
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/BrokenBean.java
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/NormalScopeProxyFactory.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/SubclassProxyFactory.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/AbstractUnitTest.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/BrokenAlternative.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/BrokenScope.java
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/BrokenDecoratorTest.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/intercept/InterceptorResolutionService.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorResolutionService.java?rev=1436265&r1=1436264&r2=1436265&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 Mon Jan 21 10:35:21 2013
@@ -116,7 +116,7 @@ public class InterceptorResolutionServic
// pick up EJB-style interceptors from a class level
List<Interceptor<?>> classLevelEjbInterceptors = new ArrayList<Interceptor<?>>();
- collectEjbInterceptors(classLevelEjbInterceptors, annotatedType);
+ collectEjbInterceptors(classLevelEjbInterceptors, annotatedType, false);
// pick up the decorators
List<Decorator<?>> decorators = beanManager.resolveDecorators(beanTypes, AnnotationUtil.asArray(qualifiers));
@@ -274,11 +274,16 @@ public class InterceptorResolutionServic
}
}
- private <T> void collectEjbInterceptors(List<Interceptor<?>> ejbInterceptors, Annotated annotatedType)
+ private <T> void collectEjbInterceptors(List<Interceptor<?>> ejbInterceptors, Annotated annotated, boolean unproxyable)
{
- Interceptors interceptorsAnnot = annotatedType.getAnnotation(Interceptors.class);
+ Interceptors interceptorsAnnot = annotated.getAnnotation(Interceptors.class);
if (interceptorsAnnot != null)
{
+ if (unproxyable)
+ {
+ throw new WebBeansConfigurationException(annotated + " is not proxyable, but an Interceptor got defined on it!");
+ }
+
for (Class interceptorClass : interceptorsAnnot.value())
{
Interceptor ejbInterceptor = webBeansContext.getInterceptorsManager().getEjbInterceptorForClass(interceptorClass);
@@ -290,9 +295,11 @@ public class InterceptorResolutionServic
private void calculateEjbMethodInterceptors(BusinessMethodInterceptorInfo methodInterceptorInfo, Set<Interceptor<?>> allUsedEjbInterceptors,
List<Interceptor<?>> classLevelEjbInterceptors, AnnotatedMethod annotatedMethod)
{
+ boolean unproxyable = isUnproxyable(annotatedMethod);
+
List<Interceptor<?>> methodInterceptors = new ArrayList<Interceptor<?>>();
- if (classLevelEjbInterceptors != null && classLevelEjbInterceptors.size() > 0)
+ if (classLevelEjbInterceptors != null && classLevelEjbInterceptors.size() > 0 && !unproxyable)
{
// add the class level defined Interceptors first
@@ -304,7 +311,7 @@ public class InterceptorResolutionServic
}
}
- collectEjbInterceptors(methodInterceptors, annotatedMethod);
+ collectEjbInterceptors(methodInterceptors, annotatedMethod, unproxyable);
allUsedEjbInterceptors.addAll(methodInterceptors);
if (methodInterceptors.size() > 0)
@@ -313,6 +320,12 @@ public class InterceptorResolutionServic
}
}
+ private boolean isUnproxyable(AnnotatedMethod annotatedMethod)
+ {
+ int modifiers = annotatedMethod.getJavaMember().getModifiers();
+ return Modifier.isFinal(modifiers) || Modifier.isPrivate(modifiers);
+ }
+
private void calculateCdiMethodDecorators(BusinessMethodInterceptorInfo methodInterceptorInfo, List<Decorator<?>> decorators, AnnotatedMethod annotatedMethod)
{
@@ -328,6 +341,11 @@ public class InterceptorResolutionServic
Method decoratingMethod = getDecoratingMethod(decorator, annotatedMethod);
if (decoratingMethod != null)
{
+ if (isUnproxyable(annotatedMethod))
+ {
+ throw new WebBeansConfigurationException(annotatedMethod + " is not proxyable, but an Decorator got defined on it!");
+ }
+
appliedDecorators.put(decorator, decoratingMethod);
}
}
@@ -447,10 +465,26 @@ public class InterceptorResolutionServic
{
AnnotationManager annotationManager = webBeansContext.getAnnotationManager();
+ boolean unproxyable = isUnproxyable(annotatedMethod);
+
Set<Annotation> cummulatedInterceptorBindings = new HashSet<Annotation>();
cummulatedInterceptorBindings.addAll(
annotationManager.getInterceptorAnnotations(annotatedMethod.getAnnotations()));
+ if (unproxyable && cummulatedInterceptorBindings.size() > 0)
+ {
+ if (unproxyable)
+ {
+ throw new WebBeansConfigurationException(annotatedMethod + " is not proxyable, but an Interceptor got defined on it!");
+ }
+ }
+
+ if (unproxyable)
+ {
+ // don't apply class level interceptors - instead just return
+ return;
+ }
+
cummulatedInterceptorBindings.addAll(classInterceptorBindings);
if (cummulatedInterceptorBindings.size() == 0)
@@ -517,7 +551,7 @@ public class InterceptorResolutionServic
*/
private List<AnnotatedMethod> getInterceptableBusinessMethods(AnnotatedType annotatedType)
{
- List<Method> interceptableMethods = ClassUtil.getNonPrivateMethods(annotatedType.getJavaClass());
+ List<Method> interceptableMethods = ClassUtil.getNonPrivateMethods(annotatedType.getJavaClass(), false);
List<AnnotatedMethod> interceptableAnnotatedMethods = new ArrayList<AnnotatedMethod>();
@@ -528,7 +562,8 @@ public class InterceptorResolutionServic
{
if (annotatedMethod.getJavaMember().equals(interceptableMethod))
{
- if (!webBeansContext.getInterceptorUtil().isWebBeansBusinessMethod(annotatedMethod))
+ int modifiers = annotatedMethod.getJavaMember().getModifiers();
+ if (Modifier.isPrivate(modifiers) || Modifier.isStatic(modifiers))
{
// we must only intercept business methods
continue;
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java?rev=1436265&r1=1436264&r2=1436265&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorUtil.java Mon Jan 21 10:35:21 2013
@@ -36,11 +36,6 @@ import org.apache.webbeans.util.Asserts;
public final class InterceptorUtil
{
- /**
- * all the bit flags of private static and final modifiers
- */
- public static final int MODIFIER_STATIC_FINAL_PRIVATE = Modifier.STATIC | Modifier.FINAL | Modifier.PRIVATE;
-
private final WebBeansContext webBeansContext;
public InterceptorUtil(WebBeansContext webBeansContext)
@@ -96,26 +91,6 @@ public final class InterceptorUtil
return lifecycleMethods;
}
- /**
- * Check if the given method is a 'business method'
- * in the sense of the Interceptor specification
- * @param annotatedMethod
- * @return <code>true</code> if the given method is an interceptable business method
- */
- public boolean isWebBeansBusinessMethod(AnnotatedMethod annotatedMethod)
- {
- Method method = annotatedMethod.getJavaMember();
- int modifiers = method.getModifiers();
-
- if ((modifiers & MODIFIER_STATIC_FINAL_PRIVATE) != 0)
- {
- // static, final and private methods are NO business methods!
- return false;
- }
-
- return true;
- }
-
public void checkSimpleWebBeansInterceptorConditions(Class<?> clazz)
{
Asserts.nullCheckForClass(clazz);
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java?rev=1436265&r1=1436264&r2=1436265&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java Mon Jan 21 10:35:21 2013
@@ -58,11 +58,13 @@ public final class WebBeansInterceptorCo
}
/**
+ * TODO: move this method to some other, better place!
+ *
+ * Configure bean instance interceptor stack.
+ *
* This method gets invoked in the ValidateBean phase and will fill all the
* interceptor information into the given InjectionTargetBean
*
- * TODO: move this method to some other, better place!
- * Configure bean instance interceptor stack.
* @param bean bean instance
*/
public void defineBeanInterceptorStack(InjectionTargetBean<?> bean)
@@ -73,10 +75,7 @@ public final class WebBeansInterceptorCo
BeanInterceptorInfo interceptorInfo = webBeansContext.getInterceptorResolutionService().
calculateInterceptorInfo(bean.getTypes(), bean.getQualifiers(), bean.getAnnotatedType());
- //X TODO decorator stack
-
Map<Method, List<Interceptor<?>>> methodInterceptors = new HashMap<Method, List<Interceptor<?>>>();
- List<Method> nonBusinessMethods = new ArrayList<Method>();
for (Map.Entry<Method, BusinessMethodInterceptorInfo> miEntry : interceptorInfo.getBusinessMethodsInfo().entrySet())
{
Method interceptedMethod = miEntry.getKey();
@@ -138,10 +137,7 @@ public final class WebBeansInterceptorCo
injectionTarget.setInterceptorInfo(interceptorInfo, proxyClass, methodInterceptors, postConstructInterceptors, preDestroyInterceptors);
}
- else // we have no interceptors so we have to define lifecycle methods
- {
-
- }
+
}
}
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=1436265&r1=1436264&r2=1436265&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 Jan 21 10:35:21 2013
@@ -25,6 +25,7 @@ import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.util.ExceptionUtil;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.Label;
@@ -330,6 +331,12 @@ public class InterceptorDecoratorProxyFa
final Class<?>[] exceptionTypes = method.getExceptionTypes();
final int modifiers = method.getModifiers();
+ if (Modifier.isFinal(modifiers) || Modifier.isStatic(modifiers))
+ {
+ throw new WebBeansConfigurationException("It's not possible to proxy a final or static method: " + classToProxy.getName() +
+ " " + method.getName());
+ }
+
// push the method definition
int modifier = modifiers & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED);
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=1436265&r1=1436264&r2=1436265&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 Mon Jan 21 10:35:21 2013
@@ -202,7 +202,7 @@ public class NormalScopeProxyFactory ext
}
else
{
- List<Method> methods = ClassUtil.getNonPrivateMethods(classToProxy);
+ List<Method> methods = ClassUtil.getNonPrivateMethods(classToProxy, true);
nonInterceptedMethods = methods.toArray(new Method[methods.size()]);
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/SubclassProxyFactory.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/SubclassProxyFactory.java?rev=1436265&r1=1436264&r2=1436265&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/SubclassProxyFactory.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/SubclassProxyFactory.java Mon Jan 21 10:35:21 2013
@@ -107,7 +107,7 @@ public class SubclassProxyFactory extend
String proxyClassName = getSubClassName(classToProxy);
- List<Method> methods = ClassUtil.getNonPrivateMethods(classToProxy);
+ List<Method> methods = ClassUtil.getNonPrivateMethods(classToProxy, true);
Method[] businessMethods = methods.toArray(new Method[methods.size()]);
clazz = createProxyClass(classLoader, proxyClassName, classToProxy, businessMethods, new Method[0]);
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java?rev=1436265&r1=1436264&r2=1436265&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/ClassUtil.java Mon Jan 21 10:35:21 2013
@@ -241,7 +241,7 @@ public final class ClassUtil
*
* Note: we filter out the {@link Object#finalize()} method as users must not deal with it
*/
- public static List<Method> getNonPrivateMethods(Class<?> clazz)
+ public static List<Method> getNonPrivateMethods(Class<?> clazz, boolean noFinalMethods)
{
Map<String, List<Method>> methodMap = new HashMap<String, List<Method>>();
List<Method> allMethods = new ArrayList<Method>(10);
@@ -252,8 +252,11 @@ public final class ClassUtil
{
final int modifiers = method.getModifiers();
- if (Modifier.isFinal(modifiers) || Modifier.isPrivate(modifiers) ||
- Modifier.isStatic(modifiers) || Modifier.isAbstract(modifiers))
+ if (Modifier.isPrivate(modifiers) || Modifier.isStatic(modifiers) || Modifier.isAbstract(modifiers))
+ {
+ continue;
+ }
+ if (noFinalMethods && Modifier.isFinal(modifiers))
{
continue;
}
Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/AbstractUnitTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/AbstractUnitTest.java?rev=1436265&r1=1436264&r2=1436265&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/AbstractUnitTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/AbstractUnitTest.java Mon Jan 21 10:35:21 2013
@@ -74,7 +74,7 @@ public abstract class AbstractUnitTest
protected void startContainer(Class<?>... beanClasses)
{
- startContainer(Arrays.asList(beanClasses), null);
+ startContainer(new ArrayList<Class<?>>(Arrays.asList(beanClasses)), null);
}
protected void startContainer(Collection<Class<?>> beanClasses)
Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/BrokenAlternative.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/BrokenAlternative.java?rev=1436265&r1=1436264&r2=1436265&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/BrokenAlternative.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/BrokenAlternative.java Mon Jan 21 10:35:21 2013
@@ -32,8 +32,7 @@ public class BrokenAlternative implement
@Override
public void broke()
{
- // TODO Auto-generated method stub
-
+
}
}
Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/BrokenScope.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/BrokenScope.java?rev=1436265&r1=1436264&r2=1436265&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/BrokenScope.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/BrokenScope.java Mon Jan 21 10:35:21 2013
@@ -28,7 +28,7 @@ import javax.inject.Inject;
@RequestScoped
public class BrokenScope implements IBroken
{
- private @Inject @Delegate IBroken borken;
+ private @Inject @Delegate IBroken broken;
@Override
public void broke()
Added: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/FinalMethodDecoratedBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/FinalMethodDecoratedBean.java?rev=1436265&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/FinalMethodDecoratedBean.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/FinalMethodDecoratedBean.java Mon Jan 21 10:35:21 2013
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.webbeans.newtests.decorators.broken;
+
+/**
+ *
+ */
+public class FinalMethodDecoratedBean implements IBroken
+{
+ @Override
+ public final void broke()
+ {
+ System.out.println("this should not get reached at all!");
+ }
+}
Copied: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/SomeBrokenDecorated.java (from r1436233, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/BrokenBean.java)
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/SomeBrokenDecorated.java?p2=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/SomeBrokenDecorated.java&p1=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/BrokenBean.java&r1=1436233&r2=1436265&rev=1436265&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/BrokenBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/SomeBrokenDecorated.java Mon Jan 21 10:35:21 2013
@@ -18,7 +18,7 @@
*/
package org.apache.webbeans.newtests.decorators.broken;
-public class BrokenBean implements IBroken
+public class SomeBrokenDecorated implements IBroken
{
@Override
Propchange: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/SomeBrokenDecorated.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/ValidDecorator.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/ValidDecorator.java?rev=1436265&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/ValidDecorator.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/broken/ValidDecorator.java Mon Jan 21 10:35:21 2013
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.webbeans.newtests.decorators.broken;
+
+import javax.decorator.Decorator;
+import javax.decorator.Delegate;
+import javax.inject.Inject;
+
+/**
+ * In this test not the decorator is broken, but the decorated bean is.
+ */
+@Decorator
+public class ValidDecorator implements IBroken
+{
+ @Inject
+ @Delegate
+ private IBroken broken;
+
+ @Override
+ public void broke()
+ {
+ broken.broke();
+ }
+}
Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/BrokenDecoratorTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/BrokenDecoratorTest.java?rev=1436265&r1=1436264&r2=1436265&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/BrokenDecoratorTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/tests/BrokenDecoratorTest.java Mon Jan 21 10:35:21 2013
@@ -21,11 +21,16 @@ package org.apache.webbeans.newtests.dec
import java.util.ArrayList;
import java.util.Collection;
+import org.apache.webbeans.exception.WebBeansConfigurationException;
import org.apache.webbeans.newtests.AbstractUnitTest;
import org.apache.webbeans.newtests.decorators.broken.BrokenAlternative;
-import org.apache.webbeans.newtests.decorators.broken.BrokenBean;
+import org.apache.webbeans.newtests.decorators.broken.FinalMethodDecoratedBean;
+import org.apache.webbeans.newtests.decorators.broken.SomeBrokenDecorated;
import org.apache.webbeans.newtests.decorators.broken.BrokenName;
import org.apache.webbeans.newtests.decorators.broken.BrokenScope;
+import org.apache.webbeans.newtests.decorators.broken.ValidDecorator;
+
+import org.junit.Assert;
import org.junit.Test;
public class BrokenDecoratorTest extends AbstractUnitTest
@@ -36,17 +41,28 @@ public class BrokenDecoratorTest extends
public void testWarnings()
{
Collection<Class<?>> classes = new ArrayList<Class<?>>();
- classes.add(BrokenBean.class);
+ classes.add(SomeBrokenDecorated.class);
classes.add(BrokenScope.class);
classes.add(BrokenAlternative.class);
classes.add(BrokenName.class);
Collection<String> xmls = new ArrayList<String>();
xmls.add(getXmlPath(PACKAGE_NAME, "BrokenDecoratorTest"));
-
- startContainer(classes,xmls);
-
+
+ startContainer(classes, xmls);
+
+
+
shutDownContainer();
-
+ }
+
+ @Test(expected = WebBeansConfigurationException.class)
+ public void testDecoratingFinalMethod() throws Exception
+ {
+ addDecorator(ValidDecorator.class);
+
+ startContainer(FinalMethodDecoratedBean.class);
+
+ Assert.fail("this point should not get reached because we had a final method decorated");
}
}
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=1436265&r1=1436264&r2=1436265&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 Jan 21 10:35:21 2013
@@ -53,7 +53,7 @@ public class InterceptorDecoratorProxyFa
// we take a fresh URLClassLoader to not blur the test classpath with synthetic classes.
ClassLoader classLoader = new URLClassLoader(new URL[0]);
- List<Method> methods = ClassUtil.getNonPrivateMethods(ClassInterceptedClass.class);
+ List<Method> methods = ClassUtil.getNonPrivateMethods(ClassInterceptedClass.class, true);
Method[] interceptedMethods = methods.toArray(new Method[methods.size()]);
Method[] nonInterceptedMethods = null;