fix enum's java presentation for annotations

Annotations for types should be presented as one at a line.

Bug: n/a
Test: atest aidl_unittests
Change-Id: I8311c57e2c0fc201942c6ba8d0c51f4d6e11491a
diff --git a/aidl_unittest.cpp b/aidl_unittest.cpp
index 8b9cde7..4c583bf 100644
--- a/aidl_unittest.cpp
+++ b/aidl_unittest.cpp
@@ -2417,15 +2417,24 @@
 
 TEST_F(AidlTest, ParseJavaPassthroughAnnotation) {
   io_delegate_.SetFileContents("a/IFoo.aidl", R"--(package a;
+    import a.MyEnum;
     @JavaPassthrough(annotation="@com.android.Alice(arg=com.android.Alice.Value.A)")
     @JavaPassthrough(annotation="@com.android.AliceTwo")
     interface IFoo {
         @JavaPassthrough(annotation="@com.android.Bob")
-        void foo(@JavaPassthrough(annotation="@com.android.Cat") int x);
+        void foo(@JavaPassthrough(annotation="@com.android.Cat") int x, MyEnum y);
         const @JavaPassthrough(annotation="@com.android.David") int A = 3;
     })--");
+  // JavaPassthrough should work with other types as well (e.g. enum)
+  io_delegate_.SetFileContents("a/MyEnum.aidl", R"--(package a;
+    @JavaPassthrough(annotation="@com.android.Alice(arg=com.android.Alice.Value.A)")
+    @JavaPassthrough(annotation="@com.android.AliceTwo")
+    @Backing(type="byte")
+    enum MyEnum {
+      a, b, c
+    })--");
 
-  Options java_options = Options::From("aidl --lang=java -o out a/IFoo.aidl");
+  Options java_options = Options::From("aidl -I . --lang=java -o out a/IFoo.aidl a/MyEnum.aidl");
   EXPECT_EQ(0, ::android::aidl::compile_aidl(java_options, io_delegate_));
 
   string java_out;
@@ -2439,14 +2448,21 @@
   // inline annotations with space at the end
   EXPECT_THAT(java_out, testing::HasSubstr("@com.android.Cat "));
 
+  EXPECT_TRUE(io_delegate_.GetWrittenContents("out/a/MyEnum.java", &java_out));
+  // type-decl-level annotations with newline at the end
+  EXPECT_THAT(java_out, testing::HasSubstr("@com.android.Alice(arg=com.android.Alice.Value.A)\n"));
+  EXPECT_THAT(java_out, testing::HasSubstr("@com.android.AliceTwo\n"));
+
   // Other backends shouldn't be bothered
-  Options cpp_options = Options::From("aidl --lang=cpp -o out -h out a/IFoo.aidl");
+  Options cpp_options =
+      Options::From("aidl -I . --lang=cpp -o out -h out a/IFoo.aidl a/MyEnum.aidl");
   EXPECT_EQ(0, ::android::aidl::compile_aidl(cpp_options, io_delegate_));
 
-  Options ndk_options = Options::From("aidl --lang=ndk -o out -h out a/IFoo.aidl");
+  Options ndk_options =
+      Options::From("aidl -I . --lang=ndk -o out -h out a/IFoo.aidl a/MyEnum.aidl");
   EXPECT_EQ(0, ::android::aidl::compile_aidl(ndk_options, io_delegate_));
 
-  Options rust_options = Options::From("aidl --lang=rust -o out a/IFoo.aidl");
+  Options rust_options = Options::From("aidl -I . --lang=rust -o out a/IFoo.aidl a/MyEnum.aidl");
   EXPECT_EQ(0, ::android::aidl::compile_aidl(rust_options, io_delegate_));
 }