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