Author: scabanovich
Date: 2011-06-07 18:46:55 -0400 (Tue, 07 Jun 2011)
New Revision: 31895
Added:
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/generic/GenericBeanValidator.java
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/validation/
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
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/generic/CDISeamSolderGenericBeanExtension.java
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/generic/GenericConfiguration.java
Log:
JBIDE-8695
https://issues.jboss.org/browse/JBIDE-8695
Added:
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
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderPreferences.java 2011-06-07
22:46:55 UTC (rev 31895)
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.cdi.seam.solder.core;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jboss.tools.common.preferences.SeverityPreferences;
+
+/**
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
+public class CDISeamSolderPreferences extends SeverityPreferences {
+ public static final Set<String> SEVERITY_OPTION_NAMES = new
HashSet<String>();
+
+ private static CDISeamSolderPreferences INSTANCE = new CDISeamSolderPreferences();
+
+ public static final String AMBIGUOUS_GENERIC_BEAN =
INSTANCE.createSeverityOption("ambiguousGenericBean");
+
+ public static CDISeamSolderPreferences getInstance() {
+ return INSTANCE;
+ }
+
+ private CDISeamSolderPreferences() {}
+
+ @Override
+ protected Set<String> getSeverityOptionNames() {
+ return SEVERITY_OPTION_NAMES;
+ }
+
+ @Override
+ protected String createSeverityOption(String shortName) {
+ String name = getPluginId() + ".validator.problem." + shortName;
//$NON-NLS-1$
+ SEVERITY_OPTION_NAMES.add(name);
+ return name;
+ }
+
+ @Override
+ protected String getPluginId() {
+ return CDISeamSolderCorePlugin.PLUGIN_ID;
+ }
+
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderPreferences.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/generic/CDISeamSolderGenericBeanExtension.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/generic/CDISeamSolderGenericBeanExtension.java 2011-06-07
22:42:58 UTC (rev 31894)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/generic/CDISeamSolderGenericBeanExtension.java 2011-06-07
22:46:55 UTC (rev 31895)
@@ -31,6 +31,7 @@
import org.jboss.tools.cdi.core.extension.IDefinitionContextExtension;
import org.jboss.tools.cdi.core.extension.feature.IBuildParticipantFeature;
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.AnnotationDeclaration;
import org.jboss.tools.cdi.internal.core.impl.AnnotationLiteral;
import org.jboss.tools.cdi.internal.core.impl.CDIProject;
@@ -43,6 +44,7 @@
import org.jboss.tools.cdi.internal.core.impl.definition.ParameterDefinition;
import org.jboss.tools.cdi.internal.core.impl.definition.TypeDefinition;
import org.jboss.tools.cdi.internal.core.scanner.FileSet;
+import org.jboss.tools.cdi.internal.core.validation.CDICoreValidator;
import org.jboss.tools.cdi.seam.solder.core.CDISeamSolderConstants;
import org.jboss.tools.cdi.seam.solder.core.CDISeamSolderCorePlugin;
import org.jboss.tools.common.model.XModelObject;
@@ -52,7 +54,7 @@
* @author Viacheslav Kabanovich
*
*/
-public class CDISeamSolderGenericBeanExtension implements ICDIExtension,
IBuildParticipantFeature, IProcessAnnotatedTypeFeature, CDISeamSolderConstants {
+public class CDISeamSolderGenericBeanExtension implements ICDIExtension,
IBuildParticipantFeature, IProcessAnnotatedTypeFeature, IValidatorFeature,
CDISeamSolderConstants {
CDICoreNature project;
GenericBeanDefinitionContext context = new GenericBeanDefinitionContext();
@@ -94,7 +96,7 @@
p.addBean(b);
}
- Map<AbstractMemberDefinition, List<IAnnotationDeclaration>> ms =
c.getGenericProducerBeans();
+ Map<AbstractMemberDefinition, List<IQualifierDeclaration>> ms =
c.getGenericProducerBeans();
Set<TypeDefinition> ts = c.getGenericConfigurationBeans();
for (AbstractMemberDefinition gp: ms.keySet()) {
@@ -102,9 +104,9 @@
if(gp.getTypeDefinition().isVetoed()) {
continue;
}
- List<IAnnotationDeclaration> list = ms.get(gp);
+ List<IQualifierDeclaration> list = ms.get(gp);
for (TypeDefinition t: ts) {
- TypeDefinition ti = new TypeDefinition();
+ TypeDefinition ti = new TypeDefinition(); //TODO copy, do not create new.
ti.setType(t.getType(), context.getRootContext(), 0);
List<MethodDefinition> ps = ti.getMethods();
for (MethodDefinition m: ps) {
@@ -140,7 +142,7 @@
}
}
- private void replaceGenericInjections(TypeDefinition ti,
List<IAnnotationDeclaration> list) {
+ private void replaceGenericInjections(TypeDefinition ti,
List<IQualifierDeclaration> list) {
List<FieldDefinition> fs = ti.getFields();
for (FieldDefinition f: fs) {
if(f.isAnnotationPresent(INJECT_ANNOTATION_TYPE_NAME) &&
f.isAnnotationPresent(GENERIC_QUALIFIER_TYPE_NAME)) {
@@ -229,11 +231,11 @@
private void addGenericProducerBean(AbstractMemberDefinition def, String genericType,
IRootDefinitionContext context) {
GenericConfiguration c =
((GenericBeanDefinitionContext)this.context.getWorkingCopy()).getGenericConfiguration(genericType);
- List<IAnnotationDeclaration> list = new
ArrayList<IAnnotationDeclaration>();
+ List<IQualifierDeclaration> list = new ArrayList<IQualifierDeclaration>();
List<IAnnotationDeclaration> ds = def.getAnnotations();
for (IAnnotationDeclaration d: ds) {
if(d instanceof IQualifierDeclaration) {
- list.add(d);
+ list.add((IQualifierDeclaration)d);
}
}
c.getGenericProducerBeans().put(def, list);
@@ -264,6 +266,10 @@
}
}
return null;
- }
+ }
+
+ public void validateResource(IFile file, CDICoreValidator validator) {
+ new GenericBeanValidator().validateResource(file, validator, project, context);
+ }
}
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/generic/GenericBeanValidator.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/generic/GenericBeanValidator.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/generic/GenericBeanValidator.java 2011-06-07
22:46:55 UTC (rev 31895)
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.cdi.seam.solder.core.generic;
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.IMember;
+import org.jboss.tools.cdi.core.CDICoreNature;
+import org.jboss.tools.cdi.core.CDIUtil;
+import org.jboss.tools.cdi.core.IQualifierDeclaration;
+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.validation.CDICoreValidator;
+import org.jboss.tools.cdi.seam.solder.core.CDISeamSolderCorePlugin;
+import org.jboss.tools.cdi.seam.solder.core.CDISeamSolderPreferences;
+import org.jboss.tools.cdi.seam.solder.core.validation.SeamSolderValidationMessages;
+import org.jboss.tools.common.text.ITextSourceReference;
+
+/**
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
+public class GenericBeanValidator {
+
+ public void validateResource(IFile file, CDICoreValidator validator, CDICoreNature
project, GenericBeanDefinitionContext context) {
+ Map<String, GenericConfiguration> cs = context.getGenericConfigurations();
+ for (GenericConfiguration c: cs.values()) {
+ if(c.getInvolvedTypes().contains(file.getFullPath())) {
+ try {
+ validateConfiguration(file, c, validator, project, context);
+ } catch (CoreException e) {
+ CDISeamSolderCorePlugin.getDefault().logError(e);
+ }
+ }
+ }
+ }
+
+ public void validateConfiguration(IFile file, GenericConfiguration c, CDICoreValidator
validator, CDICoreNature project, GenericBeanDefinitionContext context) throws
CoreException {
+ Map<AbstractMemberDefinition, List<IQualifierDeclaration>> bs =
c.getGenericProducerBeans();
+ for (AbstractMemberDefinition d: bs.keySet()) {
+ if(d.getResource() != null && d.getResource().equals(file) &&
!d.getTypeDefinition().isVetoed()) {
+ List<IQualifierDeclaration> ds = bs.get(d);
+ for (AbstractMemberDefinition d1: bs.keySet()) {
+ List<IQualifierDeclaration> ds2 = bs.get(d1);
+ if(ds2 != ds && !d1.getTypeDefinition().isVetoed() &&
CDIProject.areMatchingQualifiers(ds, ds2)) {
+ ITextSourceReference reference =
CDIUtil.convertToSourceReference(((IMember)d.getMember()).getNameRange(), file);
+ validator.addError(SeamSolderValidationMessages.AMBIGUOUS_GENERIC_BEAN,
CDISeamSolderPreferences.AMBIGUOUS_GENERIC_BEAN, new String[0], reference, file);
+ }
+ }
+ }
+ }
+ //TODO check`
+
+ }
+
+
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/generic/GenericBeanValidator.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/generic/GenericConfiguration.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/generic/GenericConfiguration.java 2011-06-07
22:42:58 UTC (rev 31894)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/generic/GenericConfiguration.java 2011-06-07
22:46:55 UTC (rev 31895)
@@ -19,6 +19,7 @@
import org.eclipse.core.runtime.IPath;
import org.jboss.tools.cdi.core.IAnnotationDeclaration;
+import org.jboss.tools.cdi.core.IQualifierDeclaration;
import org.jboss.tools.cdi.internal.core.impl.definition.AbstractMemberDefinition;
import org.jboss.tools.cdi.internal.core.impl.definition.AnnotationDefinition;
import org.jboss.tools.cdi.internal.core.impl.definition.TypeDefinition;
@@ -32,7 +33,7 @@
String genericTypeName;
AnnotationDefinition genericType;
- Map<AbstractMemberDefinition, List<IAnnotationDeclaration>>
genericProducerBeans = new HashMap<AbstractMemberDefinition,
List<IAnnotationDeclaration>>();
+ Map<AbstractMemberDefinition, List<IQualifierDeclaration>>
genericProducerBeans = new HashMap<AbstractMemberDefinition,
List<IQualifierDeclaration>>();
Set<TypeDefinition> genericConfigurationBeans = new
HashSet<TypeDefinition>();
Set<IPath> involvedResources = new HashSet<IPath>();
@@ -64,7 +65,7 @@
}
}
- public Map<AbstractMemberDefinition, List<IAnnotationDeclaration>>
getGenericProducerBeans() {
+ public Map<AbstractMemberDefinition, List<IQualifierDeclaration>>
getGenericProducerBeans() {
return genericProducerBeans;
}
Added:
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
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/validation/SeamSolderValidationMessages.java 2011-06-07
22:46:55 UTC (rev 31895)
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.cdi.seam.solder.core.validation;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
+public class SeamSolderValidationMessages {
+
+ private static final String BUNDLE_NAME =
SeamSolderValidationMessages.class.getPackage().getName() + ".messages";
//$NON-NLS-1$
+
+ public static String AMBIGUOUS_GENERIC_BEAN;
+
+ static {
+ NLS.initializeMessages(BUNDLE_NAME, SeamSolderValidationMessages.class);
+ }
+
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/validation/SeamSolderValidationMessages.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added:
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
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/validation/messages.properties 2011-06-07
22:46:55 UTC (rev 31895)
@@ -0,0 +1 @@
+AMBIGUOUS_GENERIC_BEAN=Several generic beans for the same generic type have the same set
of qualifiers.
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/validation/messages.properties
___________________________________________________________________
Added: svn:mime-type
+ text/plain