* @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()),
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);
+ }
}
/**
--- /dev/null
+/*
+ * 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;
+ }
+}