Forbid @nullable ParcelableHolder

ParcelableHolder is supposed to be always initialized due to its
stability value. So, restrict using @nullable for ParcelableHolder

Bug: 146611855
Bug: 170807936
Test: atest aidl_unittests
Change-Id: I4b2b3a837b02161a04462e075d76a42a8a9e6b8d
diff --git a/aidl_unittest.cpp b/aidl_unittest.cpp
index e58c9ce..654e5e0 100644
--- a/aidl_unittest.cpp
+++ b/aidl_unittest.cpp
@@ -1343,6 +1343,24 @@
             GetCapturedStderr());
 }
 
+TEST_P(AidlTest, RejectNullableParcelableHolderField) {
+  io_delegate_.SetFileContents("Foo.aidl", "parcelable Foo { @nullable ParcelableHolder ext; }");
+  Options options =
+      Options::From("aidl Foo.aidl --lang=" + Options::LanguageToString(GetLanguage()));
+  const string expected_stderr = "ERROR: Foo.aidl:1.27-44: ParcelableHolder cannot be nullable.\n";
+  CaptureStderr();
+  EXPECT_NE(0, ::android::aidl::compile_aidl(options, io_delegate_));
+  if (GetLanguage() == Options::Language::RUST) {
+    EXPECT_EQ(
+        "ERROR: Foo.aidl:1.27-44: ParcelableHolder cannot be nullable.\n"
+        "ERROR: Foo.aidl:1.27-44: The Rust backend does not support ParcelableHolder "
+        "yet.\n",
+        GetCapturedStderr());
+    return;
+  }
+  EXPECT_EQ(expected_stderr, GetCapturedStderr());
+}
+
 TEST_F(AidlTest, ApiDump) {
   io_delegate_.SetFileContents(
       "foo/bar/IFoo.aidl",