aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJooyung Han <jooyung@google.com>2022-04-12 14:13:20 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-04-12 14:13:20 +0000
commite26acaef7997efa568d433598d3082b81f402af8 (patch)
tree4093f6616734c391f31198fe3f2a6bc622371269
parentaf9ba855fcd66c3b980cff584d3e3c47927588a3 (diff)
parent917c1299020e8aec57efa585d99922bcdb1622f4 (diff)
downloadaidl-e26acaef7997efa568d433598d3082b81f402af8.tar.gz
Fix @deprecated field of union in native backends am: 3497c5da19 am: cc86ab0ab5 am: 917c129902
Original change: https://android-review.googlesource.com/c/platform/system/tools/aidl/+/2060648 Change-Id: I5293eb7cc94d7ba6b55a6909c346cfa83b2fb0e7 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--aidl_to_cpp_common.cpp21
-rw-r--r--tests/android/aidl/tests/unions/EnumUnion.aidl2
-rw-r--r--tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/unions/EnumUnion.cpp17
-rw-r--r--tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/EnumUnion.h17
-rw-r--r--tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/unions/EnumUnion.java31
-rw-r--r--tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/unions/EnumUnion.cpp17
-rw-r--r--tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/unions/EnumUnion.h17
-rw-r--r--tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/EnumUnion.rs15
8 files changed, 132 insertions, 5 deletions
diff --git a/aidl_to_cpp_common.cpp b/aidl_to_cpp_common.cpp
index 589bb55a..682b6c88 100644
--- a/aidl_to_cpp_common.cpp
+++ b/aidl_to_cpp_common.cpp
@@ -425,9 +425,16 @@ void GenerateToString(CodeWriter& out, const AidlUnionDecl& parcelable) {
out << "os << \"" + parcelable.GetName() + "{\";\n";
out << "switch (getTag()) {\n";
for (const auto& f : parcelable.GetFields()) {
+ if (f->IsDeprecated()) {
+ out << "#pragma clang diagnostic push\n";
+ out << "#pragma clang diagnostic ignored \"-Wdeprecated-declarations\"\n";
+ }
const string tag = f->GetName();
out << "case " << tag << ": os << \"" << tag << ": \" << "
<< "::android::internal::ToString(get<" + tag + ">()); break;\n";
+ if (f->IsDeprecated()) {
+ out << "#pragma clang diagnostic pop\n";
+ }
}
out << "}\n";
out << "os << \"}\";\n";
@@ -651,6 +658,10 @@ void UnionWriter::ReadFromParcel(CodeWriter& out, const ParcelWriterContext& ctx
read_var(tag, *tag_type);
out << fmt::format("switch (static_cast<Tag>({})) {{\n", tag);
for (const auto& variable : decl.GetFields()) {
+ if (variable->IsDeprecated()) {
+ out << "#pragma clang diagnostic push\n";
+ out << "#pragma clang diagnostic ignored \"-Wdeprecated-declarations\"\n";
+ }
out << fmt::format("case {}: {{\n", variable->GetName());
out.Indent();
const auto& type = variable->GetType();
@@ -670,6 +681,9 @@ void UnionWriter::ReadFromParcel(CodeWriter& out, const ParcelWriterContext& ctx
out << "}\n";
out << fmt::format("return {}; }}\n", ctx.status_ok);
out.Dedent();
+ if (variable->IsDeprecated()) {
+ out << "#pragma clang diagnostic pop\n";
+ }
}
out << "}\n";
out << fmt::format("return {};\n", ctx.status_bad);
@@ -690,9 +704,16 @@ void UnionWriter::WriteToParcel(CodeWriter& out, const ParcelWriterContext& ctx)
out << fmt::format("if ({} != {}) return {};\n", status, ctx.status_ok, status);
out << "switch (getTag()) {\n";
for (const auto& variable : decl.GetFields()) {
+ if (variable->IsDeprecated()) {
+ out << "#pragma clang diagnostic push\n";
+ out << "#pragma clang diagnostic ignored \"-Wdeprecated-declarations\"\n";
+ }
out << fmt::format("case {}: return ", variable->GetName());
ctx.write_func(out, "get<" + variable->GetName() + ">()", variable->GetType());
out << ";\n";
+ if (variable->IsDeprecated()) {
+ out << "#pragma clang diagnostic pop\n";
+ }
}
out << "}\n";
out << "__assert2(__FILE__, __LINE__, __PRETTY_FUNCTION__, \"can't reach here\");\n";
diff --git a/tests/android/aidl/tests/unions/EnumUnion.aidl b/tests/android/aidl/tests/unions/EnumUnion.aidl
index 5f9bb051..817ea1cf 100644
--- a/tests/android/aidl/tests/unions/EnumUnion.aidl
+++ b/tests/android/aidl/tests/unions/EnumUnion.aidl
@@ -23,4 +23,6 @@ import android.aidl.tests.LongEnum;
union EnumUnion {
IntEnum intEnum = IntEnum.FOO;
LongEnum longEnum;
+ /** @deprecated do not use this */
+ int deprecatedField;
}
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/unions/EnumUnion.cpp b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/unions/EnumUnion.cpp
index b51ef52d..0261f25f 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/unions/EnumUnion.cpp
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/unions/EnumUnion.cpp
@@ -29,6 +29,19 @@ namespace unions {
set<longEnum>(std::move(_aidl_value));
}
return ::android::OK; }
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ case deprecatedField: {
+ int32_t _aidl_value;
+ if ((_aidl_ret_status = _aidl_parcel->readInt32(&_aidl_value)) != ::android::OK) return _aidl_ret_status;
+ if constexpr (std::is_trivially_copyable_v<int32_t>) {
+ set<deprecatedField>(_aidl_value);
+ } else {
+ // NOLINTNEXTLINE(performance-move-const-arg)
+ set<deprecatedField>(std::move(_aidl_value));
+ }
+ return ::android::OK; }
+ #pragma clang diagnostic pop
}
return ::android::BAD_VALUE;
}
@@ -38,6 +51,10 @@ namespace unions {
switch (getTag()) {
case intEnum: return _aidl_parcel->writeInt32(static_cast<int32_t>(get<intEnum>()));
case longEnum: return _aidl_parcel->writeInt64(static_cast<int64_t>(get<longEnum>()));
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ case deprecatedField: return _aidl_parcel->writeInt32(get<deprecatedField>());
+ #pragma clang diagnostic pop
}
__assert2(__FILE__, __LINE__, __PRETTY_FUNCTION__, "can't reach here");
}
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/EnumUnion.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/EnumUnion.h
index a65f9f0b..7a41b20f 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/EnumUnion.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/EnumUnion.h
@@ -28,10 +28,12 @@ public:
enum class Tag : int32_t {
intEnum = 0,
longEnum = 1,
+ deprecatedField __attribute__((deprecated("do not use this"))) = 2,
};
// Expose tag symbols for legacy code
static const inline Tag intEnum = Tag::intEnum;
static const inline Tag longEnum = Tag::longEnum;
+ static const inline Tag __attribute__((deprecated("do not use this"))) deprecatedField = Tag::deprecatedField;
template<typename _Tp>
static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, EnumUnion>;
@@ -109,12 +111,16 @@ public:
switch (getTag()) {
case intEnum: os << "intEnum: " << ::android::internal::ToString(get<intEnum>()); break;
case longEnum: os << "longEnum: " << ::android::internal::ToString(get<longEnum>()); break;
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ case deprecatedField: os << "deprecatedField: " << ::android::internal::ToString(get<deprecatedField>()); break;
+ #pragma clang diagnostic pop
}
os << "}";
return os.str();
}
private:
- std::variant<::android::aidl::tests::IntEnum, ::android::aidl::tests::LongEnum> _value;
+ std::variant<::android::aidl::tests::IntEnum, ::android::aidl::tests::LongEnum, int32_t> _value;
}; // class EnumUnion
} // namespace unions
} // namespace tests
@@ -124,16 +130,21 @@ namespace android {
namespace aidl {
namespace tests {
namespace unions {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
[[nodiscard]] static inline std::string toString(EnumUnion::Tag val) {
switch(val) {
case EnumUnion::Tag::intEnum:
return "intEnum";
case EnumUnion::Tag::longEnum:
return "longEnum";
+ case EnumUnion::Tag::deprecatedField:
+ return "deprecatedField";
default:
return std::to_string(static_cast<int32_t>(val));
}
}
+#pragma clang diagnostic pop
} // namespace unions
} // namespace tests
} // namespace aidl
@@ -142,10 +153,12 @@ namespace android {
namespace internal {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wc++17-extensions"
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
template <>
-constexpr inline std::array<::android::aidl::tests::unions::EnumUnion::Tag, 2> enum_values<::android::aidl::tests::unions::EnumUnion::Tag> = {
+constexpr inline std::array<::android::aidl::tests::unions::EnumUnion::Tag, 3> enum_values<::android::aidl::tests::unions::EnumUnion::Tag> = {
::android::aidl::tests::unions::EnumUnion::Tag::intEnum,
::android::aidl::tests::unions::EnumUnion::Tag::longEnum,
+ ::android::aidl::tests::unions::EnumUnion::Tag::deprecatedField,
};
#pragma clang diagnostic pop
} // namespace internal
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/unions/EnumUnion.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/unions/EnumUnion.java
index 937d9d59..7519fd42 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/unions/EnumUnion.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/unions/EnumUnion.java
@@ -6,6 +6,7 @@ public final class EnumUnion implements android.os.Parcelable {
// tags for union fields
public final static int intEnum = 0; // android.aidl.tests.IntEnum intEnum;
public final static int longEnum = 1; // android.aidl.tests.LongEnum longEnum;
+ public final static int deprecatedField = 2; // int deprecatedField;
private int _tag;
private Object _value;
@@ -59,6 +60,23 @@ public final class EnumUnion implements android.os.Parcelable {
_set(longEnum, _value);
}
+ // int deprecatedField;
+
+ /** @deprecated do not use this */
+ @Deprecated
+ public static EnumUnion deprecatedField(int _value) {
+ return new EnumUnion(deprecatedField, _value);
+ }
+
+ public int getDeprecatedField() {
+ _assertTag(deprecatedField);
+ return (int) _value;
+ }
+
+ public void setDeprecatedField(int _value) {
+ _set(deprecatedField, _value);
+ }
+
public static final android.os.Parcelable.Creator<EnumUnion> CREATOR = new android.os.Parcelable.Creator<EnumUnion>() {
@Override
public EnumUnion createFromParcel(android.os.Parcel _aidl_source) {
@@ -80,6 +98,9 @@ public final class EnumUnion implements android.os.Parcelable {
case longEnum:
_aidl_parcel.writeLong(getLongEnum());
break;
+ case deprecatedField:
+ _aidl_parcel.writeInt(getDeprecatedField());
+ break;
}
}
@@ -97,6 +118,11 @@ public final class EnumUnion implements android.os.Parcelable {
_aidl_value = _aidl_parcel.readLong();
_set(_aidl_tag, _aidl_value);
return; }
+ case deprecatedField: {
+ int _aidl_value;
+ _aidl_value = _aidl_parcel.readInt();
+ _set(_aidl_tag, _aidl_value);
+ return; }
}
throw new IllegalArgumentException("union: unknown tag: " + _aidl_tag);
}
@@ -114,6 +140,7 @@ public final class EnumUnion implements android.os.Parcelable {
switch (_tag) {
case intEnum: return "android.aidl.tests.unions.EnumUnion.intEnum(" + (android.aidl.tests.IntEnum.$.toString(getIntEnum())) + ")";
case longEnum: return "android.aidl.tests.unions.EnumUnion.longEnum(" + (getLongEnum()) + ")";
+ case deprecatedField: return "android.aidl.tests.unions.EnumUnion.deprecatedField(" + (getDeprecatedField()) + ")";
}
throw new IllegalStateException("unknown field: " + _tag);
}
@@ -143,6 +170,7 @@ public final class EnumUnion implements android.os.Parcelable {
switch (_tag) {
case intEnum: return "intEnum";
case longEnum: return "longEnum";
+ case deprecatedField: return "deprecatedField";
}
throw new IllegalStateException("unknown field: " + _tag);
}
@@ -154,5 +182,8 @@ public final class EnumUnion implements android.os.Parcelable {
public static @interface Tag {
public static final int intEnum = 0;
public static final int longEnum = 1;
+ /** @deprecated do not use this */
+ @Deprecated
+ public static final int deprecatedField = 2;
}
}
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/unions/EnumUnion.cpp b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/unions/EnumUnion.cpp
index bb474307..c3f473fb 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/unions/EnumUnion.cpp
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/unions/EnumUnion.cpp
@@ -34,6 +34,19 @@ binder_status_t EnumUnion::readFromParcel(const AParcel* _parcel) {
set<longEnum>(std::move(_aidl_value));
}
return STATUS_OK; }
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ case deprecatedField: {
+ int32_t _aidl_value;
+ if ((_aidl_ret_status = ::ndk::AParcel_readData(_parcel, &_aidl_value)) != STATUS_OK) return _aidl_ret_status;
+ if constexpr (std::is_trivially_copyable_v<int32_t>) {
+ set<deprecatedField>(_aidl_value);
+ } else {
+ // NOLINTNEXTLINE(performance-move-const-arg)
+ set<deprecatedField>(std::move(_aidl_value));
+ }
+ return STATUS_OK; }
+ #pragma clang diagnostic pop
}
return STATUS_BAD_VALUE;
}
@@ -43,6 +56,10 @@ binder_status_t EnumUnion::writeToParcel(AParcel* _parcel) const {
switch (getTag()) {
case intEnum: return ::ndk::AParcel_writeData(_parcel, get<intEnum>());
case longEnum: return ::ndk::AParcel_writeData(_parcel, get<longEnum>());
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ case deprecatedField: return ::ndk::AParcel_writeData(_parcel, get<deprecatedField>());
+ #pragma clang diagnostic pop
}
__assert2(__FILE__, __LINE__, __PRETTY_FUNCTION__, "can't reach here");
}
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/unions/EnumUnion.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/unions/EnumUnion.h
index f52a45e3..2190f500 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/unions/EnumUnion.h
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/unions/EnumUnion.h
@@ -37,11 +37,13 @@ public:
enum class Tag : int32_t {
intEnum = 0,
longEnum = 1,
+ deprecatedField __attribute__((deprecated("do not use this"))) = 2,
};
// Expose tag symbols for legacy code
static const inline Tag intEnum = Tag::intEnum;
static const inline Tag longEnum = Tag::longEnum;
+ static const inline Tag __attribute__((deprecated("do not use this"))) deprecatedField = Tag::deprecatedField;
template<typename _Tp>
static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, EnumUnion>;
@@ -117,12 +119,16 @@ public:
switch (getTag()) {
case intEnum: os << "intEnum: " << ::android::internal::ToString(get<intEnum>()); break;
case longEnum: os << "longEnum: " << ::android::internal::ToString(get<longEnum>()); break;
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ case deprecatedField: os << "deprecatedField: " << ::android::internal::ToString(get<deprecatedField>()); break;
+ #pragma clang diagnostic pop
}
os << "}";
return os.str();
}
private:
- std::variant<::aidl::android::aidl::tests::IntEnum, ::aidl::android::aidl::tests::LongEnum> _value;
+ std::variant<::aidl::android::aidl::tests::IntEnum, ::aidl::android::aidl::tests::LongEnum, int32_t> _value;
};
} // namespace unions
} // namespace tests
@@ -134,16 +140,21 @@ namespace android {
namespace aidl {
namespace tests {
namespace unions {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
[[nodiscard]] static inline std::string toString(EnumUnion::Tag val) {
switch(val) {
case EnumUnion::Tag::intEnum:
return "intEnum";
case EnumUnion::Tag::longEnum:
return "longEnum";
+ case EnumUnion::Tag::deprecatedField:
+ return "deprecatedField";
default:
return std::to_string(static_cast<int32_t>(val));
}
}
+#pragma clang diagnostic pop
} // namespace unions
} // namespace tests
} // namespace aidl
@@ -153,10 +164,12 @@ namespace ndk {
namespace internal {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wc++17-extensions"
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
template <>
-constexpr inline std::array<aidl::android::aidl::tests::unions::EnumUnion::Tag, 2> enum_values<aidl::android::aidl::tests::unions::EnumUnion::Tag> = {
+constexpr inline std::array<aidl::android::aidl::tests::unions::EnumUnion::Tag, 3> enum_values<aidl::android::aidl::tests::unions::EnumUnion::Tag> = {
aidl::android::aidl::tests::unions::EnumUnion::Tag::intEnum,
aidl::android::aidl::tests::unions::EnumUnion::Tag::longEnum,
+ aidl::android::aidl::tests::unions::EnumUnion::Tag::deprecatedField,
};
#pragma clang diagnostic pop
} // namespace internal
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/EnumUnion.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/EnumUnion.rs
index 4d5fe951..6f26dcc9 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/EnumUnion.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/EnumUnion.rs
@@ -4,6 +4,8 @@
pub enum EnumUnion {
IntEnum(crate::mangled::_7_android_4_aidl_5_tests_7_IntEnum),
LongEnum(crate::mangled::_7_android_4_aidl_5_tests_8_LongEnum),
+ #[deprecated = "do not use this"]
+ DeprecatedField(i32),
}
impl Default for EnumUnion {
fn default() -> Self {
@@ -21,6 +23,10 @@ impl binder::Parcelable for EnumUnion {
parcel.write(&1i32)?;
parcel.write(v)
}
+ Self::DeprecatedField(v) => {
+ parcel.write(&2i32)?;
+ parcel.write(v)
+ }
}
}
fn read_from_parcel(&mut self, parcel: &binder::binder_impl::BorrowedParcel) -> std::result::Result<(), binder::StatusCode> {
@@ -36,6 +42,11 @@ impl binder::Parcelable for EnumUnion {
*self = Self::LongEnum(value);
Ok(())
}
+ 2 => {
+ let value: i32 = parcel.read()?;
+ *self = Self::DeprecatedField(value);
+ Ok(())
+ }
_ => {
Err(binder::StatusCode::BAD_VALUE)
}
@@ -51,9 +62,11 @@ pub mod Tag {
#![allow(non_upper_case_globals)]
use binder::declare_binder_enum;
declare_binder_enum! {
- Tag : [i32; 2] {
+ Tag : [i32; 3] {
intEnum = 0,
longEnum = 1,
+ #[deprecated = "do not use this"]
+ deprecatedField = 2,
}
}
}