]> source.dussan.org Git - javassist.git/commitdiff
improved the behavior of CtClass.getAnnotations() etc.
authorchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Tue, 10 Nov 2009 10:13:37 +0000 (10:13 +0000)
committerchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Tue, 10 Nov 2009 10:13:37 +0000 (10:13 +0000)
git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@503 30ef5769-5b8d-40dd-aea6-55b5d6557bb3

src/main/javassist/bytecode/annotation/Annotation.java
src/main/javassist/bytecode/annotation/MemberValue.java
src/main/javassist/bytecode/annotation/NoSuchClassError.java [new file with mode: 0644]

index 1156a460c60c50e27a42014bcc1cd816c2a229d4..075b6e628650ce0d925ecac06ee5379d41bd8238 100644 (file)
@@ -285,10 +285,11 @@ public class Annotation {
      * @param cl        class loader for loading an annotation type.
      * @param cp        class pool for obtaining class files.
      * @return the annotation
-     * @throws ClassNotFoundException when the class cannot found
+     * @throws ClassNotFoundException   if the class cannot found.
+     * @throws NoSuchClassError         if the class linkage fails.
      */
     public Object toAnnotationType(ClassLoader cl, ClassPool cp)
-        throws ClassNotFoundException
+        throws ClassNotFoundException, NoSuchClassError
     {
         return AnnotationImpl.make(cl,
                         MemberValue.loadClass(cl, getTypeName()),
index f2e709166bac35102d54c402be8b83359bfdfd3e..98c3e034c7a1ef8ad4663c678de40f09312229ad 100644 (file)
@@ -46,9 +46,14 @@ public abstract class MemberValue {
     abstract Class getType(ClassLoader cl) throws ClassNotFoundException;
 
     static Class loadClass(ClassLoader cl, String classname)
-        throws ClassNotFoundException
+        throws ClassNotFoundException, NoSuchClassError
     {
-       return Class.forName(classname, true, cl);
+        try {
+            return Class.forName(classname, true, cl);
+        }
+        catch (LinkageError e) {
+            throw new NoSuchClassError(classname, e);
+        }
     }
 
     /**
diff --git a/src/main/javassist/bytecode/annotation/NoSuchClassError.java b/src/main/javassist/bytecode/annotation/NoSuchClassError.java
new file mode 100644 (file)
index 0000000..c6d1a12
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Javassist, a Java-bytecode translator toolkit.
+ * Copyright (C) 1999-2009 Shigeru Chiba. All Rights Reserved.
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License.  Alternatively, the contents of this file may be used under
+ * the terms of the GNU Lesser General Public License Version 2.1 or later.
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ */
+
+package javassist.bytecode.annotation;
+
+/**
+ * Thrown if the linkage fails.
+ * It keeps the name of the class that caused this error. 
+ */
+public class NoSuchClassError extends Error {
+    private String className;
+
+    /**
+     * Constructs an exception.
+     */
+    public NoSuchClassError(String className, Error cause) {
+        super(cause.toString(), cause);
+        this.className = className;
+    }
+
+    /**
+     * Returns the name of the class not found. 
+     */
+    public String getClassName() {
+        return className;
+    }
+}