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_));
}
diff --git a/generate_java.cpp b/generate_java.cpp
index 223a258..eff0bd9 100644
--- a/generate_java.cpp
+++ b/generate_java.cpp
@@ -411,7 +411,7 @@
code_writer->Write("package %s;\n", enum_decl->GetPackage().c_str());
code_writer->Write("%s\n", enum_decl->GetComments().c_str());
for (const std::string& annotation : generate_java_annotations(*enum_decl)) {
- code_writer->Write("%s", annotation.c_str());
+ code_writer->Write("%s\n", annotation.c_str());
}
code_writer->Write("public @interface %s {\n", enum_decl->GetName().c_str());
code_writer->Indent();