Author: akazakov
Date: 2010-05-14 08:44:22 -0400 (Fri, 14 May 2010)
New Revision: 22085
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/FooBroken.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/LocalFoo.java
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/CDIValidationMessages.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/messages.properties
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: session bean
with a parameterized bean class declares any scope other than @Dependent
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
12:34:39 UTC (rev 22084)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java 2010-05-14
12:44:22 UTC (rev 22085)
@@ -732,29 +732,44 @@
}
private void validateSessionBean(ISessionBean bean) {
- if(bean.isStateless()) {
- /*
- * 3.2. Session beans
- * - session bean specifies an illegal scope
- * (a stateless session bean must belong to the @Dependent pseudo-scope)
- */
- ITextSourceReference declaration =
CDIUtil.getDifferentScopeDeclarationThanDepentend(bean);
- if(declaration!=null) {
- addError(CDIValidationMessages.ILLEGAL_SCOPE_FOR_STATELESS_SESSION_BEAN,
CDIPreferences.ILLEGAL_SCOPE_FOR_SESSION_BEAN, declaration, bean.getResource());
+ IAnnotationDeclaration declaration =
CDIUtil.getDifferentScopeDeclarationThanDepentend(bean);
+ if(declaration!=null) {
+ IType type = bean.getBeanClass();
+ try {
+ /*
+ * 3.2. Session beans
+ * - session bean with a parameterized bean class declares any scope other than
@Dependent
+ */
+ String[] typeVariables = type.getTypeParameterSignatures();
+ if(typeVariables.length>0) {
+ addError(CDIValidationMessages.ILLEGAL_SCOPE_FOR_SESSION_BEAN_WITH_GENERIC_TYPE,
CDIPreferences.ILLEGAL_SCOPE_FOR_SESSION_BEAN, declaration, bean.getResource());
+ } else {
+ if(bean.isStateless()) {
+ /*
+ * 3.2. Session beans
+ * - session bean specifies an illegal scope
+ * (a stateless session bean must belong to the @Dependent pseudo-scope)
+ */
+ if(declaration!=null) {
+ addError(CDIValidationMessages.ILLEGAL_SCOPE_FOR_STATELESS_SESSION_BEAN,
CDIPreferences.ILLEGAL_SCOPE_FOR_SESSION_BEAN, declaration, bean.getResource());
+ }
+ } else if(bean.isSingleton()) {
+ /*
+ * 3.2. Session beans
+ * - session bean specifies an illegal scope
+ * (a singleton bean must belong to either the @ApplicationScoped scope or to the
@Dependent pseudo-scope)
+ */
+ if(declaration!=null) {
+ declaration = CDIUtil.getDifferentScopeDeclarationThanApplicationScoped(bean);
+ }
+ if(declaration!=null) {
+ addError(CDIValidationMessages.ILLEGAL_SCOPE_FOR_SINGLETON_SESSION_BEAN,
CDIPreferences.ILLEGAL_SCOPE_FOR_SESSION_BEAN, declaration, bean.getResource());
+ }
+ }
+ }
+ } catch (JavaModelException e) {
+ CDICorePlugin.getDefault().logError(e);
}
- } else if(bean.isSingleton()) {
- /*
- * 3.2. Session beans
- * - session bean specifies an illegal scope
- * (a singleton bean must belong to either the @ApplicationScoped scope or to the
@Dependent pseudo-scope)
- */
- ITextSourceReference declaration =
CDIUtil.getDifferentScopeDeclarationThanDepentend(bean);
- if(declaration!=null) {
- declaration = CDIUtil.getDifferentScopeDeclarationThanApplicationScoped(bean);
- }
- if(declaration!=null) {
- addError(CDIValidationMessages.ILLEGAL_SCOPE_FOR_SINGLETON_SESSION_BEAN,
CDIPreferences.ILLEGAL_SCOPE_FOR_SESSION_BEAN, declaration, bean.getResource());
- }
}
}
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
12:34:39 UTC (rev 22084)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDIValidationMessages.java 2010-05-14
12:44:22 UTC (rev 22085)
@@ -43,6 +43,7 @@
public static String STEREOTYPE_DECLARES_MORE_THAN_ONE_SCOPE;
public static String ILLEGAL_SCOPE_FOR_MANAGED_BEAN_WITH_PUBLIC_FIELD;
public static String ILLEGAL_SCOPE_FOR_MANAGED_BEAN_WITH_GENERIC_TYPE;
+ public static String ILLEGAL_SCOPE_FOR_SESSION_BEAN_WITH_GENERIC_TYPE;
public static String ILLEGAL_SCOPE_FOR_STATELESS_SESSION_BEAN;
public static String ILLEGAL_SCOPE_FOR_SINGLETON_SESSION_BEAN;
public static String ILLEGAL_SCOPE_FOR_PRODUCER_METHOD;
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
12:34:39 UTC (rev 22084)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/messages.properties 2010-05-14
12:44:22 UTC (rev 22085)
@@ -22,6 +22,7 @@
STEREOTYPE_DECLARES_MORE_THAN_ONE_SCOPE=Stereotype declares more than one scope
ILLEGAL_SCOPE_FOR_MANAGED_BEAN_WITH_PUBLIC_FIELD=Managed bean with a public field
declares any scope other than @Dependent
ILLEGAL_SCOPE_FOR_MANAGED_BEAN_WITH_GENERIC_TYPE=Managed bean with a parameterized bean
class declares any scope other than @Dependent
+ILLEGAL_SCOPE_FOR_SESSION_BEAN_WITH_GENERIC_TYPE=Session bean with a parameterized bean
class declares any scope other than @Dependent
ILLEGAL_SCOPE_FOR_STATELESS_SESSION_BEAN=Session bean specifies an illegal scope. A
stateless session bean must belong to the @Dependent pseudo-scope.
ILLEGAL_SCOPE_FOR_SINGLETON_SESSION_BEAN=Session bean specifies an illegal scope. A
singleton bean must belong to either the @ApplicationScoped scope or to the @Dependent
pseudo-scope.
ILLEGAL_SCOPE_FOR_PRODUCER_METHOD=Producer method with a parameterized return type with a
type variable declares any scope other than @Dependent
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/FooBroken.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/FooBroken.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/FooBroken.java 2010-05-14
12:44:22 UTC (rev 22085)
@@ -0,0 +1,12 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.sessionbeans;
+
+import javax.ejb.Stateful;
+import javax.enterprise.context.RequestScoped;
+
+@RequestScoped
+@Stateful
+class FooBroken<T> implements LocalFoo {
+
+ public void foo() {
+ }
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/FooBroken.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/LocalFoo.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/LocalFoo.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/LocalFoo.java 2010-05-14
12:44:22 UTC (rev 22085)
@@ -0,0 +1,9 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.sessionbeans;
+
+import javax.ejb.Local;
+
+@Local
+public interface LocalFoo {
+
+ void foo();
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/sessionbeans/LocalFoo.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
12:34:39 UTC (rev 22084)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/ValidationTest.java 2010-05-14
12:44:22 UTC (rev 22085)
@@ -373,6 +373,17 @@
}
/**
+ * 3.2. Session beans
+ * - session bean with a parameterized bean class declares any scope other than
@Dependent
+ *
+ * @throws Exception
+ */
+ public void testNonDependentGenericSessionBeanNotOk() throws Exception {
+ IFile file =
tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/sessionbeans/FooBroken.java");
+ AbstractResourceMarkerTest.assertMarkerIsCreated(file,
AbstractResourceMarkerTest.MARKER_TYPE,
CDIValidationMessages.ILLEGAL_SCOPE_FOR_SESSION_BEAN_WITH_GENERIC_TYPE, 6);
+ }
+
+ /**
* 3.5.1. Declaring a resource
* - producer field declaration specifies an EL name (together with one of @Resource,
@PersistenceContext, @PersistenceUnit, @EJB, @WebServiceRef)
*