[jbosstools-commits] JBoss Tools SVN: r35775 - in trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core: validation and 1 other directory.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Tue Oct 18 18:56:52 EDT 2011


Author: scabanovich
Date: 2011-10-18 18:56:52 -0400 (Tue, 18 Oct 2011)
New Revision: 35775

Modified:
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderDefaultBeanExtension.java
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderPreferences.java
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/validation/SeamSolderValidationMessages.java
   trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/validation/messages.properties
Log:
JBIDE-9244
https://issues.jboss.org/browse/JBIDE-9244
Implemented validation of default beans (Solder).

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderDefaultBeanExtension.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderDefaultBeanExtension.java	2011-10-18 20:52:33 UTC (rev 35774)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderDefaultBeanExtension.java	2011-10-18 22:56:52 UTC (rev 35775)
@@ -14,23 +14,38 @@
 import java.util.List;
 import java.util.Set;
 
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jdt.core.IMemberValuePair;
 import org.eclipse.jdt.core.IType;
+import org.eclipse.osgi.util.NLS;
 import org.jboss.tools.cdi.core.CDIConstants;
+import org.jboss.tools.cdi.core.CDICorePlugin;
 import org.jboss.tools.cdi.core.IBean;
+import org.jboss.tools.cdi.core.ICDIProject;
 import org.jboss.tools.cdi.core.IClassBean;
 import org.jboss.tools.cdi.core.IProducer;
+import org.jboss.tools.cdi.core.IProducerField;
+import org.jboss.tools.cdi.core.IQualifierDeclaration;
 import org.jboss.tools.cdi.core.IRootDefinitionContext;
+import org.jboss.tools.cdi.core.IScope;
 import org.jboss.tools.cdi.core.extension.ICDIExtension;
 import org.jboss.tools.cdi.core.extension.feature.IAmbiguousBeanResolverFeature;
 import org.jboss.tools.cdi.core.extension.feature.IProcessAnnotatedTypeFeature;
+import org.jboss.tools.cdi.core.extension.feature.IValidatorFeature;
+import org.jboss.tools.cdi.internal.core.impl.CDIProject;
 import org.jboss.tools.cdi.internal.core.impl.definition.AbstractMemberDefinition;
 import org.jboss.tools.cdi.internal.core.impl.definition.FieldDefinition;
 import org.jboss.tools.cdi.internal.core.impl.definition.MethodDefinition;
 import org.jboss.tools.cdi.internal.core.impl.definition.TypeDefinition;
+import org.jboss.tools.cdi.internal.core.validation.CDICoreValidator;
+import org.jboss.tools.cdi.seam.solder.core.validation.SeamSolderValidationMessages;
 import org.jboss.tools.common.java.IAnnotationDeclaration;
 import org.jboss.tools.common.java.IJavaAnnotation;
+import org.jboss.tools.common.java.IParametedType;
+import org.jboss.tools.common.java.ParametedTypeFactory;
 import org.jboss.tools.common.java.impl.AnnotationLiteral;
+import org.jboss.tools.common.preferences.SeverityPreferences;
 
 /**
  * Implements support for org.jboss.seam.solder.bean.defaultbean.DefaultBeanExtension.
@@ -44,7 +59,7 @@
  * @author Viacheslav Kabanovich
  *
  */
-public class CDISeamSolderDefaultBeanExtension implements ICDIExtension, IProcessAnnotatedTypeFeature, IAmbiguousBeanResolverFeature {
+public class CDISeamSolderDefaultBeanExtension implements ICDIExtension, IProcessAnnotatedTypeFeature, IAmbiguousBeanResolverFeature, IValidatorFeature {
 
 	protected Version getVersion() {
 		return Version.instance;
@@ -119,4 +134,58 @@
 		return result;
 	}
 
+	public void validateResource(IFile file, CDICoreValidator validator) {
+		String defaultBeanAnnotationTypeName = getVersion().getDefaultBeanAnnotationTypeName();
+		ICDIProject cdiProject = CDICorePlugin.getCDIProject(file.getProject(), true);
+		Set<IBean> bs = cdiProject.getBeans(file.getFullPath());
+		for (IBean bean: bs) {
+			IAnnotationDeclaration a = bean.getAnnotation(defaultBeanAnnotationTypeName);
+			if(a != null) {
+				if(bean instanceof IProducerField) {
+					IClassBean cb = ((IProducerField) bean).getClassBean();
+					IScope scope = cb.getScope();
+					if(scope != null && scope.isNorlmalScope()) {
+						validator.addError(SeamSolderValidationMessages.DEFAULT_PRODUCER_FIELD_ON_NORMAL_SCOPED_BEAN, 
+								CDISeamSolderPreferences.DEFAULT_PRODUCER_FIELD_ON_NORMAL_SCOPED_BEAN, new String[]{}, a, file);
+					}
+				}
+				IQualifierDeclaration[] qs = bean.getQualifierDeclarations().toArray(new IQualifierDeclaration[0]);
+				Set<IParametedType> ts = bean.getLegalTypes();
+				if(ts.size() < 3) {
+					IParametedType type = null;
+					for (IParametedType t: ts) {
+						if(!"java.lang.Object".equals(t.getType().getFullyQualifiedName())) {
+							type = t;
+						}
+					}
+					if(type != null) {
+						Set<IBean> bs2 = cdiProject.getBeans(false, type, qs);
+						StringBuilder otherDefaultBeans = new StringBuilder();
+						for (IBean b: bs2) {
+							try {
+							if(b != bean && b.isAnnotationPresent(defaultBeanAnnotationTypeName)
+									&& CDIProject.areMatchingQualifiers(bean.getQualifierDeclarations(), b.getQualifierDeclarations(true))) {
+								if(otherDefaultBeans.length() > 0) {
+									otherDefaultBeans.append(", ");
+								}
+								otherDefaultBeans.append(b.getElementName());
+							}
+							} catch (CoreException e) {
+								CDISeamSolderCorePlugin.getDefault().logError(e);
+							}
+						}
+						if(otherDefaultBeans.length() > 0) {
+							String message = NLS.bind(SeamSolderValidationMessages.IDENTICAL_DEFAULT_BEANS, otherDefaultBeans);
+							validator.addError(message, CDISeamSolderPreferences.IDENTICAL_DEFAULT_BEANS, new String[]{}, a, file);
+						}
+					}
+				}
+			}
+		}
+	}
+
+	public SeverityPreferences getSeverityPreferences() {
+		return CDISeamSolderPreferences.getInstance();
+	}
+
 }

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderPreferences.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderPreferences.java	2011-10-18 20:52:33 UTC (rev 35774)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderPreferences.java	2011-10-18 22:56:52 UTC (rev 35775)
@@ -29,6 +29,9 @@
 	public static final String WRONG_TYPE_OF_GENERIC_CONFIGURATION_POINT = INSTANCE.createSeverityOption("wrongTypeOfGenericConfigurationPoint");
 	public static final String WRONG_GENERIC_CONFIGURATION_ANNOTATION_REFERENCE = INSTANCE.createSeverityOption("wrongGenericConfigurationAnnotationReference");
 	public static final String GENERIC_CONFIGURATION_TYPE_IS_A_GENERIC_BEAN = INSTANCE.createSeverityOption("genericConfigurationTypeIsGenericBean");
+	
+	public static final String DEFAULT_PRODUCER_FIELD_ON_NORMAL_SCOPED_BEAN = INSTANCE.createSeverityOption("defaultProducerFieldOnNormalScopedBean");
+	public static final String IDENTICAL_DEFAULT_BEANS = INSTANCE.createSeverityOption("identicalDefaultBeans");
 
 	public static CDISeamSolderPreferences getInstance() {
 		return INSTANCE;

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/validation/SeamSolderValidationMessages.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/validation/SeamSolderValidationMessages.java	2011-10-18 20:52:33 UTC (rev 35774)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/validation/SeamSolderValidationMessages.java	2011-10-18 22:56:52 UTC (rev 35775)
@@ -26,6 +26,9 @@
 	public static String WRONG_GENERIC_CONFIGURATION_ANNOTATION_REFERENCE;
 	public static String GENERIC_CONFIGURATION_TYPE_IS_A_GENERIC_BEAN;
 
+	public static String DEFAULT_PRODUCER_FIELD_ON_NORMAL_SCOPED_BEAN;
+	public static String IDENTICAL_DEFAULT_BEANS;
+
 	static {
 		NLS.initializeMessages(BUNDLE_NAME, SeamSolderValidationMessages.class);
 	}

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/validation/messages.properties
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/validation/messages.properties	2011-10-18 20:52:33 UTC (rev 35774)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/validation/messages.properties	2011-10-18 22:56:52 UTC (rev 35775)
@@ -2,3 +2,6 @@
 WRONG_TYPE_OF_GENERIC_CONFIGURATION_POINT=Type of generic configuration point must be assignable to the generic configuration type.
 WRONG_GENERIC_CONFIGURATION_ANNOTATION_REFERENCE=Annotation type mismatch: {0} is not a generic configuration annotation.
 GENERIC_CONFIGURATION_TYPE_IS_A_GENERIC_BEAN=Generic configuration types may not be generic beans.
+
+DEFAULT_PRODUCER_FIELD_ON_NORMAL_SCOPED_BEAN=Default producer fields are not allowed on normal scoped beans.
+IDENTICAL_DEFAULT_BEANS=Other default beans have the same type and qualifiers: {0}



More information about the jbosstools-commits mailing list