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 {}
+ }
+}