Author: scabanovich
Date: 2011-06-23 20:24:52 -0400 (Thu, 23 Jun 2011)
New Revision: 32336
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/generic/CDISeamSolderGenericBeanExtension.java
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/generic/GenericBeanDefinitionContext.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/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-8695
https://issues.jboss.org/browse/JBIDE-8695
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-06-24
00:20:46 UTC (rev 32335)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/CDISeamSolderPreferences.java 2011-06-24
00:24:52 UTC (rev 32336)
@@ -27,6 +27,8 @@
public static final String AMBIGUOUS_GENERIC_CONFIGURATION_POINT =
INSTANCE.createSeverityOption("ambiguousGenericConfigurationPoint");
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 CDISeamSolderPreferences getInstance() {
return INSTANCE;
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-24
00:20:46 UTC (rev 32335)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/generic/CDISeamSolderGenericBeanExtension.java 2011-06-24
00:24:52 UTC (rev 32336)
@@ -11,6 +11,7 @@
package org.jboss.tools.cdi.seam.solder.core.generic;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -189,7 +190,9 @@
@Override
public void processAnnotatedType(TypeDefinition typeDefinition, IRootDefinitionContext
context) {
- if(typeDefinition.isAnnotationPresent(GENERIC_CONFIGURATION_ANNOTATION_TYPE_NAME)) {
+ if(typeDefinition.isAnnotationPresent(VETO_ANNOTATION_TYPE_NAME)) {
+ //ignore
+ } else
if(typeDefinition.isAnnotationPresent(GENERIC_CONFIGURATION_ANNOTATION_TYPE_NAME)) {
typeDefinition.veto();
IAnnotationDeclaration d =
typeDefinition.getAnnotation(GENERIC_CONFIGURATION_ANNOTATION_TYPE_NAME);
Object o = d.getMemberValue(null);
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/generic/GenericBeanDefinitionContext.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/generic/GenericBeanDefinitionContext.java 2011-06-24
00:20:46 UTC (rev 32335)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/generic/GenericBeanDefinitionContext.java 2011-06-24
00:24:52 UTC (rev 32336)
@@ -10,13 +10,16 @@
******************************************************************************/
package org.jboss.tools.cdi.seam.solder.core.generic;
+import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
+import java.util.Set;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.IType;
import org.jboss.tools.cdi.core.extension.AbstractDefinitionContextExtension;
import org.jboss.tools.cdi.internal.core.impl.definition.AnnotationDefinition;
+import org.jboss.tools.cdi.internal.core.impl.definition.TypeDefinition;
import org.jboss.tools.cdi.seam.solder.core.CDISeamSolderConstants;
/**
@@ -40,6 +43,15 @@
@Override
protected void doApplyWorkingCopy() {
genericConfiguartions =
((GenericBeanDefinitionContext)workingCopy).genericConfiguartions;
+
+ for (GenericConfiguration c: genericConfiguartions.values()) {
+ if(c.getGenericTypeDefinition() == null) {
+ for (TypeDefinition d: c.getGenericBeans()) {
+ //Do last minute correction. This is a wrong generic bean, let it be a usual bean to
be validated.
+ d.unveto();
+ }
+ }
+ }
//
}
@@ -70,7 +82,17 @@
if(annotation.isAnnotationPresent(CDISeamSolderConstants.GENERIC_TYPE_ANNOTATION_TYPE_NAME))
{
annotation.setExtendedKind(CDISeamSolderConstants.GENERIC_ANNOTATION_KIND);
String qn = annotation.getType().getFullyQualifiedName();
- getGenericConfiguration(qn).setGenericTypeDefinition(annotation, this);
+ GenericConfiguration c = getGenericConfiguration(qn);
+ c.setGenericTypeDefinition(annotation, this);
+ if(!annotation.getType().isBinary()) {
+ IPath newPath = annotation.getType().getResource().getFullPath();
+ Set<IPath> ps = c.getInvolvedTypes();
+ for (IPath p: ps) {
+ getRootContext().addDependency(p, newPath);
+ getRootContext().addDependency(newPath, p);
+ }
+ ps.add(newPath);
+ }
}
}
@@ -90,4 +112,16 @@
}
return result;
}
+
+ public boolean isGenericBean(String typeName) {
+ for (GenericConfiguration c: genericConfiguartions.values()) {
+ Set<TypeDefinition> bs = c.getGenericBeans();
+ for (TypeDefinition d: bs) {
+ if(typeName.equals(d.getType().getFullyQualifiedName())) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
}
\ No newline at end of file
Modified:
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 2011-06-24
00:20:46 UTC (rev 32335)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/generic/GenericBeanValidator.java 2011-06-24
00:24:52 UTC (rev 32336)
@@ -28,6 +28,7 @@
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.AnnotationDefinition;
+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.CDISeamSolderConstants;
import org.jboss.tools.cdi.seam.solder.core.CDISeamSolderCorePlugin;
@@ -57,6 +58,26 @@
}
public void validateConfiguration(IFile file, GenericConfiguration c, CDICoreValidator
validator, CDICoreNature project, GenericBeanDefinitionContext context) throws
CoreException {
+ IParametedType t = c.getConfigType();
+ AnnotationDefinition genericType = c.getGenericTypeDefinition();
+
+ if(genericType == null) {
+ String n = c.getGenericTypeName();
+ for (TypeDefinition d: c.getGenericBeans()) {
+ if(d.getResource() != null && d.getResource().equals(file)) {
+ IAnnotationDeclaration a =
d.getAnnotation(CDISeamSolderConstants.GENERIC_CONFIGURATION_ANNOTATION_TYPE_NAME);
+ validator.addError(SeamSolderValidationMessages.WRONG_GENERIC_CONFIGURATION_ANNOTATION_REFERENCE,
+ CDISeamSolderPreferences.WRONG_GENERIC_CONFIGURATION_ANNOTATION_REFERENCE, new
String[]{n}, a, file);
+ }
+ }
+ } else if(file.equals(genericType.getResource())) {
+ if(t != null && context.isGenericBean(t.getType().getFullyQualifiedName())) {
+ IAnnotationDeclaration a =
genericType.getAnnotation(CDISeamSolderConstants.GENERIC_TYPE_ANNOTATION_TYPE_NAME);
+ validator.addError(SeamSolderValidationMessages.GENERIC_CONFIGURATION_TYPE_IS_A_GENERIC_BEAN,
+ CDISeamSolderPreferences.GENERIC_CONFIGURATION_TYPE_IS_A_GENERIC_BEAN, new
String[0], a, file);
+ }
+ }
+
Map<AbstractMemberDefinition, List<IQualifierDeclaration>> bs =
c.getGenericConfigurationPoints();
for (AbstractMemberDefinition d: bs.keySet()) {
if(d.getResource() != null && d.getResource().equals(file) &&
!d.getTypeDefinition().isVetoed()) {
@@ -79,7 +100,6 @@
/*
* Type of generic configuration point must be assignable to the configuration type.
*/
- IParametedType t = c.getConfigType();
IBean b = findGenericBean(file, (IMember)d.getMember(), project);
if(t == null || b == null || !CDIProject.containsType(b.getAllTypes(), t)) {
validator.addError(SeamSolderValidationMessages.WRONG_TYPE_OF_GENERIC_CONFIGURATION_POINT,
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-06-24
00:20:46 UTC (rev 32335)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/validation/SeamSolderValidationMessages.java 2011-06-24
00:24:52 UTC (rev 32336)
@@ -23,6 +23,8 @@
public static String AMBIGUOUS_GENERIC_CONFIGURATION_POINT;
public static String WRONG_TYPE_OF_GENERIC_CONFIGURATION_POINT;
+ public static String WRONG_GENERIC_CONFIGURATION_ANNOTATION_REFERENCE;
+ public static String GENERIC_CONFIGURATION_TYPE_IS_A_GENERIC_BEAN;
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-06-24
00:20:46 UTC (rev 32335)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.solder.core/src/org/jboss/tools/cdi/seam/solder/core/validation/messages.properties 2011-06-24
00:24:52 UTC (rev 32336)
@@ -1,2 +1,4 @@
AMBIGUOUS_GENERIC_CONFIGURATION_POINT=Duplicate generic configuration point.
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.