[jboss-cvs] JBossAS SVN: r92203 - in projects/annotations/trunk/core: src/main/java/org/jboss/annotations/javalangreflect and 5 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Aug 10 14:55:43 EDT 2009


Author: jesper.pedersen
Date: 2009-08-10 14:55:43 -0400 (Mon, 10 Aug 2009)
New Revision: 92203

Added:
   projects/annotations/trunk/core/src/test/java/org/jboss/annotations/test/tests/classabstract/
   projects/annotations/trunk/core/src/test/java/org/jboss/annotations/test/tests/classabstract/Test.java
   projects/annotations/trunk/core/src/test/java/org/jboss/annotations/test/tests/classabstract/package.html
Modified:
   projects/annotations/trunk/core/build.xml
   projects/annotations/trunk/core/src/main/java/org/jboss/annotations/javalangreflect/JavaClass.java
   projects/annotations/trunk/core/src/main/java/org/jboss/annotations/javassistclasspool/JavassistClassPool.java
   projects/annotations/trunk/core/src/main/java/org/jboss/annotations/javassistinputstream/JavassistInputStream.java
   projects/annotations/trunk/core/src/test/java/org/jboss/annotations/test/ClassTests.java
Log:
[JBANN-18] Don't record annotations against abstract classes

Modified: projects/annotations/trunk/core/build.xml
===================================================================
--- projects/annotations/trunk/core/build.xml	2009-08-10 17:46:49 UTC (rev 92202)
+++ projects/annotations/trunk/core/build.xml	2009-08-10 18:55:43 UTC (rev 92203)
@@ -98,6 +98,9 @@
     </copy>
 
     <mkdir dir="${build.core.dir}/testjars" />
+    <jar destfile="${build.core.dir}/testjars/classabstract.jar"
+         basedir="${build.core.dir}/test"
+         includes="**/common/**, **/classabstract/**"/>
     <jar destfile="${build.core.dir}/testjars/classconstructor.jar"
          basedir="${build.core.dir}/test"
          includes="**/common/**, **/classconstructor/**"/>

Modified: projects/annotations/trunk/core/src/main/java/org/jboss/annotations/javalangreflect/JavaClass.java
===================================================================
--- projects/annotations/trunk/core/src/main/java/org/jboss/annotations/javalangreflect/JavaClass.java	2009-08-10 17:46:49 UTC (rev 92202)
+++ projects/annotations/trunk/core/src/main/java/org/jboss/annotations/javalangreflect/JavaClass.java	2009-08-10 18:55:43 UTC (rev 92203)
@@ -36,6 +36,7 @@
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.ArrayList;
@@ -47,7 +48,7 @@
 import java.util.logging.Logger;
 
 /**
- * An annotation scanner for JCA/SJC
+ * An annotation scanner using java.lang.reflect
  * @author <a href="mailto:jesper.pedersen at jboss.org">Jesper Pedersen</a>
  */
 public class JavaClass implements AnnotationScanner
@@ -102,7 +103,8 @@
                   if (trace)
                      log.finest("Class=" + clz.getName());
 
-                  if (!clz.isAnnotation())
+                  if (!clz.isAnnotation() &&
+                     (!Modifier.isAbstract(clz.getModifiers()) || clz.isInterface()))
                   {
                      java.lang.annotation.Annotation[] classAnnotations = clz.getAnnotations();
                      if (classAnnotations != null)

Modified: projects/annotations/trunk/core/src/main/java/org/jboss/annotations/javassistclasspool/JavassistClassPool.java
===================================================================
--- projects/annotations/trunk/core/src/main/java/org/jboss/annotations/javassistclasspool/JavassistClassPool.java	2009-08-10 17:46:49 UTC (rev 92202)
+++ projects/annotations/trunk/core/src/main/java/org/jboss/annotations/javassistclasspool/JavassistClassPool.java	2009-08-10 18:55:43 UTC (rev 92203)
@@ -49,11 +49,12 @@
 import javassist.CtField;
 import javassist.CtMethod;
 import javassist.LoaderClassPath;
+import javassist.Modifier;
 import javassist.NotFoundException;
 import javassist.bytecode.ClassFile;
 
 /**
- * An annotation scanner
+ * An annotation scanner using Javassist's ClassLoader
  * @author <a href="mailto:jesper.pedersen at jboss.org">Jesper Pedersen</a>
  */
 public class JavassistClassPool implements AnnotationScanner
@@ -115,7 +116,8 @@
                {
                   CtClass ctClass = cp.get(className);
 
-                  if (ctClass.getClassFile2().getMajorVersion() >= ClassFile.JAVA_5 && !ctClass.isAnnotation())
+                  if (ctClass.getClassFile2().getMajorVersion() >= ClassFile.JAVA_5 && !ctClass.isAnnotation() &&
+                     (!Modifier.isAbstract(ctClass.getModifiers()) || ctClass.isInterface()))
                   {
                      if (trace)
                         log.finest("Class=" + ctClass.getName());

Modified: projects/annotations/trunk/core/src/main/java/org/jboss/annotations/javassistinputstream/JavassistInputStream.java
===================================================================
--- projects/annotations/trunk/core/src/main/java/org/jboss/annotations/javassistinputstream/JavassistInputStream.java	2009-08-10 17:46:49 UTC (rev 92202)
+++ projects/annotations/trunk/core/src/main/java/org/jboss/annotations/javassistinputstream/JavassistInputStream.java	2009-08-10 18:55:43 UTC (rev 92203)
@@ -51,10 +51,11 @@
 import javassist.CtField;
 import javassist.CtMethod;
 import javassist.LoaderClassPath;
+import javassist.Modifier;
 import javassist.bytecode.ClassFile;
 
 /**
- * An annotation scanner
+ * An annotation scanner using Javassist and InputStream
  * @author <a href="mailto:jesper.pedersen at jboss.org">Jesper Pedersen</a>
  */
 public class JavassistInputStream implements AnnotationScanner
@@ -140,7 +141,8 @@
                         }
                      }
 
-                     if (isJava5.booleanValue() && !ctClass.isAnnotation())
+                     if (isJava5.booleanValue() && !ctClass.isAnnotation() && 
+                         (!Modifier.isAbstract(ctClass.getModifiers()) || ctClass.isInterface()))
                      {
                         if (trace)
                            log.finest("Class=" + ctClass.getName());

Modified: projects/annotations/trunk/core/src/test/java/org/jboss/annotations/test/ClassTests.java
===================================================================
--- projects/annotations/trunk/core/src/test/java/org/jboss/annotations/test/ClassTests.java	2009-08-10 17:46:49 UTC (rev 92202)
+++ projects/annotations/trunk/core/src/test/java/org/jboss/annotations/test/ClassTests.java	2009-08-10 18:55:43 UTC (rev 92203)
@@ -86,6 +86,25 @@
    }
 
    /**
+    * Class abstract
+    * @throws Throwable throwable exception 
+    */
+   @Test
+   public void testClassAbstract() throws Throwable
+   {
+      URL archive = getURL("classabstract.jar");
+      AnnotationRepository ar = scanner.scan(new URL[] {archive});
+
+      assertNotNull(ar);
+
+      assertFalse(ar.hasAnnotation(Deprecated.class));
+
+      List<Annotation> l = ar.getAnnotation(Deprecated.class);
+
+      assertNull(l);
+   }
+
+   /**
     * Class level
     * @throws Throwable throwable exception 
     */

Added: projects/annotations/trunk/core/src/test/java/org/jboss/annotations/test/tests/classabstract/Test.java
===================================================================
--- projects/annotations/trunk/core/src/test/java/org/jboss/annotations/test/tests/classabstract/Test.java	                        (rev 0)
+++ projects/annotations/trunk/core/src/test/java/org/jboss/annotations/test/tests/classabstract/Test.java	2009-08-10 18:55:43 UTC (rev 92203)
@@ -0,0 +1,31 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008-2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.annotations.test.tests.classabstract;
+
+/**
+ * Test
+ */
+ at Deprecated
+public abstract class Test
+{
+}

Added: projects/annotations/trunk/core/src/test/java/org/jboss/annotations/test/tests/classabstract/package.html
===================================================================
--- projects/annotations/trunk/core/src/test/java/org/jboss/annotations/test/tests/classabstract/package.html	                        (rev 0)
+++ projects/annotations/trunk/core/src/test/java/org/jboss/annotations/test/tests/classabstract/package.html	2009-08-10 18:55:43 UTC (rev 92203)
@@ -0,0 +1,3 @@
+<body>
+An abstract class with a class level annotation
+</body>




More information about the jboss-cvs-commits mailing list