Fix a type annotation parsing bug
MOE_MIGRATED_REVID=137583183
diff --git a/java/com/google/turbine/parse/Parser.java b/java/com/google/turbine/parse/Parser.java
index ae37a5c..7d70c00 100644
--- a/java/com/google/turbine/parse/Parser.java
+++ b/java/com/google/turbine/parse/Parser.java
@@ -514,9 +514,9 @@
name = eatIdent();
return memberRest(access, annos, typaram, result, name);
}
+ case AT:
case LBRACK:
{
- eat(Token.LBRACK);
result =
new ClassTy(
position,
@@ -524,9 +524,12 @@
ident,
ImmutableList.<Type>of(),
typeAnnos);
+ typeAnnos = maybeAnnos();
+ eat(Token.LBRACK);
do {
result = new ArrTy(position, typeAnnos, result);
eat(Token.RBRACK);
+ typeAnnos = maybeAnnos();
} while (maybe(Token.LBRACK));
break;
}
diff --git a/javatests/com/google/turbine/lower/LowerIntegrationTest.java b/javatests/com/google/turbine/lower/LowerIntegrationTest.java
index e4cc8da..e775334 100644
--- a/javatests/com/google/turbine/lower/LowerIntegrationTest.java
+++ b/javatests/com/google/turbine/lower/LowerIntegrationTest.java
@@ -244,6 +244,7 @@
"bytecode_boolean_const.test",
"tyvar_bound.test",
"type_anno_hello.test",
+ "type_anno_array_dims.test",
};
List<Object[]> tests =
ImmutableList.copyOf(testCases).stream().map(x -> new Object[] {x}).collect(toList());
diff --git a/javatests/com/google/turbine/lower/testdata/type_anno_array_dims.test b/javatests/com/google/turbine/lower/testdata/type_anno_array_dims.test
new file mode 100644
index 0000000..c577264
--- /dev/null
+++ b/javatests/com/google/turbine/lower/testdata/type_anno_array_dims.test
@@ -0,0 +1,10 @@
+=== Test.java ===
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+@Target(ElementType.TYPE_USE) @interface A {}
+@Target(ElementType.TYPE_USE) @interface B {}
+
+class Test<T> {
+ private T @A [] [] @B [] values;
+}