[jbosstools-commits] JBoss Tools SVN: r23003 - in trunk: cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation and 5 other directories.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Thu Jun 24 13:47:48 EDT 2010


Author: akazakov
Date: 2010-06-24 13:47:47 -0400 (Thu, 24 Jun 2010)
New Revision: 23003

Added:
   trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/
   trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/Clazz.java
   trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/EnhancedLogger.java
   trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/IClazz.java
   trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/Logger.java
   trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/MockLogger.java
   trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampBroken.java
   trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLogger.java
   trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLoggerBroken.java
   trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLoggerWithMethod.java
   trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLoggerWithMethodBroken.java
   trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLogger.java
   trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLoggerBroken.java
   trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLoggerWithMethod.java
   trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLoggerWithMethodBroken.java
   trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampWithMethodBroken.java
   trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/beans.xml
Modified:
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/DecoratorBean.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/ValidationTest.java
   trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/util/EclipseJavaUtil.java
Log:
https://jira.jboss.org/jira/browse/JBIDE-2708 Added new validation rule: Delegate type does not implement or extend a decorated type of the decorator, or specifies different type parameters

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/DecoratorBean.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/DecoratorBean.java	2010-06-24 17:39:12 UTC (rev 23002)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/DecoratorBean.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -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, 
@@ -11,10 +11,10 @@
 package org.jboss.tools.cdi.internal.core.impl;
 
 import java.util.Set;
+
 import org.jboss.tools.cdi.core.IAnnotationDeclaration;
 import org.jboss.tools.cdi.core.IDecorator;
 import org.jboss.tools.cdi.core.IParametedType;
-import org.jboss.tools.cdi.internal.core.impl.definition.TypeDefinition;
 
 /**
  * 
@@ -25,16 +25,29 @@
 
 	public DecoratorBean() {}
 
+	/*
+	 * (non-Javadoc)
+	 * @see org.jboss.tools.cdi.core.IDecorator#getDecoratedTypes()
+	 */
 	public Set<IParametedType> getDecoratedTypes() {
-		return ((TypeDefinition)definition).getInheritedTypes();
+		return getLegalTypes();
+//		return ((TypeDefinition)definition).getInheritedTypes();
 	}
 
+	/*
+	 * (non-Javadoc)
+	 * @see org.jboss.tools.cdi.core.IDecorator#getDecoratorAnnotation()
+	 */
 	public IAnnotationDeclaration getDecoratorAnnotation() {
 		return getDefinition().getDecoratorAnnotation();
 	}
 
+	/*
+	 * (non-Javadoc)
+	 * @see org.jboss.tools.cdi.internal.core.impl.ClassBean#isEnabled()
+	 */
+	@Override
 	public boolean isEnabled() {
 		return !getCDIProject().getDecoratorClasses(getBeanClass().getFullyQualifiedName()).isEmpty();
 	}
-
-}
+}
\ No newline at end of file

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-06-24 17:39:12 UTC (rev 23002)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -10,7 +10,9 @@
  ******************************************************************************/
 package org.jboss.tools.cdi.internal.core.validation;
 
+import java.text.MessageFormat;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -29,6 +31,7 @@
 import org.eclipse.jdt.core.Flags;
 import org.eclipse.jdt.core.IAnnotation;
 import org.eclipse.jdt.core.IField;
+import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.IMemberValuePair;
 import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.IType;
@@ -290,6 +293,9 @@
 		if (reporter.isCancelled()) {
 			return;
 		}
+		if(bean.getBeanClass().isReadOnly()) {
+			return;
+		}
 		// Collect all relations between the bean and other CDI elements.
 		String name = bean.getName();
 		if (name != null) {
@@ -376,7 +382,9 @@
 		if(specializingBean==null) {
 			return;
 		}
-		validationContext.addLinkedCoreResource(bean.getSourcePath().toOSString(), specializingBean.getResource().getFullPath(), false);
+		if(!specializingBean.getBeanClass().isReadOnly()) {
+			validationContext.addLinkedCoreResource(bean.getSourcePath().toOSString(), specializingBean.getResource().getFullPath(), false);
+		}
 
 		String beanClassName = bean.getBeanClass().getElementName();
 		String beanName = bean instanceof IBeanMethod?beanClassName + "." + ((IBeanMethod)bean).getSourceMember().getElementName() + "()":beanClassName;
@@ -1276,14 +1284,17 @@
 
 		Set<IInjectionPoint> injections = decorator.getInjectionPoints();
 		Set<ITextSourceReference> delegates = new HashSet<ITextSourceReference>();
+		IInjectionPoint delegate = null;
 		for (IInjectionPoint injection : injections) {
 			ITextSourceReference delegateAnnotation = injection.getDelegateAnnotation();
 			if(delegateAnnotation!=null) {
 				if(injection instanceof IInjectionPointField) {
+					delegate = injection;
 					delegates.add(delegateAnnotation);
 				}
 				if(injection instanceof IInjectionPointParameter) {
 					if(((IInjectionPointParameter) injection).getBeanMethod().getAnnotation(CDIConstants.PRODUCES_ANNOTATION_TYPE_NAME)==null) {
+						delegate = injection;
 						delegates.add(delegateAnnotation);
 					} else {
 						/*
@@ -1311,8 +1322,99 @@
 			IAnnotationDeclaration declaration = decorator.getDecoratorAnnotation();
 			addError(CDIValidationMessages.MISSING_DELEGATE, CDIPreferences.MISSING_DELEGATE, declaration, decorator.getResource());
 		}
+
+		/*
+		 * 8.1.3. Decorator delegate injection points
+		 *  - delegate type does not implement or extend a decorated type of the decorator, or specifies different type parameters
+		 */
+		if(delegate!=null) {
+			IParametedType delegateParametedType = delegate.getType();
+			if(delegateParametedType!=null) {
+				IType delegateType = delegateParametedType.getType();
+				if(delegateType != null) {
+					if(!checkTheOnlySuper(decorator, delegateParametedType)) {
+						Set<IParametedType> decoratedParametedTypes = decorator.getDecoratedTypes();
+						List<String> supers = null;
+						if(!delegateType.isReadOnly()) {
+							validationContext.addLinkedCoreResource(decorator.getResource().getFullPath().toOSString(), delegateType.getResource().getFullPath(), false);
+						}
+						for (IParametedType decoratedParametedType : decoratedParametedTypes) {
+							IType decoratedType = decoratedParametedType.getType();
+							if(decoratedType==null) {
+								continue;
+							}
+							if(!decoratedType.isReadOnly()) {
+								validationContext.addLinkedCoreResource(decorator.getResource().getFullPath().toOSString(), decoratedType.getResource().getFullPath(), false);
+							}
+							String decoratedTypeName = decoratedType.getFullyQualifiedName();
+							// Ignore the type of the decorator class bean
+							if(decoratedTypeName.equals(decorator.getBeanClass().getFullyQualifiedName())) {
+								continue;
+							}
+							if(decoratedTypeName.equals("java.lang.Object")) { //$NON-NLS-1$
+								continue;
+							}
+							if(supers==null) {
+								supers = getSuppers(delegateParametedType);
+							}
+							if(supers.contains(decoratedParametedType.getSignature())) {
+								continue;
+							} else {
+								ITextSourceReference declaration = delegate.getDelegateAnnotation();
+								if(delegateParametedType instanceof ITypeDeclaration) {
+									declaration = (ITypeDeclaration)delegateParametedType;
+								}
+								String typeName = Signature.getSignatureSimpleName(decoratedParametedType.getSignature());
+								addError(MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, typeName), CDIPreferences.DELEGATE_HAS_ILLEGAL_TYPE, declaration, decorator.getResource());
+								break;
+							}
+						}
+					}
+				}
+			}
+		}
 	}
 
+	private boolean checkTheOnlySuper(IDecorator decorator, IParametedType delegatedType) {
+		try {
+			String superClassSignature = decorator.getBeanClass().getSuperclassTypeSignature();
+			String[] superInterfaceSignatures = decorator.getBeanClass().getSuperInterfaceTypeSignatures();
+			if(superClassSignature==null) {
+				if(superInterfaceSignatures.length==0) {
+					return true;
+				}
+				if(superInterfaceSignatures.length>1) {
+					return false;
+				}
+				IParametedType superType = cdiProject.getNature().getTypeFactory().getParametedType(decorator.getBeanClass(), superInterfaceSignatures[0]);
+				return superType.getSignature().equals(delegatedType.getSignature());
+			} else if(superInterfaceSignatures.length>0) {
+				return false;
+			}
+			IParametedType superType = cdiProject.getNature().getTypeFactory().getParametedType(decorator.getBeanClass(), superClassSignature);
+			return superType.getSignature().equals(delegatedType.getSignature());
+		} catch (JavaModelException e) {
+			CDICorePlugin.getDefault().logError(e);
+		}
+		return true;
+	}
+
+	private List<String> getSuppers(IParametedType type) {
+		try {
+			List<IType> types = EclipseJavaUtil.getSupperTypes(type.getType());
+			List<String> signatures = new ArrayList<String>();
+			for (IType iType : types) {
+				IParametedType superType = cdiProject.getNature().getTypeFactory().newParametedType(iType);
+				signatures.add(superType.getSignature());
+			}
+			signatures.add(type.getSignature());
+			return signatures;
+		} catch (JavaModelException e) {
+			CDICorePlugin.getDefault().logError(e);
+		}
+		return Collections.emptyList();
+	}
+
 	/*
 	 * 2.2.2. Restricting the bean types of a bean
 	 *  - bean class or producer method or field specifies a @Typed annotation, and the value member specifies a class which does not correspond to a type in the unrestricted set of bean types of a bean

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-06-24 17:39:12 UTC (rev 23002)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/errorList.txt	2010-06-24 17:47:47 UTC (rev 23003)
@@ -154,14 +154,14 @@
   or bean constructor method parameter is annotated @Delegate
 - bean class that is not a decorator has an injection point annotated @Delegate
 
+8.1.3. Decorated types of a decorator
+- delegate type does not implement or extend a decorated type of the decorator,
+  or specifies different type parameters
 
 
 
 
 
-8.1.3. Decorated types of a decorator
-- delegate type does not implement or extend a decorated type of the decorator,
-  or specifies different type parameters
 
 9.2. Declaring the interceptor bindings of an interceptor
 - interceptor for lifecycle callbacks declares an interceptor binding type 

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-06-24 17:39:12 UTC (rev 23002)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/messages.properties	2010-06-24 17:47:47 UTC (rev 23003)
@@ -68,7 +68,7 @@
 MISSING_DELEGATE=Decorator must have a delegate injection point [JSR-299 §8.1.2]
 ILLEGAL_INJECTION_POINT_DELEGATE=Injection point that is a producer method parameter cannot be annotated @Delegate [JSR-299 §8.1.2]
 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=Delegate type does not implement or extend a decorated type of the decorator, or specifies different type parameters
+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 declares an interceptor binding type that is defined @Target({TYPE, METHOD})
 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)
 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

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-06-24 17:39:12 UTC (rev 23002)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/preferences/CDIConfigurationBlock.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -111,7 +111,7 @@
 				{CDIPreferences.MISSING_DELEGATE, CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_missingDelegate_label},
 				{CDIPreferences.ILLEGAL_INJECTION_POINT_DELEGATE, CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_illegalInjectionPointDelegate_label},
 				{CDIPreferences.ILLEGAL_BEAN_DECLARING_DELEGATE, CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_illegalBeanDeclaringDelegate_label},
-//				{CDIPreferences.DELEGATE_HAS_ILLEGAL_TYPE, CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_delegateHasIllegalType_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.CONFLICTING_INTERCEPTOR_BINDINGS, CDIPreferencesMessages.CDIValidatorConfigurationBlock_pb_conflictingInterceptorBindings_label},

Added: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/Clazz.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/Clazz.java	                        (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/Clazz.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -0,0 +1,5 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates;
+
+public abstract class Clazz<T> implements Logger {
+
+}
\ No newline at end of file


Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/Clazz.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/EnhancedLogger.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/EnhancedLogger.java	                        (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/EnhancedLogger.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -0,0 +1,26 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates;
+
+/**
+ * @author pmuir
+ *
+ */
+public interface EnhancedLogger
+{
+
+}


Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/EnhancedLogger.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/IClazz.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/IClazz.java	                        (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/IClazz.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -0,0 +1,5 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates;
+
+public interface IClazz<T> {
+
+}
\ No newline at end of file


Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/IClazz.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/Logger.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/Logger.java	                        (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/Logger.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -0,0 +1,35 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates;
+
+import java.lang.reflect.Type;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author pmuir
+ *
+ */
+public interface Logger
+{
+
+   public static final Set<Type> TYPES = new HashSet<Type>(Arrays.asList(Logger.class));
+
+   public void log(String string);
+
+}


Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/Logger.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/MockLogger.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/MockLogger.java	                        (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/MockLogger.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -0,0 +1,41 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates;
+
+/**
+ * @author pmuir
+ *
+ */
+public class MockLogger implements Logger, EnhancedLogger
+{
+
+   private static String log = "";
+
+   public void log(String string)
+   {
+      log += string;
+   }
+
+   /**
+    * @return the log
+    */
+   public static String getLog()
+   {
+      return log;
+   }
+
+}


Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/MockLogger.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampBroken.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampBroken.java	                        (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampBroken.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -0,0 +1,11 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates;
+
+import javax.decorator.Decorator;
+import javax.decorator.Delegate;
+import javax.inject.Inject;
+
+ at Decorator
+public class TimestampBroken implements IClazz<Logger> {
+
+	@Inject @Delegate private IClazz<String> logger;
+}
\ No newline at end of file


Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampBroken.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLogger.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLogger.java	                        (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLogger.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -0,0 +1,12 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates;
+
+import javax.decorator.Decorator;
+import javax.decorator.Delegate;
+import javax.inject.Inject;
+
+ at Decorator
+public abstract class TimestampLogger implements Logger, EnhancedLogger {
+
+   @Inject @Delegate private MockLogger logger;
+
+}
\ No newline at end of file


Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLogger.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLoggerBroken.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLoggerBroken.java	                        (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLoggerBroken.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -0,0 +1,12 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates;
+
+import javax.decorator.Decorator;
+import javax.decorator.Delegate;
+import javax.inject.Inject;
+
+ at Decorator
+public abstract class TimestampLoggerBroken extends Clazz<Logger> implements Logger {
+
+   @Inject @Delegate private Clazz<String> logger;
+
+}
\ No newline at end of file


Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLoggerBroken.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLoggerWithMethod.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLoggerWithMethod.java	                        (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLoggerWithMethod.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -0,0 +1,13 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates;
+
+import javax.decorator.Decorator;
+import javax.decorator.Delegate;
+import javax.inject.Inject;
+
+ at Decorator
+public abstract class TimestampLoggerWithMethod implements Logger, EnhancedLogger {
+
+	@Inject void setInt(@Delegate MockLogger logger) {
+		
+	}
+}
\ No newline at end of file


Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLoggerWithMethod.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLoggerWithMethodBroken.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLoggerWithMethodBroken.java	                        (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLoggerWithMethodBroken.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -0,0 +1,12 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates;
+
+import javax.decorator.Decorator;
+import javax.decorator.Delegate;
+import javax.inject.Inject;
+
+ at Decorator
+public abstract class TimestampLoggerWithMethodBroken extends Clazz<String> implements Logger {
+
+	@Inject void setInt(@Delegate Clazz<Logger> logger) {
+	}
+}
\ No newline at end of file


Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampLoggerWithMethodBroken.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLogger.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLogger.java	                        (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLogger.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -0,0 +1,12 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates;
+
+import javax.decorator.Decorator;
+import javax.decorator.Delegate;
+import javax.inject.Inject;
+
+ at Decorator
+public abstract class TimestampParametedLogger extends Clazz<Logger> implements Logger {
+
+   @Inject @Delegate private Clazz<Logger> logger;
+   
+}
\ No newline at end of file


Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLogger.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLoggerBroken.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLoggerBroken.java	                        (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLoggerBroken.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -0,0 +1,12 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates;
+
+import javax.decorator.Decorator;
+import javax.decorator.Delegate;
+import javax.inject.Inject;
+
+ at Decorator
+public abstract class TimestampParametedLoggerBroken extends Clazz<String> {
+
+   @Inject @Delegate private Clazz<Logger> logger;
+
+}
\ No newline at end of file


Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLoggerBroken.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLoggerWithMethod.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLoggerWithMethod.java	                        (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLoggerWithMethod.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -0,0 +1,12 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates;
+
+import javax.decorator.Decorator;
+import javax.decorator.Delegate;
+import javax.inject.Inject;
+
+ at Decorator
+public abstract class TimestampParametedLoggerWithMethod extends Clazz<String> implements Logger {
+
+   @Inject void setInt(@Delegate Clazz<String> logger) {
+   }
+}
\ No newline at end of file


Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLoggerWithMethod.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLoggerWithMethodBroken.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLoggerWithMethodBroken.java	                        (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLoggerWithMethodBroken.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -0,0 +1,12 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates;
+
+import javax.decorator.Decorator;
+import javax.decorator.Delegate;
+import javax.inject.Inject;
+
+ at Decorator
+public abstract class TimestampParametedLoggerWithMethodBroken extends Clazz<Logger> {
+
+   @Inject void setInt(@Delegate Clazz<String> logger) {
+   }
+}
\ No newline at end of file


Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLoggerWithMethodBroken.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampWithMethodBroken.java
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampWithMethodBroken.java	                        (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampWithMethodBroken.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -0,0 +1,12 @@
+package org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates;
+
+import javax.decorator.Decorator;
+import javax.decorator.Delegate;
+import javax.inject.Inject;
+
+ at Decorator
+public class TimestampWithMethodBroken implements IClazz<String> {
+
+	@Inject void setInt(@Delegate IClazz<Logger> logger) {
+	}
+}
\ No newline at end of file


Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/TimestampWithMethodBroken.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/beans.xml
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/beans.xml	                        (rev 0)
+++ trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/beans.xml	2010-06-24 17:47:47 UTC (rev 23003)
@@ -0,0 +1,14 @@
+<beans> 
+   <decorators>
+      <class>org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates.TimestampBroken</class>
+      <class>org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates.TimestampLogger</class>
+      <class>org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates.TimestampLoggerBroken</class>
+      <class>org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates.TimestampLoggerWithMethod</class>
+      <class>org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates.TimestampLoggerWithMethodBroken</class>
+      <class>org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates.TimestampParametedLogger</class>
+      <class>org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates.TimestampParametedLoggerBroken</class>
+      <class>org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates.TimestampParametedLoggerWithMethod</class>
+      <class>org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates.TimestampParametedLoggerWithMethodBroken</class>
+      <class>org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates.TimestampWithMethodBroken</class>
+   </decorators>
+</beans>


Property changes on: trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/jbt/validation/decorators/delegates/beans.xml
___________________________________________________________________
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-06-24 17:39:12 UTC (rev 23002)
+++ trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/ValidationTest.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -1043,8 +1043,8 @@
 	 */
 	public void testNonDecoratorWithDecoratesAnnotationNotOK() throws Exception {
 		IFile file = tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/decorators/definition/broken/nonDecoratorWithDecorates/Elf.java");
-		assertMarkerIsCreated(file, CDIValidationMessages.ILLEGAL_BEAN_DECLARING_DELEGATE);
-		tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/decorators/definition/inject/delegateField/TimestampLogger.java");
+		assertMarkerIsCreated(file, CDIValidationMessages.ILLEGAL_BEAN_DECLARING_DELEGATE, 24);
+		file = tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/decorators/definition/inject/delegateField/TimestampLogger.java");
 		assertMarkerIsNotCreated(file, CDIValidationMessages.ILLEGAL_BEAN_DECLARING_DELEGATE);
 		file = tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/decorators/definition/inject/delegateInitializerMethod/TimestampLogger.java");
 		assertMarkerIsNotCreated(file, CDIValidationMessages.ILLEGAL_BEAN_DECLARING_DELEGATE);
@@ -1053,6 +1053,109 @@
 	}
 
 	/**
+	 * 8.1.3. Decorator delegate injection points
+	 *  - delegate type does not implement or extend a decorated type of the decorator
+	 * 
+	 * @throws Exception
+	 */
+	public void testNotAllDecoratedTypesImplemented() throws Exception {
+		IFile file = tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/decorators/definition/broken/notAllDecoratedTypesImplemented/TimestampLogger.java");
+		assertMarkerIsCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "EnhancedLogger"), 31);
+
+		file = tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/decorators/delegates/TimestampLogger.java");
+		assertMarkerIsNotCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "Logger"));
+		assertMarkerIsNotCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "EnhancedLogger"));
+		assertMarkerIsNotCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "TimestampLogger"));
+		assertMarkerIsNotCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "Object"));
+		assertMarkerIsNotCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "MockLogger"));
+
+		file = tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/decorators/delegates/TimestampLoggerWithMethod.java");
+		assertMarkerIsNotCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "Logger"));
+		assertMarkerIsNotCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "EnhancedLogger"));
+		assertMarkerIsNotCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "TimestampLogger"));
+		assertMarkerIsNotCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "Object"));
+		assertMarkerIsNotCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "MockLogger"));
+	}
+
+	/**
+	 * 8.1.3. Decorator delegate injection points
+	 *  - delegate type specifies different type parameters
+	 * 
+	 * @throws Exception
+	 */
+	public void testDelegateSpecifiesDifferentTypeParameterInInterfcaeInFiled() throws Exception {
+		IFile file = tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/decorators/delegates/TimestampBroken.java");
+		assertMarkerIsCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "IClazz<org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates.Logger>"), 10);
+	}
+
+	/**
+	 * 8.1.3. Decorator delegate injection points
+	 *  - delegate type specifies different type parameters
+	 * 
+	 * @throws Exception
+	 */
+	public void testDelegateSpecifiesDifferentTypeParameterInInterfcaeInMethod() throws Exception {
+		IFile file = tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/decorators/delegates/TimestampWithMethodBroken.java");
+		assertMarkerIsCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "IClazz<java.lang.String>"), 10);
+	}
+
+	/**
+	 * 8.1.3. Decorator delegate injection points
+	 *  - delegate type specifies different type parameters
+	 * 
+	 * @throws Exception
+	 */
+	public void testDelegateSpecifiesDifferentTypeParameterWithInterfaceInFiled() throws Exception {
+		IFile file = tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/decorators/delegates/TimestampLoggerBroken.java");
+		assertMarkerIsCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "Clazz<org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates.Logger>"), 10);
+	}
+
+	/**
+	 * 8.1.3. Decorator delegate injection points
+	 *  - delegate type specifies different type parameters
+	 * 
+	 * @throws Exception
+	 */
+	public void testDelegateSpecifiesDifferentTypeParameterWithInterfaceInMethod() throws Exception {
+		IFile file = tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/decorators/delegates/TimestampLoggerWithMethodBroken.java");
+		assertMarkerIsCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "Clazz<java.lang.String>"), 10);
+	}
+
+	/**
+	 * 8.1.3. Decorator delegate injection points
+	 *  - delegate type specifies different type parameters
+	 * 
+	 * @throws Exception
+	 */
+	public void testDelegateSpecifiesDifferentTypeParameterInFiled() throws Exception {
+		IFile file = tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLoggerBroken.java");
+		assertMarkerIsCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "Clazz<java.lang.String>"), 10);
+
+		file = tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLogger.java");
+		assertMarkerIsNotCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "Logger"));
+		assertMarkerIsNotCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "Clazz<org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates.Logger>"));
+		assertMarkerIsNotCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "Test"));
+		assertMarkerIsNotCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "Object"));
+	}
+
+	/**
+	 * 8.1.3. Decorator delegate injection points
+	 *  - delegate type specifies different type parameters
+	 * 
+	 * @throws Exception
+	 */
+	public void testDelegateSpecifiesDifferentTypeParameterInMethod() throws Exception {
+		IFile file = tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLoggerWithMethodBroken.java");
+		assertMarkerIsCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "Clazz<org.jboss.jsr299.tck.tests.jbt.validation.decorators.delegates.Logger>"), 10);
+
+		file = tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/jbt/validation/decorators/delegates/TimestampParametedLoggerWithMethod.java");
+		assertMarkerIsNotCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "Logger"));
+		assertMarkerIsNotCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "Clazz<java.lang.String>"));
+		assertMarkerIsNotCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "Test"));
+		assertMarkerIsNotCreated(file, MessageFormat.format(CDIValidationMessages.DELEGATE_HAS_ILLEGAL_TYPE, "Object"));
+	}
+
+	/**
 	 * 10.4.2. Declaring an observer method
 	 *  - method has more than one parameter annotated @Observes
 	 *  
@@ -1128,6 +1231,6 @@
 	}
 
 	private static String convertMessageToPatern(String message) {
-		return message.replace("[", "\\[").replace("]", "\\]");
+		return message.replace("[", "\\[").replace("]", "\\]").replace("<", "\\<").replace(">", "\\>");
 	}
 }
\ No newline at end of file

Modified: trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/util/EclipseJavaUtil.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/util/EclipseJavaUtil.java	2010-06-24 17:39:12 UTC (rev 23002)
+++ trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/util/EclipseJavaUtil.java	2010-06-24 17:47:47 UTC (rev 23003)
@@ -10,10 +10,27 @@
  ******************************************************************************/ 
 package org.jboss.tools.common.model.util;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import org.eclipse.core.resources.IProject;
-import org.eclipse.jdt.core.*;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IField;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IMember;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.ITypeHierarchy;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.Signature;
 import org.jboss.tools.common.model.plugin.ModelPlugin;
 
 public class EclipseJavaUtil {
@@ -191,4 +208,17 @@
 		type = EclipseResourceUtil.getValidType(type.getJavaProject().getProject(), f);
 		return isDerivedClass(type, superType, checked);
 	}
-}
+
+	public static List<IType> getSupperTypes(IType type) throws JavaModelException {
+		ITypeHierarchy typeHierarchy = type.newSupertypeHierarchy(new NullProgressMonitor());
+		IType[] superTypes = typeHierarchy == null ? null : typeHierarchy.getAllSupertypes(type);
+		if(superTypes == null) {
+			return Collections.emptyList();
+		}
+		List<IType> suppers = new ArrayList<IType>();
+		for (int i = 0; i < superTypes.length; i++) {
+			suppers.add(superTypes[i]);
+		}
+		return suppers;
+	}
+}
\ No newline at end of file



More information about the jbosstools-commits mailing list