]> source.dussan.org Git - javassist.git/commitdiff
append an new API of hasAnnotation(String annotClsName) 57/head
authorkuzukami.sh <kuzukami+gihub@altpaper.net>
Mon, 13 Jul 2015 07:55:01 +0000 (16:55 +0900)
committerkuzukami.sh <kuzukami+git@altpaper.net>
Mon, 10 Aug 2015 16:18:29 +0000 (01:18 +0900)
src/main/javassist/CtBehavior.java
src/main/javassist/CtClass.java
src/main/javassist/CtClassType.java
src/main/javassist/CtField.java
src/main/javassist/CtMember.java
src/test/javassist/JvstTest4.java

index ede734224f3bb8a23f6cfb39a5508631dcdc1bb7..f82c0f2eb29601b8441808df939a298981f7a759 100644 (file)
@@ -161,12 +161,12 @@ public abstract class CtBehavior extends CtMember {
     /**
      * Returns true if the class has the specified annotation class.
      *
-     * @param clz the annotation class.
+     * @param clz the name of annotation class.
      * @return <code>true</code> if the annotation is found,
      *         otherwise <code>false</code>.
      * @since 3.11
      */
-    public boolean hasAnnotation(Class clz) {
+    public boolean hasAnnotation(String clz) {
        MethodInfo mi = getMethodInfo2();
        AnnotationsAttribute ainfo = (AnnotationsAttribute)
                    mi.getAttribute(AnnotationsAttribute.invisibleTag);  
index 0fca3ff7a61baded226d3774a1533a8698ac1767..8c39e37661d33564c57a658d6f0482e314e84ed2 100644 (file)
@@ -589,6 +589,17 @@ public abstract class CtClass {
      * @since 3.11
      */
     public boolean hasAnnotation(Class clz) {
+        return hasAnnotation(clz.getName());
+    }
+
+    /**
+     * Returns true if the class has the specified annotation class.
+     *
+     * @param annotClzName the name of annotation class.
+     * @return <code>true</code> if the annotation is found, otherwise <code>false</code>.
+     * @since 3.11
+     */
+    public boolean hasAnnotation(String annotClzName) {
         return false;
     }
 
index 8aa76b827891c18a8dfb8e108e0cec38aca9467b..cf171f09b81c4803924c35a23b32d38f87de64c4 100644 (file)
@@ -451,17 +451,26 @@ class CtClassType extends CtClass {
         cf.setAccessFlags(AccessFlag.of(mod));
     }
 
-    public boolean hasAnnotation(Class clz) {
+    //@Override
+    public boolean hasAnnotation(String annotClzName) {
         ClassFile cf = getClassFile2();
         AnnotationsAttribute ainfo = (AnnotationsAttribute)
-                cf.getAttribute(AnnotationsAttribute.invisibleTag);  
+                cf.getAttribute(AnnotationsAttribute.invisibleTag);
         AnnotationsAttribute ainfo2 = (AnnotationsAttribute)
-                cf.getAttribute(AnnotationsAttribute.visibleTag);  
-        return hasAnnotationType(clz, getClassPool(), ainfo, ainfo2);
+                cf.getAttribute(AnnotationsAttribute.visibleTag);
+        return hasAnnotationType(annotClzName, getClassPool(), ainfo, ainfo2);
     }
 
     static boolean hasAnnotationType(Class clz, ClassPool cp,
-                                     AnnotationsAttribute a1, AnnotationsAttribute a2)
+                                     AnnotationsAttribute a1,
+                                     AnnotationsAttribute a2)
+    {
+        return hasAnnotationType(clz.getName(), cp, a1, a2);
+    }
+
+    static boolean hasAnnotationType(String annotationClzNm, ClassPool cp,
+                                     AnnotationsAttribute a1,
+                                     AnnotationsAttribute a2)
     {
         Annotation[] anno1, anno2;
 
@@ -475,16 +484,17 @@ class CtClassType extends CtClass {
         else
             anno2 = a2.getAnnotations();
 
-        String typeName = clz.getName();
+        //        String typeName = clz.getName();
+        String typeName = annotationClzNm;
         if (anno1 != null)
-           for (int i = 0; i < anno1.length; i++)
-              if (anno1[i].getTypeName().equals(typeName))
-                  return true;
+            for (int i = 0; i < anno1.length; i++)
+                if (anno1[i].getTypeName().equals(typeName))
+                    return true;
 
         if (anno2 != null)
-           for (int i = 0; i < anno2.length; i++)
-              if (anno2[i].getTypeName().equals(typeName))
-                  return true;
+            for (int i = 0; i < anno2.length; i++)
+                if (anno2[i].getTypeName().equals(typeName))
+                    return true;
 
         return false;
     }
index dff540a05fdf19337643c613c6bc7e294989d67e..bf5125e25880a12bb7bf594338a89c97fa0d9899 100644 (file)
@@ -244,11 +244,11 @@ public class CtField extends CtMember {
     /**
      * Returns true if the class has the specified annotation class.
      *
-     * @param clz the annotation class.
+     * @param clz the name of annotation class.
      * @return <code>true</code> if the annotation is found, otherwise <code>false</code>.
      * @since 3.11
      */
-    public boolean hasAnnotation(Class clz) {
+    public boolean hasAnnotation(String clz) {
         FieldInfo fi = getFieldInfo2();
         AnnotationsAttribute ainfo = (AnnotationsAttribute)
                     fi.getAttribute(AnnotationsAttribute.invisibleTag);  
index ae141c65489c24ab9c798579c4380acea19f5ec3..63a26b56528e25ceab6b17cd215f3f2db1e97ac3 100644 (file)
@@ -30,7 +30,7 @@ public abstract class CtMember {
      */
     static class Cache extends CtMember {
         protected void extendToString(StringBuffer buffer) {}
-        public boolean hasAnnotation(Class clz) { return false; }
+        public boolean hasAnnotation(String clz) { return false; }
         public Object getAnnotation(Class clz)
             throws ClassNotFoundException { return null; }
         public Object[] getAnnotations()
@@ -214,7 +214,18 @@ public abstract class CtMember {
      * @return <code>true</code> if the annotation is found, otherwise <code>false</code>.
      * @since 3.11
      */
-    public abstract boolean hasAnnotation(Class clz);
+    public boolean hasAnnotation(Class clz) {
+        return hasAnnotation(clz.getName());
+    }
+
+    /**
+     * Returns true if the class has the specified annotation class.
+     *
+     * @param annotClzName the name of annotation class.
+     * @return <code>true</code> if the annotation is found, otherwise <code>false</code>.
+     * @since 3.11
+     */
+    public abstract boolean hasAnnotation(String annotClzName);
 
     /**
      * Returns the annotation if the class has the specified annotation class.
index 549102f0996ec0da5e6c0e1442184a669930858a..ac4c1e3b0e8d8b79957af3b124caf0063319c1fc 100644 (file)
@@ -101,6 +101,10 @@ public class JvstTest4 extends JvstTestRoot {
 
         assertTrue(cc.hasAnnotation(test4.Anno1.class));
         assertFalse(cc.hasAnnotation(java.lang.annotation.Documented.class));
+        
+        assertTrue(cc.hasAnnotation(test4.Anno1.class.getName()));
+        assertFalse(cc.hasAnnotation(java.lang.annotation.Documented.class.getName()));
+        
         assertEquals("empty", ((test4.Anno1)cc.getAnnotation(test4.Anno1.class)).value());
         assertNull(cc.getAnnotation(Deprecated.class));