Revert "Revert "PropagateAllowBlocking require SDK version""
This reverts commit eeb6e9d3c5cbbc0ae5f0b9338e240b5cffe04ed7.
Reason for revert: reland fix (b/216515124)
Change-Id: I3c6d60b2806c86ff884e3f961fa0453a659c18c7
diff --git a/aidl_unittest.cpp b/aidl_unittest.cpp
index 7b2a611..c783c0c 100644
--- a/aidl_unittest.cpp
+++ b/aidl_unittest.cpp
@@ -5148,6 +5148,24 @@
EXPECT_EQ(GetCapturedStderr(), "");
}
+TEST_F(AidlTest, PropagateBeforeTiramisu) {
+ io_delegate_.SetFileContents("p/IFoo.aidl",
+ "interface IFoo{\n"
+ " @PropagateAllowBlocking IBinder foo();\n"
+ "}");
+ CaptureStderr();
+ EXPECT_FALSE(compile_aidl(
+ Options::From("aidl --lang=java --min_sdk_version 30 -o out p/IFoo.aidl"), io_delegate_));
+ auto captured_stderr = GetCapturedStderr();
+ EXPECT_THAT(captured_stderr, HasSubstr("@PropagateAllowBlocking requires"));
+
+ CaptureStderr();
+ EXPECT_TRUE(
+ compile_aidl(Options::From("aidl --lang=java --min_sdk_version Tiramisu -o out p/IFoo.aidl"),
+ io_delegate_));
+ EXPECT_EQ(GetCapturedStderr(), "");
+}
+
TEST_F(AidlTest, RustNameOf_PfdFixedArray) {
auto pfd = typenames_.MakeResolvedType(AIDL_LOCATION_HERE, "ParcelFileDescriptor", false);
ASSERT_TRUE(pfd->MakeArray(FixedSizeArray{
diff --git a/check_valid.cpp b/check_valid.cpp
index e7bcb8d..2d7fb90 100644
--- a/check_valid.cpp
+++ b/check_valid.cpp
@@ -80,6 +80,16 @@
return true;
});
+ v.Check([&](const AidlTypeSpecifier& type) {
+ // TODO(b/151102494): annotation is applied on the return type
+ if (type.IsPropagateAllowBlocking() && options.GetMinSdkVersion() < JAVA_PROPAGATE_VERSION) {
+ AIDL_ERROR(type) << "@PropagateAllowBlocking requires " << JAVA_PROPAGATE_VERSION
+ << ". Current min_sdk_version is " << min_sdk_version << ".";
+ return false;
+ }
+ return true;
+ });
+
VisitTopDown(v, doc);
return v.success;
}
diff --git a/generate_java_binder.cpp b/generate_java_binder.cpp
index 6f61e68..fa6ea46 100644
--- a/generate_java_binder.cpp
+++ b/generate_java_binder.cpp
@@ -798,7 +798,6 @@
tryStatement->statements->Add(std::make_shared<VariableDeclaration>(_status, call));
// TODO(b/151102494): annotation is applied on the return type
- // TODO: Make it an error if min-sdk is below T (API 33?)
if (method.GetType().IsPropagateAllowBlocking()) {
tryStatement->statements->Add(
std::make_shared<LiteralStatement>("_reply.setPropagateAllowBlocking();\n"));
diff --git a/options.h b/options.h
index 064b805..204b371 100644
--- a/options.h
+++ b/options.h
@@ -41,6 +41,8 @@
constexpr uint32_t SDK_VERSION_current = 10000;
constexpr uint32_t SDK_VERSION_Tiramisu = SDK_VERSION_current;
+constexpr uint32_t JAVA_PROPAGATE_VERSION = SDK_VERSION_Tiramisu;
+
// A simple wrapper around ostringstream. This is just to make Options class
// copiable by the implicit copy constructor. If ostingstream is not wrapped,
// the implcit copy constructor is not generated because ostringstream isn't