Author: scabanovich
Date: 2010-07-14 09:31:28 -0400 (Wed, 14 Jul 2010)
New Revision: 23405
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/BindingA.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/BindingB.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/BindingC.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/Q.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/X.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/Y.java
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/Y1.java
Modified:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/InterceptorDefinitionTest.java
Log:
https://jira.jboss.org/browse/JBIDE-6566
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/BindingA.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/BindingA.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/BindingA.java 2010-07-14
13:31:28 UTC (rev 23405)
@@ -0,0 +1,20 @@
+package org.jboss.jsr299.tck.tests.interceptors.definition.inheritance;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@InterceptorBinding
+@Inherited
+@Target({ TYPE, METHOD })
+@Retention(RUNTIME)
+@Documented
+public @interface BindingA {
+}
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/BindingA.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/BindingB.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/BindingB.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/BindingB.java 2010-07-14
13:31:28 UTC (rev 23405)
@@ -0,0 +1,19 @@
+package org.jboss.jsr299.tck.tests.interceptors.definition.inheritance;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@InterceptorBinding
+@Target({ TYPE, METHOD })
+@Retention(RUNTIME)
+@Documented
+public @interface BindingB {
+}
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/BindingB.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/BindingC.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/BindingC.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/BindingC.java 2010-07-14
13:31:28 UTC (rev 23405)
@@ -0,0 +1,21 @@
+package org.jboss.jsr299.tck.tests.interceptors.definition.inheritance;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.interceptor.InterceptorBinding;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@InterceptorBinding
+@Inherited
+@Target({ TYPE, METHOD })
+@Retention(RUNTIME)
+@Documented
+public @interface BindingC {
+ String value();
+}
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/BindingC.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/Q.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/Q.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/Q.java 2010-07-14
13:31:28 UTC (rev 23405)
@@ -0,0 +1,5 @@
+package org.jboss.jsr299.tck.tests.interceptors.definition.inheritance;
+
+@BindingC("c2")
+public class Q extends X {
+}
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/Q.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/X.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/X.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/X.java 2010-07-14
13:31:28 UTC (rev 23405)
@@ -0,0 +1,8 @@
+package org.jboss.jsr299.tck.tests.interceptors.definition.inheritance;
+
+@BindingA
+@BindingB
+@BindingC("c1")
+public class X {
+
+}
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/X.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/Y.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/Y.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/Y.java 2010-07-14
13:31:28 UTC (rev 23405)
@@ -0,0 +1,7 @@
+package org.jboss.jsr299.tck.tests.interceptors.definition.inheritance;
+
+import javax.interceptor.Interceptor;
+
+@Interceptor
+public class Y extends Q {
+}
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/Y.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/Y1.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/Y1.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/Y1.java 2010-07-14
13:31:28 UTC (rev 23405)
@@ -0,0 +1,7 @@
+package org.jboss.jsr299.tck.tests.interceptors.definition.inheritance;
+
+import javax.interceptor.Interceptor;
+
+@Interceptor
+public class Y1 extends X {
+}
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.core.test/resources/tck/tests/interceptors/definition/inheritance/Y1.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/InterceptorDefinitionTest.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/InterceptorDefinitionTest.java 2010-07-14
13:27:53 UTC (rev 23404)
+++
trunk/cdi/tests/org.jboss.tools.cdi.core.test/src/org/jboss/tools/cdi/core/test/tck/InterceptorDefinitionTest.java 2010-07-14
13:31:28 UTC (rev 23405)
@@ -10,11 +10,16 @@
******************************************************************************/
package org.jboss.tools.cdi.core.test.tck;
+import java.util.HashSet;
import java.util.Set;
+import org.eclipse.jdt.core.IAnnotation;
+import org.eclipse.jdt.core.IMemberValuePair;
import org.eclipse.jdt.core.JavaModelException;
import org.jboss.tools.cdi.core.IBean;
import org.jboss.tools.cdi.core.IClassBean;
+import org.jboss.tools.cdi.core.IInterceptorBinding;
+import org.jboss.tools.cdi.core.IInterceptorBindingDeclaration;
/**
* @author Alexey Kazakov
@@ -34,4 +39,84 @@
IClassBean interceptor = (IClassBean)bean;
assertFalse("The interceptor should inherites interceptor bindings",
interceptor.getInterceptorBindings().isEmpty());
}
-}
\ No newline at end of file
+
+ /**
+ * 4.1. Inheritance of type-level metadata.
+ * Suppose a class X is extended directly or indirectly by the bean class of a managed
+ * bean or session bean Y. If X is annotated with interceptor binding type Z then Y
+ * inherits the annotation if and only if Z declares the @Inherited meta-annotation
+ * and neither Y nor any intermediate class that is a subclass of X and a superclass of
Y
+ * declares an annotation of type Z.
+ * @throws JavaModelException
+ */
+ public void testInterceptorBindingInheritance() throws JavaModelException {
+ //Y inherits X indirectly through Q.
+ //X declares inheritable BindingA and BindingC and non-inheritable BindingB
+ //Q overrides declaring BindingC with another value.
+ Set<IBean> beans =
getBeans("org.jboss.jsr299.tck.tests.interceptors.definition.inheritance.Y");
+ assertEquals("Wrong number of the beans", 1, beans.size());
+ IClassBean bean = (IClassBean)beans.iterator().next();
+
+ Set<IInterceptorBinding> bs = bean.getInterceptorBindings();
+ assertEquals("Wrong number of interceptor bindings", 2, bs.size());
+ assertContainsBindings(bs,
"org.jboss.jsr299.tck.tests.interceptors.definition.inheritance.BindingA",
"org.jboss.jsr299.tck.tests.interceptors.definition.inheritance.BindingC");
+ assertNotContainsBindings(bs,
"tck.tests.interceptors.definition.inheritance.BindingB");
+
+ Set<IInterceptorBindingDeclaration> ds =
bean.getInterceptorBindingDeclarations(true);
+ assertEquals("Wrong number of interceptor binding declarations", 2,
ds.size());
+ assertContainsBindingDeclarationWithValue(ds,
"org.jboss.jsr299.tck.tests.interceptors.definition.inheritance.BindingC",
"c2");
+
+ //Y1 inherits X directly.
+ beans =
getBeans("org.jboss.jsr299.tck.tests.interceptors.definition.inheritance.Y1");
+ assertEquals("Wrong number of the beans", 1, beans.size());
+ bean = (IClassBean)beans.iterator().next();
+
+ bs = bean.getInterceptorBindings();
+ assertEquals("Wrong number of interceptor bindings", 2, bs.size());
+ assertContainsBindings(bs,
"org.jboss.jsr299.tck.tests.interceptors.definition.inheritance.BindingA",
"org.jboss.jsr299.tck.tests.interceptors.definition.inheritance.BindingC");
+ assertNotContainsBindings(bs,
"tck.tests.interceptors.definition.inheritance.BindingB");
+
+ ds = bean.getInterceptorBindingDeclarations(true);
+ assertEquals("Wrong number of interceptor binding declarations", 2,
ds.size());
+ assertContainsBindingDeclarationWithValue(ds,
"org.jboss.jsr299.tck.tests.interceptors.definition.inheritance.BindingC",
"c1");
+ }
+
+ void assertContainsBindings(Set<IInterceptorBinding> bs, String... classNames) {
+ Set<String> bsn = new HashSet<String>();
+ for (IInterceptorBinding b: bs) {
+ bsn.add(b.getSourceType().getFullyQualifiedName());
+ }
+ for (String cn: classNames) {
+ assertTrue("Set of interceptor bindings should include " + cn,
bsn.contains(cn));
+ }
+ }
+
+ void assertNotContainsBindings(Set<IInterceptorBinding> bs, String... classNames)
{
+ Set<String> bsn = new HashSet<String>();
+ for (IInterceptorBinding b: bs) {
+ bsn.add(b.getSourceType().getFullyQualifiedName());
+ }
+ for (String cn: classNames) {
+ assertFalse("Set of interceptor bindings should not include " + cn,
bsn.contains(cn));
+ }
+ }
+
+ void assertContainsBindingDeclarationWithValue(Set<IInterceptorBindingDeclaration>
bs, String className, String value) throws JavaModelException {
+ for (IInterceptorBindingDeclaration b: bs) {
+ if(className.equals(b.getInterceptorBinding().getSourceType().getFullyQualifiedName()))
{
+ IAnnotation a = b.getDeclaration();
+ IMemberValuePair[] ps = a.getMemberValuePairs();
+ for (IMemberValuePair p: ps) {
+ if(p.getMemberName().equals("value")) {
+ assertEquals(value, p.getValue());
+ return;
+ }
+ }
+ fail("Value " + value + " is not found at declaration.");
+ }
+ }
+ fail("Set of interceptor bindings should include " + className);
+
+ }
+
+}