From ae87a26456245f19d97f8852ea21556cd78e97ef Mon Sep 17 00:00:00 2001
From: Reinier Zwitserloot <reinier@zwitserloot.com>
Date: Mon, 19 Dec 2011 20:09:40 +0100
Subject: Now the type resolver also finds top-level types in a compilation
 unit that name-shadow. Added tests for the type resolver.

---
 src/core/lombok/core/TypeResolver.java                   | 6 +++---
 src/eclipseAgent/lombok/eclipse/agent/PatchDelegate.java | 1 +
 2 files changed, 4 insertions(+), 3 deletions(-)

(limited to 'src')

diff --git a/src/core/lombok/core/TypeResolver.java b/src/core/lombok/core/TypeResolver.java
index 2fa24fd2..e5c3fac8 100644
--- a/src/core/lombok/core/TypeResolver.java
+++ b/src/core/lombok/core/TypeResolver.java
@@ -73,7 +73,7 @@ public class TypeResolver {
 		// because if you want to know if 'Foo' could refer to 'bar.Foo' when 'baz.Foo' is explicitly imported, the answer is no.
 		if (nameConflictInImportList(typeRef, potentialMatches)) return Collections.emptyList();
 		
-		// Check if any of our potentials is even imported in the first place. If not: no matches.
+		// Check if any of our potentials are even imported in the first place. If not: no matches.
 		// Note that (ourPackage.*) is added to the imports.
 		potentialMatches = eliminateImpossibleMatches(potentialMatches, library);
 		if (potentialMatches.isEmpty()) return Collections.emptyList();
@@ -84,7 +84,7 @@ public class TypeResolver {
 		LombokNode<?, ?, ?> n = context;
 		
 		mainLoop:
-		while (n != null && n.getKind() != Kind.COMPILATION_UNIT) {
+		while (n != null) {
 			if (n.getKind() == Kind.TYPE && typeRef.equals(n.getName())) {
 				// Our own class or one of our outer classes is named 'typeRef' so that's what 'typeRef' is referring to, not one of our type library classes.
 				return Collections.emptyList();
@@ -106,7 +106,7 @@ public class TypeResolver {
 				continue mainLoop;
 			}
 			
-			if (n.getKind() == Kind.TYPE) {
+			if (n.getKind() == Kind.TYPE || n.getKind() == Kind.COMPILATION_UNIT) {
 				for (LombokNode<?, ?, ?> child : n.down()) {
 					// Inner class that's visible to us has 'typeRef' as name, so that's the one being referred to, not one of our type library classes.
 					if (child.getKind() == Kind.TYPE && typeRef.equals(child.getName())) return Collections.emptyList();
diff --git a/src/eclipseAgent/lombok/eclipse/agent/PatchDelegate.java b/src/eclipseAgent/lombok/eclipse/agent/PatchDelegate.java
index cc72c206..e027b09d 100644
--- a/src/eclipseAgent/lombok/eclipse/agent/PatchDelegate.java
+++ b/src/eclipseAgent/lombok/eclipse/agent/PatchDelegate.java
@@ -108,6 +108,7 @@ public class PatchDelegate {
 			for (Annotation ann : field.annotations) {
 				if (ann.type == null) continue;
 				TypeBinding tb = ann.type.resolveType(decl.initializerScope);
+				if (tb == null) continue;
 				if (!charArrayEquals("lombok", tb.qualifiedPackageName())) continue;
 				if (!charArrayEquals("Delegate", tb.qualifiedSourceName())) continue;
 				return true;
-- 
cgit