Author: akazakov
Date: 2010-05-14 08:08:31 -0400 (Fri, 14 May 2010)
New Revision: 22080
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/SessionBeanAnnotatedDecoratorBroken.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/SessionBeanAnnotatedInterceptorBroken.java
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDIUtil.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDIValidationMessages.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/messages.properties
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/preferences/CDIConfigurationBlock.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/ValidationTest.java
Log:
https://jira.jboss.org/jira/browse/JBIDE-2708 Added new CDI validation rule: bean class of
a session bean is annotated @Interceptor or @Decorator
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDIUtil.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDIUtil.java 2010-05-14
09:43:34 UTC (rev 22079)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDIUtil.java 2010-05-14
12:08:31 UTC (rev 22080)
@@ -254,4 +254,53 @@
}
return declarations;
}
+
+ /**
+ * Returns true if the class bean is a session bean.
+ *
+ * @param bean
+ * @return
+ */
+ public static IAnnotationDeclaration getSessionDeclaration(IClassBean bean) {
+ IAnnotationDeclaration declaration =
bean.getAnnotation(CDIConstants.STATEFUL_ANNOTATION_TYPE_NAME);
+ if(declaration!=null) {
+ return declaration;
+ }
+ declaration = bean.getAnnotation(CDIConstants.STATELESS_ANNOTATION_TYPE_NAME);
+ if(declaration!=null) {
+ return declaration;
+ }
+ declaration = bean.getAnnotation(CDIConstants.SINGLETON_ANNOTATION_TYPE_NAME);
+ return declaration;
+ }
+
+ /**
+ * Returns true if the class bean is a session bean.
+ *
+ * @param bean
+ * @return
+ */
+ public static boolean isSessionBean(IBean bean) {
+ return bean instanceof ISessionBean || (bean instanceof IClassBean &&
(bean.getAnnotation(CDIConstants.STATEFUL_ANNOTATION_TYPE_NAME)!=null ||
bean.getAnnotation(CDIConstants.STATELESS_ANNOTATION_TYPE_NAME)!=null ||
bean.getAnnotation(CDIConstants.SINGLETON_ANNOTATION_TYPE_NAME)!=null));
+ }
+
+ /**
+ * Returns true if the class bean is a decorator.
+ *
+ * @param bean
+ * @return
+ */
+ public static boolean isDecorator(IBean bean) {
+ return bean instanceof IDecorator || (bean instanceof IClassBean &&
bean.getAnnotation(CDIConstants.DECORATOR_STEREOTYPE_TYPE_NAME)!=null);
+ }
+
+ /**
+ * Returns true if the class bean is an interceptor.
+ *
+ * @param bean
+ * @return
+ */
+ public static boolean isInterceptor(IBean bean) {
+ return bean instanceof IInterceptor || (bean instanceof IClassBean &&
bean.getAnnotation(CDIConstants.INTERCEPTOR_ANNOTATION_TYPE_NAME)!=null);
+ }
}
\ No newline at end of file
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java 2010-05-14
09:43:34 UTC (rev 22079)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java 2010-05-14
12:08:31 UTC (rev 22080)
@@ -229,7 +229,6 @@
validateStereotype(type);
}
- // TODO
return OK_STATUS;
}
@@ -248,8 +247,6 @@
}
IStereotype stereotype = cdiProject.getStereotype(file.getFullPath());
validateStereotype(stereotype);
-
- // TODO
}
/**
@@ -306,8 +303,6 @@
if(bean instanceof IClassBean) {
validateClassBean((IClassBean)bean);
}
-
- // TODO
}
private void validateClassBean(IClassBean bean) {
@@ -317,6 +312,7 @@
} else {
validateSessionBean((ISessionBean)bean);
}
+ validateMixedClassBean(bean);
}
private void validateDisposers(IClassBean bean) {
@@ -705,6 +701,36 @@
}
}
+ /**
+ * Validates class bean which may be both a session and decorator (or interceptor).
+ *
+ * @param bean
+ */
+ private void validateMixedClassBean(IClassBean bean) {
+ ITextSourceReference sessionDeclaration = CDIUtil.getSessionDeclaration(bean);
+ ITextSourceReference decoratorDeclaration =
bean.getAnnotation(CDIConstants.DECORATOR_STEREOTYPE_TYPE_NAME);
+ ITextSourceReference interceptorDeclaration =
bean.getAnnotation(CDIConstants.INTERCEPTOR_ANNOTATION_TYPE_NAME);
+
+ if(sessionDeclaration!=null) {
+ /*
+ * 3.2. Session beans
+ * - bean class of a session bean is annotated @Decorator
+ */
+ if(decoratorDeclaration!=null) {
+ addError(CDIValidationMessages.SESSION_BEAN_ANNOTATED_DECORATOR,
CDIPreferences.SESSION_BEAN_ANNOTATED_INTERCEPTOR_OR_DECORATOR, sessionDeclaration,
bean.getResource());
+ addError(CDIValidationMessages.SESSION_BEAN_ANNOTATED_DECORATOR,
CDIPreferences.SESSION_BEAN_ANNOTATED_INTERCEPTOR_OR_DECORATOR, decoratorDeclaration,
bean.getResource());
+ }
+ /*
+ * 3.2. Session beans
+ * - bean class of a session bean is annotated @Interceptor
+ */
+ if(interceptorDeclaration!=null) {
+ addError(CDIValidationMessages.SESSION_BEAN_ANNOTATED_INTERCEPTOR,
CDIPreferences.SESSION_BEAN_ANNOTATED_INTERCEPTOR_OR_DECORATOR, sessionDeclaration,
bean.getResource());
+ addError(CDIValidationMessages.SESSION_BEAN_ANNOTATED_INTERCEPTOR,
CDIPreferences.SESSION_BEAN_ANNOTATED_INTERCEPTOR_OR_DECORATOR, interceptorDeclaration,
bean.getResource());
+ }
+ }
+ }
+
private void validateSessionBean(ISessionBean bean) {
if(bean.isStateless()) {
/*
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDIValidationMessages.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDIValidationMessages.java 2010-05-14
09:43:34 UTC (rev 22079)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDIValidationMessages.java 2010-05-14
12:08:31 UTC (rev 22080)
@@ -70,7 +70,8 @@
public static String ILLEGAL_CONDITIONAL_OBSERVER;
public static String BOTH_INTERCEPTOR_AND_DECORATOR;
- public static String SESSION_BEAN_ANNOTATED_INTERCEPTOR_OR_DECORATOR;
+ public static String SESSION_BEAN_ANNOTATED_INTERCEPTOR;
+ public static String SESSION_BEAN_ANNOTATED_DECORATOR;
public static String PRODUCER_IN_INTERCEPTOR;
public static String PRODUCER_IN_DECORATOR;
public static String DISPOSER_IN_INTERCEPTOR;
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/messages.properties
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/messages.properties 2010-05-14
09:43:34 UTC (rev 22079)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/messages.properties 2010-05-14
12:08:31 UTC (rev 22080)
@@ -49,7 +49,8 @@
ILLEGAL_CONDITIONAL_OBSERVER=Bean with scope @Dependent has an observer method declared
receive=IF_EXISTS
BOTH_INTERCEPTOR_AND_DECORATOR=The bean class of a managed bean is annotated with both
the @Interceptor and @Decorator stereotypes
-SESSION_BEAN_ANNOTATED_INTERCEPTOR_OR_DECORATOR=Bean class of a session bean is annotated
@Interceptor or @Decorator
+SESSION_BEAN_ANNOTATED_INTERCEPTOR=Bean class of a session bean is annotated
@Interceptor
+SESSION_BEAN_ANNOTATED_DECORATOR=Bean class of a session bean is annotated @Decorator
PRODUCER_IN_INTERCEPTOR=Interceptor has a member annotated @Produces
PRODUCER_IN_DECORATOR=Decorator has a member annotated @Produces
DISPOSER_IN_INTERCEPTOR=Interceptor has a method annotated @Disposes
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/preferences/CDIConfigurationBlock.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/preferences/CDIConfigurationBlock.java 2010-05-14
09:43:34 UTC (rev 22079)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/preferences/CDIConfigurationBlock.java 2010-05-14
12:08:31 UTC (rev 22080)
@@ -101,7 +101,7 @@
CDIPreferencesMessages.CDIValidatorConfigurationBlock_section_interceptor_and_decorator,
new String[][]{
{CDIPreferences.BOTH_INTERCEPTOR_AND_DECORATOR,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_bothInterceptorAndDecorator_label},
-// {CDIPreferences.SESSION_BEAN_ANNOTATED_INTERCEPTOR_OR_DECORATOR,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_sessionBeanAnnotatedInterceptorOrDecorator_label},
+ {CDIPreferences.SESSION_BEAN_ANNOTATED_INTERCEPTOR_OR_DECORATOR,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_sessionBeanAnnotatedInterceptorOrDecorator_label},
// {CDIPreferences.PRODUCER_IN_INTERCEPTOR_OR_DECORATOR,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_producerInInterceptorOrDecorator_label},
{CDIPreferences.DISPOSER_IN_INTERCEPTOR_OR_DECORATOR,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_disposerInInterceptorOrDecorator_label},
// {CDIPreferences.MULTIPLE_DELEGATE,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_multipleDelegate_label},
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/SessionBeanAnnotatedDecoratorBroken.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/SessionBeanAnnotatedDecoratorBroken.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/SessionBeanAnnotatedDecoratorBroken.java 2010-05-14
12:08:31 UTC (rev 22080)
@@ -0,0 +1,10 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.sessionbeans;
+
+import javax.decorator.Decorator;
+import javax.ejb.Stateless;
+
+@Decorator
+@Stateless
+public class SessionBeanAnnotatedDecoratorBroken {
+
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/SessionBeanAnnotatedDecoratorBroken.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/SessionBeanAnnotatedInterceptorBroken.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/SessionBeanAnnotatedInterceptorBroken.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/SessionBeanAnnotatedInterceptorBroken.java 2010-05-14
12:08:31 UTC (rev 22080)
@@ -0,0 +1,15 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.sessionbeans;
+
+import javax.ejb.Singleton;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+
+@Interceptor
+@Singleton
+public class SessionBeanAnnotatedInterceptorBroken {
+ @AroundInvoke
+ public Object alwaysReturnThis(InvocationContext ctx) throws Exception {
+ return ctx.proceed();
+ }
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/SessionBeanAnnotatedInterceptorBroken.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/ValidationTest.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/ValidationTest.java 2010-05-14
09:43:34 UTC (rev 22079)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/ValidationTest.java 2010-05-14
12:08:31 UTC (rev 22080)
@@ -351,6 +351,28 @@
}
/**
+ * 3.2. Session beans
+ * - bean class of a session bean is annotated @Interceptor
+ *
+ * @throws Exception
+ */
+ public void testSessionBeanAnnotatedInterceptor() throws Exception {
+ IFile file =
tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/sessionbeans/SessionBeanAnnotatedInterceptorBroken.java");
+ AbstractResourceMarkerTest.assertMarkerIsCreated(file,
AbstractResourceMarkerTest.MARKER_TYPE,
CDIValidationMessages.SESSION_BEAN_ANNOTATED_INTERCEPTOR, 8, 9);
+ }
+
+ /**
+ * 3.2. Session beans
+ * - bean class of a session bean is annotated @Decorator
+ *
+ * @throws Exception
+ */
+ public void testSessionBeanAnnotatedDecorator() throws Exception {
+ IFile file =
tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/sessionbeans/SessionBeanAnnotatedDecoratorBroken.java");
+ AbstractResourceMarkerTest.assertMarkerIsCreated(file,
AbstractResourceMarkerTest.MARKER_TYPE,
CDIValidationMessages.SESSION_BEAN_ANNOTATED_DECORATOR, 6, 7);
+ }
+
+ /**
* 3.5.1. Declaring a resource
* - producer field declaration specifies an EL name (together with one of @Resource,
@PersistenceContext, @PersistenceUnit, @EJB, @WebServiceRef)
*