Author: akazakov
Date: 2010-07-01 18:27:54 -0400 (Thu, 01 Jul 2010)
New Revision: 23162
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDIUtil.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/ICDIAnnotation.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IInterceptorBinded.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IInterceptorBinding.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IQualifier.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IStereotype.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIAnnotationElement.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/ClassBean.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/InterceptorBindingElement.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/QualifierElement.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/StereotypeElement.java
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/errorList.txt
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/TCKTest.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 validation rule:
- the set of interceptor bindings of a bean or interceptor, including bindings
inherited from stereotypes and other interceptor bindings, has two instances
of a certain interceptor binding type and the instances have different values
of some annotation member
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDIUtil.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDIUtil.java 2010-07-01
20:29:24 UTC (rev 23161)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDIUtil.java 2010-07-01
22:27:54 UTC (rev 23162)
@@ -36,6 +36,7 @@
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.ui.PlatformUI;
import org.eclipse.wst.validation.internal.plugin.ValidationPlugin;
+import org.jboss.tools.cdi.internal.core.impl.ClassBean;
import org.jboss.tools.common.EclipseUtil;
import org.jboss.tools.common.model.util.EclipseJavaUtil;
import org.jboss.tools.common.model.util.EclipseResourceUtil;
@@ -748,9 +749,9 @@
}
return false;
}
-
+
private static CDICoreNature cdiNature;
-
+
public static CDICoreNature getCDINatureWithProgress(final IProject project){
cdiNature = null;
cdiNature = CDICorePlugin.getCDI(project, false);
@@ -775,4 +776,54 @@
return cdiNature;
}
+
+ /**
+ * Collect all the interceptor binding declarations from the bean class or method
including all the inherited bindings.
+ * @param binded bean class or method
+ *
+ * @return
+ */
+ public static Set<IInterceptorBindingDeclaration>
getAllInterceptorBindingDeclaratios(IInterceptorBinded binded) {
+ return collectInheritedInterceptorBindingDeclaratios(binded, new
HashSet<IInterceptorBindingDeclaration>());
+ }
+
+ private static Set<IInterceptorBindingDeclaration>
collectInheritedInterceptorBindingDeclaratios(IInterceptorBinded binded,
Set<IInterceptorBindingDeclaration> result) {
+ Set<IInterceptorBindingDeclaration> declarations =
binded.getInterceptorBindingDeclarations();
+ for (IInterceptorBindingDeclaration declaration : declarations) {
+ if(!result.contains(declaration)) {
+ result.add(declaration);
+ IInterceptorBinding binding = declaration.getInterceptorBinding();
+ collectInheritedInterceptorBindingDeclaratios(binding, result);
+ if(binding instanceof IStereotyped) {
+ collectInheritedInterceptorBindingDeclaratiosFromStereotyps((IStereotyped)binding,
result);
+ }
+ }
+ }
+ if(binded instanceof IStereotyped) {
+ collectInheritedInterceptorBindingDeclaratiosFromStereotyps((IStereotyped)binded,
result);
+ }
+ return result;
+ }
+
+ private static Set<IInterceptorBindingDeclaration>
collectInheritedInterceptorBindingDeclaratiosFromStereotyps(IStereotyped stereotyped,
Set<IInterceptorBindingDeclaration> result) {
+ Set<IStereotypeDeclaration> stereotypeDeclarations =
collectInheritedStereotypDeclarations(stereotyped, new
HashSet<IStereotypeDeclaration>());
+ if(stereotyped instanceof ClassBean) {
+ stereotypeDeclarations.addAll(((ClassBean)stereotyped).getInheritedStereotypDeclarations());
+ }
+ for (IStereotypeDeclaration stereotypeDeclaration : stereotypeDeclarations) {
+ collectInheritedInterceptorBindingDeclaratios(stereotypeDeclaration.getStereotype(),
result);
+ }
+ return result;
+ }
+
+ private static Set<IStereotypeDeclaration>
collectInheritedStereotypDeclarations(IStereotyped stereotyped,
Set<IStereotypeDeclaration> result) {
+ Set<IStereotypeDeclaration> declarations =
stereotyped.getStereotypeDeclarations();
+ for (IStereotypeDeclaration declaration : declarations) {
+ if(!result.contains(declaration)) {
+ result.add(declaration);
+ collectInheritedStereotypDeclarations(declaration.getStereotype(), result);
+ }
+ }
+ return result;
+ }
}
\ No newline at end of file
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/ICDIAnnotation.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/ICDIAnnotation.java 2010-07-01
20:29:24 UTC (rev 23161)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/ICDIAnnotation.java 2010-07-01
22:27:54 UTC (rev 23162)
@@ -1,7 +1,9 @@
package org.jboss.tools.cdi.core;
import java.util.List;
+import java.util.Set;
+import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
/**
@@ -44,4 +46,11 @@
* @return the annotations with given type name
*/
IAnnotationDeclaration getAnnotationDeclaration(String typeName);
+
+ /**
+ * Returns set of members annotated with @Nonbinding
+ *
+ * @return set of members annotated with @Nonbinding
+ */
+ Set<IMethod> getNonBindingMethods();
}
\ No newline at end of file
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IInterceptorBinded.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IInterceptorBinded.java 2010-07-01
20:29:24 UTC (rev 23161)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IInterceptorBinded.java 2010-07-01
22:27:54 UTC (rev 23162)
@@ -20,8 +20,8 @@
public interface IInterceptorBinded {
/**
- * Obtains the interceptor binding declarations of the class bean or the method of a
class bean.
- * This set includes bindings declared in this java class/method.
+ * Obtains the interceptor binding declarations of the class bean or method or
stereotype or interceptor binding type.
+ * This set includes bindings declared in this java class bean or method or stereotype
or interceptor binding type.
* Use getInterceptorBindings() to get all bindings (i.g. from Stereotypes)
*
* @return the set of interceptor binding declarations
@@ -29,7 +29,7 @@
Set<IInterceptorBindingDeclaration> getInterceptorBindingDeclarations();
/**
- * Obtains the interceptor bindings of the bean class or the method of a class bean.
+ * Obtains the interceptor bindings of the bean class or method or stereotype or
interceptor binding type.
*
* @return the set of interceptor bindings
*/
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IInterceptorBinding.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IInterceptorBinding.java 2010-07-01
20:29:24 UTC (rev 23161)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IInterceptorBinding.java 2010-07-01
22:27:54 UTC (rev 23162)
@@ -10,28 +10,11 @@
******************************************************************************/
package org.jboss.tools.cdi.core;
-import java.util.Set;
-
-import org.eclipse.jdt.core.IType;
-
/**
* Represents an interceptor binding type.
*
* @author Alexey Kazakov
*/
-public interface IInterceptorBinding extends ICDIAnnotation {
+public interface IInterceptorBinding extends ICDIAnnotation, IInterceptorBinded {
- /**
- * Returns the corresponding IType of the interceptor binding.
- *
- * @return the corresponding IType
- */
- IType getSourceType();
-
- /**
- * Returns the interceptor binding declarations of the interceptor binding.
- *
- * @return the interceptor binding declarations.
- */
- Set<IInterceptorBindingDeclaration> getInterceptorBindingDeclarations();
}
\ No newline at end of file
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IQualifier.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IQualifier.java 2010-07-01
20:29:24 UTC (rev 23161)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IQualifier.java 2010-07-01
22:27:54 UTC (rev 23162)
@@ -10,10 +10,6 @@
******************************************************************************/
package org.jboss.tools.cdi.core;
-import java.util.Set;
-
-import org.eclipse.jdt.core.IMethod;
-
/**
* Represents a qualifier.
*
@@ -21,10 +17,4 @@
*/
public interface IQualifier extends ICDIAnnotation {
- /**
- * Returns set of members annotated with @Nonbinding
- *
- * @return set of members annotated with @Nonbinding
- */
- public Set<IMethod> getNonBindingMethods();
-}
+}
\ No newline at end of file
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IStereotype.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IStereotype.java 2010-07-01
20:29:24 UTC (rev 23161)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IStereotype.java 2010-07-01
22:27:54 UTC (rev 23162)
@@ -10,8 +10,6 @@
******************************************************************************/
package org.jboss.tools.cdi.core;
-import java.util.Set;
-
import org.eclipse.jdt.core.IAnnotation;
/**
@@ -19,7 +17,7 @@
*
* @author Alexey Kazakov
*/
-public interface IStereotype extends IScoped, IStereotyped, ICDINamedAnnotation,
IAnnotated {
+public interface IStereotype extends IScoped, IStereotyped, ICDINamedAnnotation,
IAnnotated, IInterceptorBinded {
/**
* Returns the location of @Name declaration of this stereotype. If the bean
@@ -30,13 +28,6 @@
IAnnotation getNameLocation();
/**
- * Returns the interceptor binding declarations of the stereotype.
- *
- * @return the interceptor binding declarations.
- */
- Set<IInterceptorBindingDeclaration> getInterceptorBindingDeclarations();
-
- /**
* Determines if the stereotype is an alternative.
*
* @return <tt>true</tt> if the stereotype is an alternative, and
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIAnnotationElement.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIAnnotationElement.java 2010-07-01
20:29:24 UTC (rev 23161)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIAnnotationElement.java 2010-07-01
22:27:54 UTC (rev 23162)
@@ -11,12 +11,16 @@
package org.jboss.tools.cdi.internal.core.impl;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
+import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.jboss.tools.cdi.core.IAnnotationDeclaration;
import org.jboss.tools.cdi.core.ICDIAnnotation;
import org.jboss.tools.cdi.internal.core.impl.definition.AnnotationDefinition;
+import org.jboss.tools.cdi.internal.core.impl.definition.AnnotationMemberDefinition;
/**
*
@@ -24,14 +28,32 @@
*
*/
public class CDIAnnotationElement extends CDIElement implements ICDIAnnotation {
+
protected AnnotationDefinition definition;
+ Set<IMethod> nonbindingMethods = null;
+
public CDIAnnotationElement() {}
public void setDefinition(AnnotationDefinition definition) {
this.definition = definition;
}
+ public Set<IMethod> getNonBindingMethods() {
+ if(nonbindingMethods == null) {
+ Set<IMethod> result = new HashSet<IMethod>();
+ List<AnnotationMemberDefinition> ms = definition.getMethods();
+ for (AnnotationMemberDefinition m: ms) {
+ if(m.getNonbindingAnnotation() != null) {
+ result.add(m.getMethod());
+ }
+ }
+ nonbindingMethods = result;
+ }
+ return nonbindingMethods;
+
+ }
+
/*
* (non-Javadoc)
* @see org.jboss.tools.cdi.core.ICDIAnnotation#getSourceType()
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java 2010-07-01
20:29:24 UTC (rev 23161)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java 2010-07-01
22:27:54 UTC (rev 23162)
@@ -36,6 +36,7 @@
import org.jboss.tools.cdi.core.IBean;
import org.jboss.tools.cdi.core.IBeanMember;
import org.jboss.tools.cdi.core.IBeanMethod;
+import org.jboss.tools.cdi.core.ICDIAnnotation;
import org.jboss.tools.cdi.core.ICDIProject;
import org.jboss.tools.cdi.core.IClassBean;
import org.jboss.tools.cdi.core.IInjectionPoint;
@@ -355,7 +356,7 @@
TreeSet<String> injectionKeys = new TreeSet<String>();
if(injectionQualifiers != null) for (IQualifierDeclaration d: injectionQualifiers) {
- injectionKeys.add(getQualifierDeclarationKey(d));
+ injectionKeys.add(getAnnotationDeclarationKey(d));
}
if(injectionKeys.contains(CDIConstants.ANY_QUALIFIER_TYPE_NAME)) {
@@ -369,7 +370,7 @@
if(beanQualifiers == null || beanQualifiers.isEmpty()) {
beanKeys.add(CDIConstants.DEFAULT_QUALIFIER_TYPE_NAME);
} else for (IQualifierDeclaration d: beanQualifiers) {
- beanKeys.add(getQualifierDeclarationKey(d));
+ beanKeys.add(getAnnotationDeclarationKey(d));
}
if(beanKeys.size() == 1 &&
beanKeys.iterator().next().startsWith(CDIConstants.NAMED_QUALIFIER_TYPE_NAME)) {
beanKeys.add(CDIConstants.DEFAULT_QUALIFIER_TYPE_NAME);
@@ -423,17 +424,13 @@
return true;
}
- public static String getQualifierDeclarationKey(IQualifierDeclaration d) throws
CoreException {
- IQualifier q = d.getQualifier();
- Set<IMethod> nb = q == null ? new HashSet<IMethod>() :
q.getNonBindingMethods();
+ public static String getAnnotationDeclarationKey(IAnnotationDeclaration d) throws
CoreException {
+ ICDIAnnotation annotation = d.getAnnotation();
+ Set<IMethod> nb = annotation == null ? new HashSet<IMethod>() :
annotation.getNonBindingMethods();
return getAnnotationDeclarationKey(d, nb);
}
- public static String getAnnotationDeclarationKey(IAnnotationDeclaration d) throws
CoreException {
- return getAnnotationDeclarationKey(d, null);
- }
-
- public static String getAnnotationDeclarationKey(IAnnotationDeclaration d,
Set<IMethod> ignoredMembers) throws CoreException {
+ private static String getAnnotationDeclarationKey(IAnnotationDeclaration d,
Set<IMethod> ignoredMembers) throws CoreException {
Set<IMethod> nb = ignoredMembers == null ? new HashSet<IMethod>() :
ignoredMembers;
IType type = d.getType();
IMethod[] ms = type.getMethods();
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/ClassBean.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/ClassBean.java 2010-07-01
20:29:24 UTC (rev 23161)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/ClassBean.java 2010-07-01
22:27:54 UTC (rev 23162)
@@ -39,6 +39,7 @@
import org.jboss.tools.cdi.core.IScopeDeclaration;
import org.jboss.tools.cdi.core.IStereotype;
import org.jboss.tools.cdi.core.IStereotypeDeclaration;
+import org.jboss.tools.cdi.core.IStereotyped;
import org.jboss.tools.cdi.core.ITypeDeclaration;
import org.jboss.tools.cdi.internal.core.impl.definition.AbstractMemberDefinition;
import org.jboss.tools.cdi.internal.core.impl.definition.FieldDefinition;
@@ -477,6 +478,20 @@
return result;
}
+ public Set<IStereotypeDeclaration> getInheritedStereotypDeclarations() {
+ if(superClassBean == null) return Collections.emptySet();
+ Set<IStereotypeDeclaration> result = new
HashSet<IStereotypeDeclaration>();
+ Set<IStereotypeDeclaration> ds = superClassBean.getStereotypeDeclarations(true);
+ for (IStereotypeDeclaration d: ds) {
+ if(d.getStereotype() != null && d.getStereotype().getInheritedDeclaration() !=
null) {
+ result.add(d);
+ } else if(isSpecializing()) {
+ result.add(d);
+ }
+ }
+ return result;
+ }
+
/*
* (non-Javadoc)
* @see org.jboss.tools.cdi.core.IBean#isNullable()
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/InterceptorBindingElement.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/InterceptorBindingElement.java 2010-07-01
20:29:24 UTC (rev 23161)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/InterceptorBindingElement.java 2010-07-01
22:27:54 UTC (rev 23162)
@@ -10,12 +10,8 @@
******************************************************************************/
package org.jboss.tools.cdi.internal.core.impl;
-import java.util.HashSet;
-import java.util.List;
import java.util.Set;
-import org.eclipse.jdt.core.IType;
-import org.jboss.tools.cdi.core.IAnnotationDeclaration;
import org.jboss.tools.cdi.core.IInterceptorBinding;
import org.jboss.tools.cdi.core.IInterceptorBindingDeclaration;
@@ -28,19 +24,19 @@
public InterceptorBindingElement() {}
+ /*
+ * (non-Javadoc)
+ * @see org.jboss.tools.cdi.core.IInterceptorBinded#getInterceptorBindingDeclarations()
+ */
public Set<IInterceptorBindingDeclaration> getInterceptorBindingDeclarations() {
- Set<IInterceptorBindingDeclaration> result = new
HashSet<IInterceptorBindingDeclaration>();
- List<IAnnotationDeclaration> as = definition.getAnnotations();
- for (IAnnotationDeclaration a: as) {
- if(a instanceof InterceptorBindingDeclaration) {
- result.add((InterceptorBindingDeclaration)a);
- }
- }
- return result;
+ return ClassBean.getInterceptorBindingDeclarations(definition);
}
- public IType getSourceType() {
- return definition.getType();
+ /*
+ * (non-Javadoc)
+ * @see org.jboss.tools.cdi.core.IInterceptorBinded#getInterceptorBindings()
+ */
+ public Set<IInterceptorBinding> getInterceptorBindings() {
+ return ClassBean.getInterceptorBindings(definition);
}
-
-}
+}
\ No newline at end of file
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/QualifierElement.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/QualifierElement.java 2010-07-01
20:29:24 UTC (rev 23161)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/QualifierElement.java 2010-07-01
22:27:54 UTC (rev 23162)
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007 Red Hat, Inc.
+ * Copyright (c) 2009 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,
@@ -10,13 +10,7 @@
******************************************************************************/
package org.jboss.tools.cdi.internal.core.impl;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.jdt.core.IMethod;
import org.jboss.tools.cdi.core.IQualifier;
-import org.jboss.tools.cdi.internal.core.impl.definition.AnnotationMemberDefinition;
/**
*
@@ -24,23 +18,6 @@
*
*/
public class QualifierElement extends CDIAnnotationElement implements IQualifier {
- Set<IMethod> nonbindingMethods = null;
public QualifierElement() {}
-
- public Set<IMethod> getNonBindingMethods() {
- if(nonbindingMethods == null) {
- Set<IMethod> result = new HashSet<IMethod>();
- List<AnnotationMemberDefinition> ms = definition.getMethods();
- for (AnnotationMemberDefinition m: ms) {
- if(m.getNonbindingAnnotation() != null) {
- result.add(m.getMethod());
- }
- }
- nonbindingMethods = result;
- }
- return nonbindingMethods;
-
- }
-
-}
+}
\ No newline at end of file
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/StereotypeElement.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/StereotypeElement.java 2010-07-01
20:29:24 UTC (rev 23161)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/StereotypeElement.java 2010-07-01
22:27:54 UTC (rev 23162)
@@ -17,6 +17,7 @@
import org.eclipse.jdt.core.IAnnotation;
import org.jboss.tools.cdi.core.IAnnotationDeclaration;
+import org.jboss.tools.cdi.core.IInterceptorBinding;
import org.jboss.tools.cdi.core.IInterceptorBindingDeclaration;
import org.jboss.tools.cdi.core.IScope;
import org.jboss.tools.cdi.core.IScopeDeclaration;
@@ -51,21 +52,22 @@
/*
* (non-Javadoc)
- * @see org.jboss.tools.cdi.core.IStereotype#getInterceptorBindingDeclarations()
+ * @see org.jboss.tools.cdi.core.IInterceptorBinded#getInterceptorBindingDeclarations()
*/
public Set<IInterceptorBindingDeclaration> getInterceptorBindingDeclarations() {
- Set<IInterceptorBindingDeclaration> result = new
HashSet<IInterceptorBindingDeclaration>();
- List<IAnnotationDeclaration> as = definition.getAnnotations();
- for (IAnnotationDeclaration a: as) {
- if(a instanceof InterceptorBindingDeclaration) {
- result.add((InterceptorBindingDeclaration)a);
- }
- }
- return result;
+ return ClassBean.getInterceptorBindingDeclarations(definition);
}
/*
* (non-Javadoc)
+ * @see org.jboss.tools.cdi.core.IInterceptorBinded#getInterceptorBindings()
+ */
+ public Set<IInterceptorBinding> getInterceptorBindings() {
+ return ClassBean.getInterceptorBindings(definition);
+ }
+
+ /*
+ * (non-Javadoc)
* @see org.jboss.tools.cdi.core.IStereotype#getNameLocation()
*/
public IAnnotation getNameLocation() {
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-07-01
20:29:24 UTC (rev 23161)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java 2010-07-01
22:27:54 UTC (rev 23162)
@@ -72,6 +72,7 @@
import org.jboss.tools.cdi.core.IStereotyped;
import org.jboss.tools.cdi.core.ITypeDeclaration;
import org.jboss.tools.cdi.core.preferences.CDIPreferences;
+import org.jboss.tools.cdi.internal.core.impl.CDIProject;
import org.jboss.tools.cdi.internal.core.impl.Parameter;
import org.jboss.tools.cdi.internal.core.impl.SessionBean;
import org.jboss.tools.common.model.util.EclipseJavaUtil;
@@ -367,7 +368,7 @@
}
private void addLinkedInterceptorBindings(String beanPath, IInterceptorBinded binded) {
- Set<IInterceptorBindingDeclaration> bindingDeclarations =
binded.getInterceptorBindingDeclarations();
+ Set<IInterceptorBindingDeclaration> bindingDeclarations =
CDIUtil.getAllInterceptorBindingDeclaratios(binded);
for (IInterceptorBindingDeclaration bindingDeclaration : bindingDeclarations) {
IInterceptorBinding binding = bindingDeclaration.getInterceptorBinding();
if (!binding.getSourceType().isReadOnly()) {
@@ -386,8 +387,59 @@
}
validateMixedClassBean(bean);
validateConstructors(bean);
+ validateInterceptorBindings(bean);
}
+ private void validateInterceptorBindings(IClassBean bean) {
+ /*
+ * 9.5.2. Interceptor binding types with members
+ * - the set of interceptor bindings of a bean or interceptor, including bindings
+ * inherited from stereotypes and other interceptor bindings, has two instances
+ * of a certain interceptor binding type and the instances have different values
+ * of some annotation member
+ */
+ try {
+ if(hasConflictedInterceptorBindings(bean)) {
+ ITextSourceReference reference =
CDIUtil.convertToSourceReference(bean.getBeanClass().getNameRange());
+ addError(CDIValidationMessages.CONFLICTING_INTERCEPTOR_BINDINGS,
CDIPreferences.CONFLICTING_INTERCEPTOR_BINDINGS, reference, bean.getResource());
+ }
+ Set<IBeanMethod> methods = bean.getAllMethods();
+ for (IBeanMethod method : methods) {
+ if(hasConflictedInterceptorBindings(method)) {
+ ITextSourceReference reference =
CDIUtil.convertToSourceReference(method.getMethod().getNameRange());
+ addError(CDIValidationMessages.CONFLICTING_INTERCEPTOR_BINDINGS,
CDIPreferences.CONFLICTING_INTERCEPTOR_BINDINGS, reference, bean.getResource());
+ }
+ }
+ } catch (JavaModelException e) {
+ CDICorePlugin.getDefault().logError(e);
+ } catch (CoreException e) {
+ CDICorePlugin.getDefault().logError(e);
+ }
+ }
+
+ private boolean hasConflictedInterceptorBindings(IInterceptorBinded binded) throws
CoreException {
+ Set<IInterceptorBindingDeclaration> declarations =
CDIUtil.getAllInterceptorBindingDeclaratios(binded);
+ if(declarations.size()>1) {
+ Map<String, String> keys = new HashMap<String, String>();
+ for (IInterceptorBindingDeclaration declaration : declarations) {
+ IType type = declaration.getInterceptorBinding().getSourceType();
+ if(type!=null) {
+ String name = type.getFullyQualifiedName();
+ String key = CDIProject.getAnnotationDeclarationKey(declaration);
+ String anotherKey = keys.get(name);
+ if(anotherKey!=null) {
+ if(!anotherKey.equals(key)) {
+ return true;
+ }
+ } else {
+ keys.put(name, key);
+ }
+ }
+ }
+ }
+ return false;
+ }
+
private void validateSpecializingBean(IBean bean) {
/*
* 4.3.1. Direct and indirect specialization
@@ -414,7 +466,6 @@
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
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/errorList.txt
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/errorList.txt 2010-07-01
20:29:24 UTC (rev 23161)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/errorList.txt 2010-07-01
22:27:54 UTC (rev 23162)
@@ -163,16 +163,15 @@
that is defined @Target({TYPE, METHOD})
- interceptor declared using @Interceptor does not declare any interceptor binding
(Non-Portable behavior)
-
-
-
-
9.3. Binding an interceptor to a bean
- managed bean has a class level interceptor binding and is declared final
or has a non-static, non-private, final method
- non-static, non-private, final method of a managed bean has a method level
interceptor binding
+
+
+
9.5.2. Interceptor binding types with members
- the set of interceptor bindings of a bean or interceptor, including bindings
inherited from stereotypes and other interceptor bindings, has two instances
@@ -181,6 +180,8 @@
- array-valued or annotation-valued member of an interceptor binding type
is not annotated @Nonbinding (Non-Portable behavior)
+
+
10.4.2. Declaring an observer method
- method has more than one parameter annotated @Observes
- observer method is annotated @Produces or @Inject or has a parameter annotated
@Disposes
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-07-01
20:29:24 UTC (rev 23161)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/messages.properties 2010-07-01
22:27:54 UTC (rev 23162)
@@ -72,7 +72,7 @@
ILLEGAL_LIFECYCLE_CALLBACK_INTERCEPTOR_BINDING=Interceptor for lifecycle callbacks may
only declare interceptor binding types that are defined as @Target(TYPE) [JSR-299 �9.2]
ILLEGAL_INTERCEPTOR_BINDING_CLASS=The bean class of a managed bean that declares an
interceptor binding must not be declared final [JSR-299 �9.3]
ILLEGAL_INTERCEPTOR_BINDING_METHOD=A non-static, non-private method of a bean class of a
managed bean that declares an interceptor binding must not be declared final [JSR-299
�9.3]
-CONFLICTING_INTERCEPTOR_BINDINGS=The set of interceptor bindings of a bean or
interceptor, including bindings inherited from stereotypes and other interceptor bindings,
has two instances of a certain interceptor binding type and the instances have different
values of some annotation member
+CONFLICTING_INTERCEPTOR_BINDINGS=The set of interceptor bindings of a bean or
interceptor, including bindings inherited from stereotypes and other interceptor bindings,
has two instances of a certain interceptor binding type and the instances have different
values of some annotation member [JSR-299 �9.5.2]
OBSERVER_IN_DECORATOR=Interceptor cannot have a method with a parameter annotated
@Observes [JSR-299 �10.4.2]
OBSERVER_IN_INTERCEPTOR=Decorator cannot have a method with a parameter annotated
@Observes [JSR-299 �10.4.2]
INTERCEPTOR_IS_ALTERNATIVE=Interceptor is an alternative
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-07-01
20:29:24 UTC (rev 23161)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/preferences/CDIConfigurationBlock.java 2010-07-01
22:27:54 UTC (rev 23162)
@@ -114,7 +114,7 @@
{CDIPreferences.DELEGATE_HAS_ILLEGAL_TYPE,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_delegateHasIllegalType_label},
{CDIPreferences.ILLEGAL_LIFECYCLE_CALLBACK_INTERCEPTOR_BINDING,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_illegalLifecycleCallbackInterceptorBinding_label},
{CDIPreferences.ILLEGAL_INTERCEPTOR_BINDING_METHOD,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_illegalInterceptorBindingMethod_label},
-// {CDIPreferences.CONFLICTING_INTERCEPTOR_BINDINGS,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_conflictingInterceptorBindings_label},
+ {CDIPreferences.CONFLICTING_INTERCEPTOR_BINDINGS,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_conflictingInterceptorBindings_label},
{CDIPreferences.OBSERVER_IN_INTERCEPTOR_OR_DECORATOR,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_observerInInterceptorOrDecorator_label},
{CDIPreferences.INTERCEPTOR_OR_DECORATOR_IS_ALTERNATIVE,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_interceptorOrDecoratorIsAlternative_label},
{CDIPreferences.MISSING_INTERCEPTOR_BINDING,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_missingInterceptorBinding_label},
Modified:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/TCKTest.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/TCKTest.java 2010-07-01
20:29:24 UTC (rev 23161)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/TCKTest.java 2010-07-01
22:27:54 UTC (rev 23162)
@@ -363,7 +363,7 @@
assertTrue(bean.getResource().getFullPath() + " bean (qualifiers - " +
allTypes.toString() + ") should have the qualifier with " + typeName + "
type.", found);
Set<IQualifierDeclaration> declarations = bean.getQualifierDeclarations(true);
for (IQualifierDeclaration d : declarations) {
- if(CDIProject.getQualifierDeclarationKey(d).equals(CDIProject.getQualifierDeclarationKey(declaration))
) {
+ if(CDIProject.getAnnotationDeclarationKey(d).equals(CDIProject.getAnnotationDeclarationKey(declaration))
) {
return;
}
}
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-07-01
20:29:24 UTC (rev 23161)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/ValidationTest.java 2010-07-01
22:27:54 UTC (rev 23162)
@@ -1275,6 +1275,20 @@
}
/**
+ * 9.5.2. Interceptor binding types with members
+ * - the set of interceptor bindings of a bean or interceptor, including bindings
+ * inherited from stereotypes and other interceptor bindings, has two instances
+ * of a certain interceptor binding type and the instances have different values
+ * of some annotation member
+ *
+ * @throws Exception
+ */
+ public void testInterceptorBindingsWithConflictingAnnotationMembersNotOk() throws
Exception {
+ IFile file =
tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/interceptors/definition/broken/invalidBindingAnnotations/Foo.java");
+ assertMarkerIsCreated(file, CDIValidationMessages.CONFLICTING_INTERCEPTOR_BINDINGS, 19,
20);
+ }
+
+ /**
* 10.4.2. Declaring an observer method
* - method has more than one parameter annotated @Observes
*