Fix simple name lookup of fields

If the simple name of a constant field matches an imported type, keep
looking. Types should only be considered for qualified type names.

MOE_MIGRATED_REVID=137962449
diff --git a/java/com/google/turbine/binder/ConstEvaluator.java b/java/com/google/turbine/binder/ConstEvaluator.java
index 29a8836..e68e28a 100644
--- a/java/com/google/turbine/binder/ConstEvaluator.java
+++ b/java/com/google/turbine/binder/ConstEvaluator.java
@@ -215,19 +215,9 @@
     if (field != null) {
       return field;
     }
-    LookupResult result = scope.lookup(new LookupKey(t.name()));
-    if (result != null) {
-      ClassSymbol sym = (ClassSymbol) result.sym();
-      for (int i = 0; i < result.remaining().size() - 1; i++) {
-        sym = Resolve.resolve(env, sym, sym, result.remaining().get(i));
-        if (sym == null) {
-          return null;
-        }
-      }
-      field = Resolve.resolveField(env, owner, sym, Iterables.getLast(result.remaining()));
-      if (field != null) {
-        return field;
-      }
+    field = resolveQualifiedField(t);
+    if (field != null) {
+      return field;
     }
     ClassSymbol classSymbol = base.memberImports().singleMemberImport(simpleName);
     if (classSymbol != null) {
@@ -246,6 +236,24 @@
     return null;
   }
 
+  private FieldInfo resolveQualifiedField(ConstVarName t) {
+    if (t.name().size() <= 1) {
+      return null;
+    }
+    LookupResult result = scope.lookup(new LookupKey(t.name()));
+    if (result == null) {
+      return null;
+    }
+    ClassSymbol sym = (ClassSymbol) result.sym();
+    for (int i = 0; i < result.remaining().size() - 1; i++) {
+      sym = Resolve.resolve(env, sym, sym, result.remaining().get(i));
+      if (sym == null) {
+        return null;
+      }
+    }
+    return Resolve.resolveField(env, owner, sym, Iterables.getLast(result.remaining()));
+  }
+
   /** Search for constant variables in lexically enclosing scopes. */
   private FieldInfo lexicalField(
       Env<ClassSymbol, TypeBoundClass> env, ClassSymbol sym, String name) {
diff --git a/javatests/com/google/turbine/lower/LowerIntegrationTest.java b/javatests/com/google/turbine/lower/LowerIntegrationTest.java
index b7cacf0..b48928c 100644
--- a/javatests/com/google/turbine/lower/LowerIntegrationTest.java
+++ b/javatests/com/google/turbine/lower/LowerIntegrationTest.java
@@ -258,6 +258,7 @@
       "underscore_literal.test",
       "c_array.test",
       "type_anno_retention.test",
+      "member_import_clash.test",
     };
     List<Object[]> tests =
         ImmutableList.copyOf(testCases).stream().map(x -> new Object[] {x}).collect(toList());
diff --git a/javatests/com/google/turbine/lower/testdata/member_import_clash.test b/javatests/com/google/turbine/lower/testdata/member_import_clash.test
new file mode 100644
index 0000000..41647d9
--- /dev/null
+++ b/javatests/com/google/turbine/lower/testdata/member_import_clash.test
@@ -0,0 +1,26 @@
+=== e/E.java ===
+package e;
+public enum E {
+  ONE, TWO
+}
+
+=== two/TWO.java ===
+package two;
+public class TWO {}
+
+=== a/A.java ===
+package a;
+import e.E;
+import static e.E.ONE;
+public @interface A {
+  E[] value() default ONE;
+}
+
+=== Test.java ===
+import static e.E.TWO;
+import two.TWO;
+import a.A;
+@A({TWO}) // TWO is a field
+public class Test {
+  TWO two; // TWO is a type
+}