Reject unstructured parcelables in NDK/Rust
There's no way to get their definitions (or locations) in NDK/Rust. In
C++, `cpp_header` tells its header and in Java it's assumed to be found
in classpath.
If we need to support them in NDK/Rust, we can add a new keyword
`ndk_header` for NDK header and `rust_crate` for Rust crate for them.
Fixes: 204817775
Test: aidl_unittest
Change-Id: I10f26502de8a8a087adede7fa6a16757a25801a1
diff --git a/aidl_unittest.cpp b/aidl_unittest.cpp
index bf81cf2..d35e419 100644
--- a/aidl_unittest.cpp
+++ b/aidl_unittest.cpp
@@ -375,20 +375,11 @@
EXPECT_EQ(AidlError::BAD_TYPE, error);
}
-TEST_P(AidlTest, RejectUnsupportedParcelableAnnotations) {
- AidlError error;
- const string method = "package a; @nullable parcelable IFoo cpp_header \"IFoo.h\";";
- CaptureStderr();
- EXPECT_EQ(nullptr, Parse("a/IFoo.aidl", method, typenames_, GetLanguage(), &error));
- EXPECT_THAT(GetCapturedStderr(), HasSubstr("@nullable is not available."));
- EXPECT_EQ(AidlError::BAD_TYPE, error);
-}
-
TEST_P(AidlTest, RejectUnsupportedParcelableDefineAnnotations) {
AidlError error;
- const string method = "package a; @nullable parcelable IFoo { String a; String b; }";
+ const string method = "package a; @nullable parcelable Foo { String a; String b; }";
CaptureStderr();
- EXPECT_EQ(nullptr, Parse("a/IFoo.aidl", method, typenames_, GetLanguage(), &error));
+ EXPECT_EQ(nullptr, Parse("a/Foo.aidl", method, typenames_, GetLanguage(), &error));
EXPECT_THAT(GetCapturedStderr(), HasSubstr("@nullable is not available."));
EXPECT_EQ(AidlError::BAD_TYPE, error);
}
@@ -1248,6 +1239,20 @@
EXPECT_EQ(AidlError::BAD_TYPE, error);
}
+TEST_P(AidlTest, RejectUnstructuredParcelablesInNDKandRust) {
+ io_delegate_.SetFileContents("o/Foo.aidl", "package o; parcelable Foo cpp_header \"cpp/Foo.h\";");
+ const auto options =
+ Options::From("aidl --lang=" + to_string(GetLanguage()) + " -o out -h out -I. o/Foo.aidl");
+ const bool reject_unstructured_parcelables =
+ GetLanguage() == Options::Language::NDK || GetLanguage() == Options::Language::RUST;
+ const string expected_err = reject_unstructured_parcelables
+ ? "Refusing to generate code with unstructured parcelables"
+ : "";
+ CaptureStderr();
+ EXPECT_EQ(compile_aidl(options, io_delegate_), !reject_unstructured_parcelables);
+ EXPECT_THAT(GetCapturedStderr(), HasSubstr(expected_err));
+}
+
TEST_P(AidlTest, FailOnTooBigConstant) {
AidlError error;
const string expected_stderr =