Author: akazakov
Date: 2010-07-01 13:25:35 -0400 (Thu, 01 Jul 2010)
New Revision: 23154
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IInterceptorBinded.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassLevelInterceptorBindingOk.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassLevelInterceptorBindingWithFinalMethodBroken.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassWithMethodLevelInterceptorBindingOk.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassWithMethodLevelInterceptorBindingWithFinalMethodBroken.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/FinalClassWithClassLevelInterceptorBindingBroken.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/FinalClassWithMethodLevelInterceptorBindingBroken.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/InterceptorMethodStereotype.java
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IBeanMethod.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IClassBean.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/BeanMethod.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/definition/BeanMemberDefinition.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.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/CDIValidationMessages.java
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/ValidationTest.java
Log:
https://jira.jboss.org/jira/browse/JBIDE-2708 Added new validation rules:
- 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
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IBeanMethod.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IBeanMethod.java 2010-07-01
16:43:40 UTC (rev 23153)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IBeanMethod.java 2010-07-01
17:25:35 UTC (rev 23154)
@@ -19,7 +19,7 @@
*
* @author Alexey Kazakov
*/
-public interface IBeanMethod extends IBeanMember {
+public interface IBeanMethod extends IBeanMember, IStereotyped, IInterceptorBinded {
/**
* Returns the method.
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IClassBean.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IClassBean.java 2010-07-01
16:43:40 UTC (rev 23153)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IClassBean.java 2010-07-01
17:25:35 UTC (rev 23154)
@@ -17,7 +17,7 @@
*
* @author Alexey Kazakov
*/
-public interface IClassBean extends IBean {
+public interface IClassBean extends IBean, IInterceptorBinded {
/**
* Returns a set of producers that are declared in this bean class.
@@ -48,22 +48,6 @@
Set<IBeanMethod> getAllMethods();
/**
- * Obtains the interceptor binding declarations of the class bean.
- * This set includes bindings declared in this java class.
- * Use getInterceptorBindings() to get all bindings (i.g. from Stereotypes)
- *
- * @return the set of interceptor binding declarations
- */
- Set<IInterceptorBindingDeclaration> getInterceptorBindingDeclarations();
-
- /**
- * Obtains the interceptor bindings of the bean.
- *
- * @return the set of interceptor bindings
- */
- Set<IInterceptorBinding> getInterceptorBindings();
-
- /**
* Returns a set of observer methods of the bean.
*
* @return a set of observer methods of the bean
Added:
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
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IInterceptorBinded.java 2010-07-01
17:25:35 UTC (rev 23154)
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2010 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.core;
+
+import java.util.Set;
+
+/**
+ * Represents an element which can have interceptor bindings.
+ *
+ * @author Alexey Kazakov
+ */
+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.
+ * Use getInterceptorBindings() to get all bindings (i.g. from Stereotypes)
+ *
+ * @return the set of interceptor binding declarations
+ */
+ Set<IInterceptorBindingDeclaration> getInterceptorBindingDeclarations();
+
+ /**
+ * Obtains the interceptor bindings of the bean class or the method of a class bean.
+ *
+ * @return the set of interceptor bindings
+ */
+ Set<IInterceptorBinding> getInterceptorBindings();
+}
\ No newline at end of file
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IInterceptorBinded.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/BeanMethod.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/BeanMethod.java 2010-07-01
16:43:40 UTC (rev 23153)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/BeanMethod.java 2010-07-01
17:25:35 UTC (rev 23154)
@@ -12,11 +12,14 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
import org.eclipse.jdt.core.IMember;
import org.eclipse.jdt.core.IMethod;
import org.jboss.tools.cdi.core.CDIConstants;
import org.jboss.tools.cdi.core.IBeanMethod;
+import org.jboss.tools.cdi.core.IInterceptorBinding;
+import org.jboss.tools.cdi.core.IInterceptorBindingDeclaration;
import org.jboss.tools.cdi.core.IParameter;
import org.jboss.tools.cdi.internal.core.impl.definition.MethodDefinition;
import org.jboss.tools.cdi.internal.core.impl.definition.ParameterDefinition;
@@ -69,6 +72,7 @@
return parameters;
}
+ @Override
public MethodDefinition getDefinition() {
return (MethodDefinition)definition;
}
@@ -94,4 +98,20 @@
public boolean isLifeCycleCallbackMethod() {
return definition.getAnnotation(CDIConstants.PRE_DESTROY_TYPE_NAME)!=null ||
definition.getAnnotation(CDIConstants.POST_CONSTRUCTOR_TYPE_NAME)!=null;
}
+
+ /*
+ * (non-Javadoc)
+ * @see org.jboss.tools.cdi.core.IInterceptorBinded#getInterceptorBindingDeclarations()
+ */
+ public Set<IInterceptorBindingDeclaration> getInterceptorBindingDeclarations() {
+ return ClassBean.getInterceptorBindingDeclarations(definition);
+ }
+
+ /*
+ * (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/ClassBean.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/ClassBean.java 2010-07-01
16:43:40 UTC (rev 23153)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/ClassBean.java 2010-07-01
17:25:35 UTC (rev 23154)
@@ -40,6 +40,7 @@
import org.jboss.tools.cdi.core.IStereotype;
import org.jboss.tools.cdi.core.IStereotypeDeclaration;
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;
import org.jboss.tools.cdi.internal.core.impl.definition.MethodDefinition;
import org.jboss.tools.cdi.internal.core.impl.definition.TypeDefinition;
@@ -179,6 +180,10 @@
* @see org.jboss.tools.cdi.core.IClassBean#getInterceptorBindingDeclarations()
*/
public Set<IInterceptorBindingDeclaration> getInterceptorBindingDeclarations() {
+ return getInterceptorBindingDeclarations(definition);
+ }
+
+ public static Set<IInterceptorBindingDeclaration>
getInterceptorBindingDeclarations(AbstractMemberDefinition definition) {
Set<IInterceptorBindingDeclaration> result = new
HashSet<IInterceptorBindingDeclaration>();
List<IAnnotationDeclaration> as = definition.getAnnotations();
for (IAnnotationDeclaration a: as) {
@@ -189,20 +194,24 @@
return result;
}
- /*
- * (non-Javadoc)
- * @see org.jboss.tools.cdi.core.IClassBean#getInterceptorBindings()
- */
- public Set<IInterceptorBinding> getInterceptorBindings() {
+ public static Set<IInterceptorBinding>
getInterceptorBindings(AbstractMemberDefinition definition) {
// TODO collect bindings from stereotypes. See
https://jira.jboss.org/browse/JBIDE-6550
Set<IInterceptorBinding> result = new HashSet<IInterceptorBinding>();
- Set<IInterceptorBindingDeclaration> declarations =
getInterceptorBindingDeclarations();
+ Set<IInterceptorBindingDeclaration> declarations =
getInterceptorBindingDeclarations(definition);
for (IInterceptorBindingDeclaration declaration: declarations) {
result.add(declaration.getInterceptorBinding());
}
return result;
}
+ /*
+ * (non-Javadoc)
+ * @see org.jboss.tools.cdi.core.IClassBean#getInterceptorBindings()
+ */
+ public Set<IInterceptorBinding> getInterceptorBindings() {
+ return getInterceptorBindings(definition);
+ }
+
public Set<IBeanMethod> getObserverMethods() {
Set<IBeanMethod> result = new HashSet<IBeanMethod>();
for (BeanMethod m: methods) {
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/BeanMemberDefinition.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/BeanMemberDefinition.java 2010-07-01
16:43:40 UTC (rev 23153)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/BeanMemberDefinition.java 2010-07-01
17:25:35 UTC (rev 23154)
@@ -28,21 +28,13 @@
}
public boolean isCDIAnnotated() {
- return getInjectAnnotation() != null || getProducesAnnotation() != null ||
getPreDestroyMethod() != null || getPostConstructorMethod() != null;
+ return getInjectAnnotation() != null || getProducesAnnotation() != null;
}
public AnnotationDeclaration getProducesAnnotation() {
return annotationsByType.get(CDIConstants.PRODUCES_ANNOTATION_TYPE_NAME);
}
- public AnnotationDeclaration getPreDestroyMethod() {
- return annotationsByType.get(CDIConstants.PRE_DESTROY_TYPE_NAME);
- }
-
- public AnnotationDeclaration getPostConstructorMethod() {
- return annotationsByType.get(CDIConstants.POST_CONSTRUCTOR_TYPE_NAME);
- }
-
public AnnotationDeclaration getInjectAnnotation() {
return annotationsByType.get(CDIConstants.INJECT_ANNOTATION_TYPE_NAME);
}
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.java 2010-07-01
16:43:40 UTC (rev 23153)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.java 2010-07-01
17:25:35 UTC (rev 23154)
@@ -12,13 +12,16 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.ISourceRange;
import org.eclipse.jdt.core.IType;
import org.jboss.tools.cdi.core.CDIConstants;
-import org.jboss.tools.cdi.core.CDICorePlugin;
+import org.jboss.tools.cdi.core.IInterceptorBinding;
+import org.jboss.tools.cdi.internal.core.impl.AnnotationDeclaration;
+import org.jboss.tools.cdi.internal.core.impl.ClassBean;
import org.jboss.tools.cdi.internal.core.impl.ParametedType;
import org.jboss.tools.common.model.project.ext.impl.ValueInfo;
import org.jboss.tools.common.model.util.EclipseJavaUtil;
@@ -54,7 +57,6 @@
isConstructor = method.isConstructor();
//TODO process parameters for disposers and observers
loadParamDefinitions(contextType, context);
-
}
public boolean parametersAreInjectionPoints() {
@@ -130,13 +132,17 @@
start += params[i].length() + 1;
}
-
}
+ @Override
public boolean isCDIAnnotated() {
- return super.isCDIAnnotated() || isDisposer() || isObserver();
+ return super.isCDIAnnotated() || isDisposer() || isObserver() || getPreDestroyMethod()
!= null || getPostConstructorMethod() != null || !getInterceptorBindings().isEmpty();
}
+ public Set<IInterceptorBinding> getInterceptorBindings() {
+ return ClassBean.getInterceptorBindings(this);
+ }
+
public List<ParameterDefinition> getParameters() {
return parameters;
}
@@ -155,6 +161,14 @@
return false;
}
+ public AnnotationDeclaration getPreDestroyMethod() {
+ return annotationsByType.get(CDIConstants.PRE_DESTROY_TYPE_NAME);
+ }
+
+ public AnnotationDeclaration getPostConstructorMethod() {
+ return annotationsByType.get(CDIConstants.POST_CONSTRUCTOR_TYPE_NAME);
+ }
+
static String[] getParams(String paramsString) {
List<String> result = new ArrayList<String>();
int i = 0;
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
16:43:40 UTC (rev 23153)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java 2010-07-01
17:25:35 UTC (rev 23154)
@@ -54,6 +54,7 @@
import org.jboss.tools.cdi.core.IInjectionPointMethod;
import org.jboss.tools.cdi.core.IInjectionPointParameter;
import org.jboss.tools.cdi.core.IInterceptor;
+import org.jboss.tools.cdi.core.IInterceptorBinded;
import org.jboss.tools.cdi.core.IInterceptorBinding;
import org.jboss.tools.cdi.core.IInterceptorBindingDeclaration;
import org.jboss.tools.cdi.core.IParametedType;
@@ -68,6 +69,7 @@
import org.jboss.tools.cdi.core.ISessionBean;
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.core.preferences.CDIPreferences;
import org.jboss.tools.cdi.internal.core.impl.Parameter;
@@ -310,13 +312,7 @@
validationContext.addLinkedCoreResource(beanPath, scope.getResource().getFullPath(),
false);
}
}
- Set<IStereotypeDeclaration> stereotypeDeclarations =
bean.getStereotypeDeclarations();
- for (IStereotypeDeclaration stereotypeDeclaration : stereotypeDeclarations) {
- IStereotype stereotype = stereotypeDeclaration.getStereotype();
- if (!stereotype.getSourceType().isReadOnly()) {
- validationContext.addLinkedCoreResource(beanPath,
stereotype.getResource().getFullPath(), false);
- }
- }
+ addLinkedStereotypes(beanPath, bean);
Set<IQualifierDeclaration> qualifierDeclarations =
bean.getQualifierDeclarations();
for (IQualifierDeclaration qualifierDeclaration : qualifierDeclarations) {
IQualifier qualifier = qualifierDeclaration.getQualifier();
@@ -347,20 +343,39 @@
}
if (bean instanceof IClassBean) {
- Set<IInterceptorBindingDeclaration> bindingDeclarations = ((IClassBean)
bean).getInterceptorBindingDeclarations();
- for (IInterceptorBindingDeclaration bindingDeclaration : bindingDeclarations) {
- IInterceptorBinding binding = bindingDeclaration.getInterceptorBinding();
- if (!binding.getSourceType().isReadOnly()) {
- validationContext.addLinkedCoreResource(beanPath,
binding.getResource().getFullPath(), false);
- }
+ IClassBean classBean = (IClassBean)bean;
+ addLinkedInterceptorBindings(beanPath, classBean);
+ Set<IBeanMethod> methods = classBean.getAllMethods();
+ for (IBeanMethod method : methods) {
+ addLinkedStereotypes(beanPath, method);
+ addLinkedInterceptorBindings(beanPath, method);
}
-
- validateClassBean((IClassBean) bean);
+ validateClassBean(classBean);
}
validateSpecializingBean(bean);
}
+ private void addLinkedStereotypes(String beanPath, IStereotyped stereotyped) {
+ Set<IStereotypeDeclaration> stereotypeDeclarations =
stereotyped.getStereotypeDeclarations();
+ for (IStereotypeDeclaration stereotypeDeclaration : stereotypeDeclarations) {
+ IStereotype stereotype = stereotypeDeclaration.getStereotype();
+ if (!stereotype.getSourceType().isReadOnly()) {
+ validationContext.addLinkedCoreResource(beanPath,
stereotype.getResource().getFullPath(), false);
+ }
+ }
+ }
+
+ private void addLinkedInterceptorBindings(String beanPath, IInterceptorBinded binded) {
+ Set<IInterceptorBindingDeclaration> bindingDeclarations =
binded.getInterceptorBindingDeclarations();
+ for (IInterceptorBindingDeclaration bindingDeclaration : bindingDeclarations) {
+ IInterceptorBinding binding = bindingDeclaration.getInterceptorBinding();
+ if (!binding.getSourceType().isReadOnly()) {
+ validationContext.addLinkedCoreResource(beanPath,
binding.getResource().getFullPath(), false);
+ }
+ }
+ }
+
private void validateClassBean(IClassBean bean) {
validateDisposers(bean);
validateObserves(bean);
@@ -1221,6 +1236,48 @@
CDICorePlugin.getDefault().logError(e);
}
}
+ /*
+ * 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
+ */
+ try {
+ Set<IInterceptorBinding> bindings = bean.getInterceptorBindings();
+ if(!bindings.isEmpty()) {
+ if(Flags.isFinal(bean.getBeanClass().getFlags())) {
+ ITextSourceReference reference =
CDIUtil.convertToSourceReference(bean.getBeanClass().getNameRange());
+ addError(CDIValidationMessages.ILLEGAL_INTERCEPTOR_BINDING_CLASS,
CDIPreferences.ILLEGAL_INTERCEPTOR_BINDING_METHOD, reference, bean.getResource());
+ } else {
+ IMethod[] methods = bean.getBeanClass().getMethods();
+ for (int i = 0; i < methods.length; i++) {
+ int flags = methods[i].getFlags();
+ if(Flags.isFinal(flags) && !Flags.isStatic(flags) &&
!Flags.isPrivate(flags)) {
+ ITextSourceReference reference =
CDIUtil.convertToSourceReference(methods[i].getNameRange());
+ addError(CDIValidationMessages.ILLEGAL_INTERCEPTOR_BINDING_METHOD,
CDIPreferences.ILLEGAL_INTERCEPTOR_BINDING_METHOD, reference, bean.getResource());
+ }
+ }
+ }
+ } else {
+ Set<IBeanMethod> beanMethods = bean.getAllMethods();
+ for (IBeanMethod method : beanMethods) {
+ if(!method.getInterceptorBindings().isEmpty()) {
+ if(Flags.isFinal(bean.getBeanClass().getFlags())) {
+ ITextSourceReference reference =
CDIUtil.convertToSourceReference(bean.getBeanClass().getNameRange());
+ addError(CDIValidationMessages.ILLEGAL_INTERCEPTOR_BINDING_CLASS,
CDIPreferences.ILLEGAL_INTERCEPTOR_BINDING_METHOD, reference, bean.getResource());
+ } else {
+ IMethod sourceMethod = method.getMethod();
+ int flags = sourceMethod.getFlags();
+ if(Flags.isFinal(flags) && !Flags.isStatic(flags) &&
!Flags.isPrivate(flags)) {
+ ITextSourceReference reference =
CDIUtil.convertToSourceReference(sourceMethod.getNameRange());
+ addError(CDIValidationMessages.ILLEGAL_INTERCEPTOR_BINDING_METHOD,
CDIPreferences.ILLEGAL_INTERCEPTOR_BINDING_METHOD, reference, bean.getResource());
+ }
+ }
+ }
+ }
+ }
+ } catch (JavaModelException e) {
+ CDICorePlugin.getDefault().logError(e);
+ }
}
private void validateInterceptor(IInterceptor interceptor) {
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDIValidationMessages.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDIValidationMessages.java 2010-07-01
16:43:40 UTC (rev 23153)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDIValidationMessages.java 2010-07-01
17:25:35 UTC (rev 23154)
@@ -91,6 +91,7 @@
public static String ILLEGAL_BEAN_DECLARING_DELEGATE;
public static String DELEGATE_HAS_ILLEGAL_TYPE;
public static String ILLEGAL_LIFECYCLE_CALLBACK_INTERCEPTOR_BINDING;
+ public static String ILLEGAL_INTERCEPTOR_BINDING_CLASS;
public static String ILLEGAL_INTERCEPTOR_BINDING_METHOD;
public static String CONFLICTING_INTERCEPTOR_BINDINGS;
public static String OBSERVER_IN_INTERCEPTOR;
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
16:43:40 UTC (rev 23153)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/messages.properties 2010-07-01
17:25:35 UTC (rev 23154)
@@ -70,7 +70,8 @@
ILLEGAL_BEAN_DECLARING_DELEGATE=Bean class that is not a decorator cannot have an
injection point annotated @Delegate [JSR-299 �8.1.2]
DELEGATE_HAS_ILLEGAL_TYPE=The delegate type must implement or extend the decorated type
{0} [JSR-299 �8.1.3]
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_METHOD=Non-static, non-private, final method of a managed
bean has a interceptor binding (either method level, or declaring class level)
+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
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]
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
16:43:40 UTC (rev 23153)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/preferences/CDIConfigurationBlock.java 2010-07-01
17:25:35 UTC (rev 23154)
@@ -113,7 +113,7 @@
{CDIPreferences.ILLEGAL_BEAN_DECLARING_DELEGATE,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_illegalBeanDeclaringDelegate_label},
{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.ILLEGAL_INTERCEPTOR_BINDING_METHOD,
CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_illegalInterceptorBindingMethod_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},
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassLevelInterceptorBindingOk.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassLevelInterceptorBindingOk.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassLevelInterceptorBindingOk.java 2010-07-01
17:25:35 UTC (rev 23154)
@@ -0,0 +1,14 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.interceptors;
+
+@CatInterceptorBinding
+public class ClassLevelInterceptorBindingOk {
+
+ final private void foo() {
+ }
+
+ static final public void foo2() {
+ }
+
+ public void foo3() {
+ }
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassLevelInterceptorBindingOk.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassLevelInterceptorBindingWithFinalMethodBroken.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassLevelInterceptorBindingWithFinalMethodBroken.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassLevelInterceptorBindingWithFinalMethodBroken.java 2010-07-01
17:25:35 UTC (rev 23154)
@@ -0,0 +1,8 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.interceptors;
+
+@InterceptorStereotype
+public class ClassLevelInterceptorBindingWithFinalMethodBroken {
+
+ final public void foo() {
+ }
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassLevelInterceptorBindingWithFinalMethodBroken.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassWithMethodLevelInterceptorBindingOk.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassWithMethodLevelInterceptorBindingOk.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassWithMethodLevelInterceptorBindingOk.java 2010-07-01
17:25:35 UTC (rev 23154)
@@ -0,0 +1,16 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.interceptors;
+
+public class ClassWithMethodLevelInterceptorBindingOk {
+
+ @CatInterceptorBinding
+ final private void foo() {
+ }
+
+ @CatInterceptorBinding
+ static final public void foo2() {
+ }
+
+ @CatInterceptorBinding
+ public void foo3() {
+ }
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassWithMethodLevelInterceptorBindingOk.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassWithMethodLevelInterceptorBindingWithFinalMethodBroken.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassWithMethodLevelInterceptorBindingWithFinalMethodBroken.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassWithMethodLevelInterceptorBindingWithFinalMethodBroken.java 2010-07-01
17:25:35 UTC (rev 23154)
@@ -0,0 +1,8 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.interceptors;
+
+public class ClassWithMethodLevelInterceptorBindingWithFinalMethodBroken {
+
+ @CatInterceptorBinding
+ public final void foo() {
+ }
+}
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/ClassWithMethodLevelInterceptorBindingWithFinalMethodBroken.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/FinalClassWithClassLevelInterceptorBindingBroken.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/FinalClassWithClassLevelInterceptorBindingBroken.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/FinalClassWithClassLevelInterceptorBindingBroken.java 2010-07-01
17:25:35 UTC (rev 23154)
@@ -0,0 +1,6 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.interceptors;
+
+@CatInterceptorBinding
+final public class FinalClassWithClassLevelInterceptorBindingBroken {
+
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/FinalClassWithClassLevelInterceptorBindingBroken.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/FinalClassWithMethodLevelInterceptorBindingBroken.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/FinalClassWithMethodLevelInterceptorBindingBroken.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/FinalClassWithMethodLevelInterceptorBindingBroken.java 2010-07-01
17:25:35 UTC (rev 23154)
@@ -0,0 +1,8 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.interceptors;
+
+final public class FinalClassWithMethodLevelInterceptorBindingBroken {
+
+ @InterceptorMethodStereotype
+ public void foo() {
+ }
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/FinalClassWithMethodLevelInterceptorBindingBroken.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/InterceptorMethodStereotype.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/InterceptorMethodStereotype.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/InterceptorMethodStereotype.java 2010-07-01
17:25:35 UTC (rev 23154)
@@ -0,0 +1,21 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.interceptors;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.enterprise.inject.Stereotype;
+
+@Stereotype
+@InterceptorStereotype
+@Target({ TYPE, METHOD, FIELD })
+@Retention(RUNTIME)
+@Documented
+public @interface InterceptorMethodStereotype {
+
+}
\ No newline at end of file
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/interceptors/InterceptorMethodStereotype.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
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
16:43:40 UTC (rev 23153)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/ValidationTest.java 2010-07-01
17:25:35 UTC (rev 23154)
@@ -1207,6 +1207,74 @@
}
/**
+ * 9.3. Binding an interceptor to a bean
+ * - managed bean has a class level interceptor binding and has a non-static,
non-private, final method
+ *
+ * @throws Exception
+ */
+ public void testClassLevelInterceptorBindingWithFinalMethodBroken() throws Exception {
+ IFile file =
tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/interceptors/ClassLevelInterceptorBindingWithFinalMethodBroken.java");
+ assertMarkerIsCreated(file, CDIValidationMessages.ILLEGAL_INTERCEPTOR_BINDING_METHOD,
6);
+ }
+
+ /**
+ * 9.3. Binding an interceptor to a bean
+ * - managed bean has a method level interceptor binding and this method is declared as
non-static, non-private, final
+ *
+ * @throws Exception
+ */
+ public void testClassWithMethodLevelInterceptorBindingWithFinalMethodBroken() throws
Exception {
+ IFile file =
tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/interceptors/ClassWithMethodLevelInterceptorBindingWithFinalMethodBroken.java");
+ assertMarkerIsCreated(file, CDIValidationMessages.ILLEGAL_INTERCEPTOR_BINDING_METHOD,
6);
+ }
+
+ /**
+ * 9.3. Binding an interceptor to a bean
+ * - managed bean has a class level interceptor binding and is declared final
+ *
+ * @throws Exception
+ */
+ public void testFinalClassWithClassLevelInterceptorBindingBroken() throws Exception {
+ IFile file =
tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/interceptors/FinalClassWithClassLevelInterceptorBindingBroken.java");
+ assertMarkerIsCreated(file, CDIValidationMessages.ILLEGAL_INTERCEPTOR_BINDING_CLASS,
4);
+ }
+
+ /**
+ * 9.3. Binding an interceptor to a bean
+ * - managed bean has a method level interceptor binding and is declared final
+ *
+ * @throws Exception
+ */
+ public void testFinalClassWithMethodLevelInterceptorBindingBroken() throws Exception {
+ IFile file =
tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/interceptors/FinalClassWithMethodLevelInterceptorBindingBroken.java");
+ assertMarkerIsCreated(file, CDIValidationMessages.ILLEGAL_INTERCEPTOR_BINDING_CLASS,
3);
+ }
+
+ /**
+ * 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
+ *
+ * @throws Exception
+ */
+ public void testClassLevelInterceptorBindingOk() throws Exception {
+ IFile file =
tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/interceptors/ClassLevelInterceptorBindingOk.java");
+ assertMarkerIsNotCreated(file,
CDIValidationMessages.ILLEGAL_INTERCEPTOR_BINDING_CLASS);
+ assertMarkerIsNotCreated(file,
CDIValidationMessages.ILLEGAL_INTERCEPTOR_BINDING_METHOD);
+ }
+
+ /**
+ * 9.3. Binding an interceptor to a bean
+ * - managed bean has a method level interceptor binding and is declared final or has a
non-static, non-private, final method
+ *
+ * @throws Exception
+ */
+ public void testClassWithMethodLevelInterceptorBindingOk() throws Exception {
+ IFile file =
tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/interceptors/ClassWithMethodLevelInterceptorBindingOk.java");
+ assertMarkerIsNotCreated(file,
CDIValidationMessages.ILLEGAL_INTERCEPTOR_BINDING_CLASS);
+ assertMarkerIsNotCreated(file,
CDIValidationMessages.ILLEGAL_INTERCEPTOR_BINDING_METHOD);
+ }
+
+ /**
* 10.4.2. Declaring an observer method
* - method has more than one parameter annotated @Observes
*