Author: akazakov
Date: 2010-05-27 12:41:38 -0400 (Thu, 27 May 2010)
New Revision: 22380
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/Farmer.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/Landowner.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/MissingTypeBeanBroken.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/Simple.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/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: - X
specializes Y but does not have some bean type of Y
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-27
16:05:29 UTC (rev 22379)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java 2010-05-27
16:41:38 UTC (rev 22380)
@@ -346,8 +346,36 @@
}
validateMixedClassBean(bean);
validateConstructors(bean);
+ validateSpecializingBean(bean);
}
+ private void validateSpecializingBean(IClassBean bean) {
+ IBean specializingBean = bean.getSpecializedBean();
+ if(specializingBean==null) {
+ return;
+ }
+ /*
+ * 4.3.1. Direct and indirect specialization
+ * - X specializes Y but does not have some bean type of Y
+ */
+ Set<IParametedType> beanTypes = bean.getLegalTypes();
+ Set<IParametedType> specializingBeanTypes = specializingBean.getLegalTypes();
+ for (IParametedType specializingType : specializingBeanTypes) {
+ boolean found = false;
+ for (IParametedType type : beanTypes) {
+ if(specializingType.getType().getFullyQualifiedName().equals(type.getType().getFullyQualifiedName()))
{
+ found = true;
+ break;
+ }
+ }
+ if(!found) {
+ addError(CDIValidationMessages.MISSING_TYPE_IN_SPECIALIZING_BEAN,
CDIPreferences.MISSING_TYPE_IN_SPECIALIZING_BEAN,
+ new String[]{bean.getBeanClass().getElementName(),
specializingBean.getBeanClass().getElementName(),
specializingType.getType().getElementName()},
+ bean.getSpecializesAnnotationDeclaration(), bean.getResource());
+ }
+ }
+ }
+
private void validateConstructors(IClassBean bean) {
Set<IBeanMethod> constructors = bean.getBeanConstructors();
if(constructors.size()>1) {
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-27
16:05:29 UTC (rev 22379)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/messages.properties 2010-05-27
16:41:38 UTC (rev 22380)
@@ -76,8 +76,8 @@
ILLEGAL_SPECIALIZING_SESSION_BEAN=Session bean class annotated @Specializes does not
directly extend the bean class of another session bean
ILLEGAL_SPECIALIZING_PRODUCER_STATIC=Producer method annotated @Specializes is static
ILLEGAL_SPECIALIZING_PRODUCER_OVERRIDE=Producer method annotated @Specializes does not
directly override another producer method
-MISSING_TYPE_IN_SPECIALIZING_BEAN=Bean X specializes Y but does not have some bean type
of Y
-CONFLICTING_NAME_IN_SPECIALIZING_BEAN=Bean X specializes Y and Y has a name and X
declares a name explicitly, using @Named
+MISSING_TYPE_IN_SPECIALIZING_BEAN=Bean {0} specializes {1} but does not have {2} bean
type of {1}
+CONFLICTING_NAME_IN_SPECIALIZING_BEAN=Bean {0} specializes {1} and {1} has a name and {0}
declares a name explicitly, using @Named
INTERCEPTOR_ANNOTATED_SPECIALIZES=Interceptor is annotated @Specializes
DECORATOR_ANNOTATED_SPECIALIZES=Decorator is annotated @Specializes
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-27
16:05:29 UTC (rev 22379)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/preferences/CDIConfigurationBlock.java 2010-05-27
16:41:38 UTC (rev 22380)
@@ -125,7 +125,7 @@
{CDIPreferences.ILLEGAL_SPECIALIZING_MANAGED_BEAN,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_illegalSpecializingManagedBean_label},
{CDIPreferences.ILLEGAL_SPECIALIZING_SESSION_BEAN,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_illegalSpecializingSessionBean_label},
{CDIPreferences.ILLEGAL_SPECIALIZING_PRODUCER,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_illegalSpecializingProducer_label},
-// {CDIPreferences.MISSING_TYPE_IN_SPECIALIZING_BEAN,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_missingTypeInSpecializingBean_label},
+ {CDIPreferences.MISSING_TYPE_IN_SPECIALIZING_BEAN,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_missingTypeInSpecializingBean_label},
// {CDIPreferences.CONFLICTING_NAME_IN_SPECIALIZING_BEAN,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_conflictingNameInSpecializingBean_label},
// {CDIPreferences.INTERCEPTOR_ANNOTATED_SPECIALIZES,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_interceptorAnnotatedSpecializes_label},
// {CDIPreferences.DECORATOR_ANNOTATED_SPECIALIZES,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_decoratorAnnotatedSpecializes_label},
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/Farmer.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/Farmer.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/Farmer.java 2010-05-27
16:41:38 UTC (rev 22380)
@@ -0,0 +1,12 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.specialization;
+
+import javax.inject.Named;
+
+@Landowner
+@Named
+class Farmer implements Simple {
+
+ public String getClassName() {
+ return Farmer.class.getName();
+ }
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/Farmer.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/Landowner.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/Landowner.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/Landowner.java 2010-05-27
16:41:38 UTC (rev 22380)
@@ -0,0 +1,21 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.specialization;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
+@Target( { TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RUNTIME)
+@Documented
+@Qualifier
+@interface Landowner {
+
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/Landowner.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/MissingTypeBeanBroken.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/MissingTypeBeanBroken.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/MissingTypeBeanBroken.java 2010-05-27
16:41:38 UTC (rev 22380)
@@ -0,0 +1,10 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.specialization;
+
+import javax.enterprise.inject.Specializes;
+import javax.enterprise.inject.Typed;
+
+@Specializes
+(a)Typed(MissingTypeBeanBroken.class)
+public class MissingTypeBeanBroken extends Farmer {
+
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/MissingTypeBeanBroken.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/Simple.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/Simple.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/Simple.java 2010-05-27
16:41:38 UTC (rev 22380)
@@ -0,0 +1,5 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.specialization;
+
+public interface Simple {
+
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/specialization/Simple.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-27
16:05:29 UTC (rev 22379)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/ValidationTest.java 2010-05-27
16:41:38 UTC (rev 22380)
@@ -10,6 +10,8 @@
******************************************************************************/
package org.jboss.tools.cdi.core.test.tck;
+import java.text.MessageFormat;
+
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.jboss.tools.cdi.internal.core.validation.CDIValidationMessages;
@@ -838,6 +840,19 @@
}
/**
+ * 4.3.1. Direct and indirect specialization
+ * - X specializes Y but does not have some bean type of Y
+ *
+ * @throws Exception
+ */
+ public void testBeanDoesNotHaveSomeTypeOfSpecializedBean() throws Exception {
+ IFile file =
tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/specialization/MissingTypeBeanBroken.java");
+ AbstractResourceMarkerTest.assertMarkerIsCreated(file,
AbstractResourceMarkerTest.MARKER_TYPE,
MessageFormat.format(CDIValidationMessages.MISSING_TYPE_IN_SPECIALIZING_BEAN,
"MissingTypeBeanBroken", "Farmer", "Farmer"), 6);
+ AbstractResourceMarkerTest.assertMarkerIsCreated(file,
AbstractResourceMarkerTest.MARKER_TYPE,
MessageFormat.format(CDIValidationMessages.MISSING_TYPE_IN_SPECIALIZING_BEAN,
"MissingTypeBeanBroken", "Farmer", "Simple"), 6);
+ AbstractResourceMarkerTest.assertMarkerIsCreated(file,
AbstractResourceMarkerTest.MARKER_TYPE,
MessageFormat.format(CDIValidationMessages.MISSING_TYPE_IN_SPECIALIZING_BEAN,
"MissingTypeBeanBroken", "Farmer", "Object"), 6);
+ }
+
+ /**
* 10.4.2. Declaring an observer method
* - method has more than one parameter annotated @Observes
*