Author: akazakov
Date: 2010-05-27 13:10:37 -0400 (Thu, 27 May 2010)
New Revision: 22381
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.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 bean
specializes Y bean and Y has a name and X declares a name explicitly, using @Named
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:41:38 UTC (rev 22380)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java 2010-05-27
17:10:37 UTC (rev 22381)
@@ -334,6 +334,8 @@
if (bean instanceof IClassBean) {
validateClassBean((IClassBean) bean);
}
+
+ validateSpecializingBean(bean);
}
private void validateClassBean(IClassBean bean) {
@@ -346,14 +348,18 @@
}
validateMixedClassBean(bean);
validateConstructors(bean);
- validateSpecializingBean(bean);
}
- private void validateSpecializingBean(IClassBean bean) {
+ private void validateSpecializingBean(IBean bean) {
IBean specializingBean = bean.getSpecializedBean();
if(specializingBean==null) {
return;
}
+ String beanClassName = bean.getBeanClass().getElementName();
+ String beanName = bean instanceof IBeanMethod?beanClassName + "." +
((IBeanMethod)bean).getSourceMember().getElementName() + "()":beanClassName;
+ String specializingBeanClassName = specializingBean.getBeanClass().getElementName();
+ String specializingBeanName = specializingBean instanceof
IBeanMethod?specializingBeanClassName + "." +
((IBeanMethod)specializingBean).getSourceMember().getElementName() +
"()":specializingBeanClassName;
+
/*
* 4.3.1. Direct and indirect specialization
* - X specializes Y but does not have some bean type of Y
@@ -370,10 +376,22 @@
}
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()},
+ new String[]{beanName, specializingBeanName,
specializingType.getType().getElementName()},
bean.getSpecializesAnnotationDeclaration(), bean.getResource());
}
}
+ /*
+ * 4.3.1. Direct and indirect specialization
+ * - X specializes Y and Y has a name and X declares a name explicitly, using @Named
+ */
+ if(specializingBean.getName()!=null) {
+ IAnnotationDeclaration nameDeclaration =
bean.getAnnotation(CDIConstants.NAMED_QUALIFIER_TYPE_NAME);
+ if(nameDeclaration!=null) {
+ addError(CDIValidationMessages.CONFLICTING_NAME_IN_SPECIALIZING_BEAN,
CDIPreferences.CONFLICTING_NAME_IN_SPECIALIZING_BEAN,
+ new String[]{beanName, specializingBeanName},
+ nameDeclaration, bean.getResource());
+ }
+ }
}
private void validateConstructors(IClassBean bean) {
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:41:38 UTC (rev 22380)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/preferences/CDIConfigurationBlock.java 2010-05-27
17:10:37 UTC (rev 22381)
@@ -126,7 +126,7 @@
{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.CONFLICTING_NAME_IN_SPECIALIZING_BEAN,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_conflictingNameInSpecializingBean_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},
},
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:41:38 UTC (rev 22380)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/ValidationTest.java 2010-05-27
17:10:37 UTC (rev 22381)
@@ -853,6 +853,17 @@
}
/**
+ * 4.3.1. Direct and indirect specialization
+ * - X specializes Y and Y has a name and X declares a name explicitly, using @Named
+ *
+ * @throws Exception
+ */
+ public void testSpecializingAndSpecializedBeanHasName() throws Exception {
+ IFile file =
tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/inheritance/specialization/producer/method/broken/specializingAndSpecializedBeanHaveName/HighSchool_Broken.java");
+ AbstractResourceMarkerTest.assertMarkerIsCreated(file,
AbstractResourceMarkerTest.MARKER_TYPE,
MessageFormat.format(CDIValidationMessages.CONFLICTING_NAME_IN_SPECIALIZING_BEAN,
"HighSchool_Broken.getStarPupil()", "School.getStarPupil()"), 25);
+ }
+
+ /**
* 10.4.2. Declaring an observer method
* - method has more than one parameter annotated @Observes
*