Fix interface member visibility

Children of interfaces are public, transitive nested types may not be.

MOE_MIGRATED_REVID=139146815
diff --git a/java/com/google/turbine/binder/HierarchyBinder.java b/java/com/google/turbine/binder/HierarchyBinder.java
index 06fcee2..2b05d0e 100644
--- a/java/com/google/turbine/binder/HierarchyBinder.java
+++ b/java/com/google/turbine/binder/HierarchyBinder.java
@@ -169,9 +169,9 @@
 
   /** Returns true if the given type is declared in an interface. */
   private boolean enclosedByInterface(BoundClass c) {
-    while (c.owner() != null) {
-      c = env.get(c.owner());
-      switch (c.kind()) {
+    if (c.owner() != null) {
+      HeaderBoundClass info = env.get(c.owner());
+      switch (info.kind()) {
         case INTERFACE:
         case ANNOTATION:
           return true;
diff --git a/javatests/com/google/turbine/lower/LowerIntegrationTest.java b/javatests/com/google/turbine/lower/LowerIntegrationTest.java
index fa48e5d..d9d9cf0 100644
--- a/javatests/com/google/turbine/lower/LowerIntegrationTest.java
+++ b/javatests/com/google/turbine/lower/LowerIntegrationTest.java
@@ -268,6 +268,7 @@
       "anno_const_coerce.test",
       "const_octal_underscore.test",
       "const_boxed.test",
+      "interface_member_public.test",
     };
     List<Object[]> tests =
         ImmutableList.copyOf(testCases).stream().map(x -> new Object[] {x}).collect(toList());
diff --git a/javatests/com/google/turbine/lower/testdata/interface_member_public.test b/javatests/com/google/turbine/lower/testdata/interface_member_public.test
new file mode 100644
index 0000000..a18af8f
--- /dev/null
+++ b/javatests/com/google/turbine/lower/testdata/interface_member_public.test
@@ -0,0 +1,6 @@
+=== Test.java ===
+interface I {
+  class A {
+    static class B {}
+  }
+}