diff --git a/src/core/lombok/core/AnnotationValues.java b/src/core/lombok/core/AnnotationValues.java index 0408de8..fcd3639 100644 --- a/src/core/lombok/core/AnnotationValues.java +++ b/src/core/lombok/core/AnnotationValues.java @@ -374,7 +374,7 @@ public class AnnotationValues { } private String toFQ(String typeName) { - Class c; + String c; boolean fqn = typeName.indexOf('.') > -1; String prefix = fqn ? typeName.substring(0, typeName.indexOf('.')) : typeName; @@ -388,16 +388,16 @@ public class AnnotationValues { } c = tryClass(typeName); - if (c != null) return c.getName(); + if (c != null) return c; c = tryClass("java.lang." + typeName); - if (c != null) return c.getName(); + if (c != null) return c; //Try star imports for (String im : ast.getImportStatements()) { if (im.endsWith(".*")) { c = tryClass(im.substring(0, im.length() -1) + typeName); - if (c != null) return c.getName(); + if (c != null) return c; } } @@ -408,10 +408,17 @@ public class AnnotationValues { return null; } - - private Class tryClass(String name) { + + /** Attempts to locate the class with the given name. The default + * implementation simply uses the current classloader, subclasses + * should override it to provide an environment-specific way to locate + * classes. + * @param name name of the class to look for + * @return name of the class if found, null otherwise + */ + protected String tryClass(String name) { try { - return Class.forName(name); + return Class.forName(name).getName(); } catch (ClassNotFoundException e) { return null; } diff --git a/src/core/lombok/javac/Javac.java b/src/core/lombok/javac/Javac.java index 58a2420..e01e2c2 100644 --- a/src/core/lombok/javac/Javac.java +++ b/src/core/lombok/javac/Javac.java @@ -21,6 +21,7 @@ */ package lombok.javac; +import com.sun.tools.javac.code.Symbol.ClassSymbol; import java.lang.annotation.Annotation; import java.lang.reflect.Method; import java.lang.reflect.Modifier; @@ -134,7 +135,14 @@ public class Javac { }); } - return new AnnotationValues(type, values, node); + return new AnnotationValues(type, values, node) { + + @Override + protected String tryClass(String name) { + ClassSymbol cs = node.getTypeElement(name); + return (cs == null) ? null : cs.className(); + } + }; } /** diff --git a/src/core/lombok/javac/JavacAST.java b/src/core/lombok/javac/JavacAST.java index 9cfe7f3..3d31503 100644 --- a/src/core/lombok/javac/JavacAST.java +++ b/src/core/lombok/javac/JavacAST.java @@ -33,6 +33,7 @@ import javax.tools.JavaFileObject; import lombok.core.AST; import com.sun.tools.javac.code.Symtab; +import com.sun.tools.javac.code.Symbol; import com.sun.tools.javac.model.JavacElements; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.TreeMaker; @@ -42,6 +43,7 @@ import com.sun.tools.javac.tree.JCTree.JCClassDecl; import com.sun.tools.javac.tree.JCTree.JCCompilationUnit; import com.sun.tools.javac.tree.JCTree.JCExpression; import com.sun.tools.javac.tree.JCTree.JCFieldAccess; +import com.sun.tools.javac.tree.JCTree.JCIdent; import com.sun.tools.javac.tree.JCTree.JCImport; import com.sun.tools.javac.tree.JCTree.JCMethodDecl; import com.sun.tools.javac.tree.JCTree.JCStatement; @@ -87,7 +89,8 @@ public class JavacAST extends AST { } private static String packageDeclaration(JCCompilationUnit cu) { - return cu.pid instanceof JCFieldAccess ? cu.pid.toString() : null; + return (cu.pid instanceof JCFieldAccess || + cu.pid instanceof JCIdent) ? cu.pid.toString() : null; } private static Collection imports(JCCompilationUnit cu) { @@ -103,7 +106,11 @@ public class JavacAST extends AST { public Context getContext() { return context; } - + + public Symbol.ClassSymbol getTypeElement(CharSequence name) { + return elements.getTypeElement(name); + } + /** * Runs through the entire AST, starting at the compilation unit, calling the provided visitor's visit methods * for each node, depth first. diff --git a/src/core/lombok/javac/JavacNode.java b/src/core/lombok/javac/JavacNode.java index a0ee278..205a24d 100644 --- a/src/core/lombok/javac/JavacNode.java +++ b/src/core/lombok/javac/JavacNode.java @@ -27,6 +27,7 @@ import javax.tools.Diagnostic; import lombok.core.AST.Kind; +import com.sun.tools.javac.code.Symbol; import com.sun.tools.javac.code.Symtab; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.TreeMaker; @@ -154,7 +155,11 @@ public class JavacNode extends lombok.core.LombokNode