aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-04-08 16:04:53 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-04-08 16:04:53 +0000
commit8d660c3714542415890b63dbfa906811aec183df (patch)
tree0d6bfd703e0be3051e7ee6ee3dc4aa3ef588ae97
parente235cd4c186cd840017499de5bb1ea66373386b1 (diff)
parent180592b84388ed395d2f4aea99214775697df06a (diff)
downloadhidl-aml_tz2_305400100.tar.gz
Change-Id: Ifb43c3d80faec717ed9eed9acfaf397a7f5c2e4c
-rw-r--r--AST.cpp23
-rw-r--r--Android.bp21
-rw-r--r--CompoundType.cpp93
-rw-r--r--CompoundType.h6
-rw-r--r--ConstantExpression.cpp6
-rw-r--r--Coordinator.cpp28
-rw-r--r--Coordinator.h3
-rw-r--r--EnumType.cpp16
-rw-r--r--EnumType.h4
-rw-r--r--Interface.cpp100
-rw-r--r--Interface.h5
-rw-r--r--MODULE_LICENSE_APACHE20
-rw-r--r--PREUPLOAD.cfg3
-rw-r--r--README.md8
-rw-r--r--Scope.cpp16
-rw-r--r--Scope.h3
-rw-r--r--TEST_MAPPING10
-rw-r--r--build/Android.bp9
-rw-r--r--build/hidl_interface.go393
-rw-r--r--build/hidl_package_root.go29
-rw-r--r--build/properties.go2
-rw-r--r--c2hal/Android.bp9
-rw-r--r--c2hal/c2hal_y.yy2
-rw-r--r--c2hal/test/Android.bp9
-rw-r--r--generateCpp.cpp16
-rw-r--r--generateInheritanceHierarchy.cpp9
-rw-r--r--generateJava.cpp14
-rw-r--r--hashing/Android.bp9
-rw-r--r--hidl2aidl/AidlHelper.cpp144
-rw-r--r--hidl2aidl/AidlHelper.h80
-rw-r--r--hidl2aidl/AidlInterface.cpp358
-rw-r--r--hidl2aidl/AidlNamedType.cpp81
-rw-r--r--hidl2aidl/AidlScope.cpp (renamed from hidl2aidl/test/1.2/IFoo.hal)20
-rw-r--r--hidl2aidl/AidlTranslate.cpp545
-rw-r--r--hidl2aidl/AidlType.cpp46
-rw-r--r--hidl2aidl/Android.bp11
-rw-r--r--hidl2aidl/main.cpp361
-rw-r--r--hidl2aidl/test/1.0/Android.bp22
-rw-r--r--hidl2aidl/test/1.0/IBar.hal4
-rw-r--r--hidl2aidl/test/1.0/IFoo.hal6
-rw-r--r--hidl2aidl/test/1.0/types.hal9
-rw-r--r--hidl2aidl/test/1.1/Android.bp22
-rw-r--r--hidl2aidl/test/1.1/IFoo.hal9
-rw-r--r--hidl2aidl/test/1.1/types.hal14
-rw-r--r--hidl2aidl/test/1.2/Android.bp24
-rw-r--r--hidl2aidl/test/1.2/types.hal74
-rw-r--r--hidl2aidl/test/1.3/IFoo.hal38
-rw-r--r--hidl2aidl/test/2.0/IFoo.hal7
-rw-r--r--hidl2aidl/test/3.0/Android.bp20
-rw-r--r--hidl2aidl/test/3.0/IFoo.hal25
-rw-r--r--hidl2aidl/test/Android.bp238
-rw-r--r--hidl2aidl/test/AndroidManifest.xml28
-rw-r--r--hidl2aidl/test/TranslateJavaTest.java346
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/ArrayFoo.aidl27
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/FooFlag.aidl27
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/IBar.aidl26
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/IBarInner.aidl24
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/IFoo.aidl34
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/IFooBigStruct.aidl25
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/NameCollision.aidl27
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/OnlyIn10.aidl24
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/OnlyIn11.aidl24
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/Outer.aidl25
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/OuterInner.aidl24
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/OverrideMe.aidl24
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/SafeUnionBar.aidl34
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/SafeUnionBarInnerStructBar.aidl25
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/UnionFoo.aidl26
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/Value.aidl29
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/VectorFoo.aidl27
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/extension/ArrayFoo.aidl25
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/extension/FooFlag.aidl24
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/extension/IFoo.aidl24
-rw-r--r--hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test2/IFoo.aidl26
-rw-r--r--hidl2aidl/test/cpp_test_compile.cpp70
-rw-r--r--hidl2aidl/test/extension/1.2/Android.bp28
-rw-r--r--hidl2aidl/test/extension/1.2/IFoo.hal7
-rw-r--r--hidl2aidl/test/extension/1.2/types.hal13
-rw-r--r--hidl2aidl/test/ndk_test_compile.cpp56
-rwxr-xr-xhidl2aidl/test/run_build_file_test.sh18
-rw-r--r--hidl2aidl/test/translate_cpp_test.cpp292
-rw-r--r--hidl2aidl/test/translate_ndk_test.cpp292
-rw-r--r--host_utils/Android.bp9
-rw-r--r--host_utils/Formatter.cpp2
-rw-r--r--lint/Android.bp9
-rw-r--r--lint/main.cpp5
-rw-r--r--lint/test/Android.bp13
-rw-r--r--main.cpp124
-rw-r--r--metadata/Android.bp34
-rw-r--r--metadata/parser.cpp7
-rw-r--r--metadata/test.cpp45
-rwxr-xr-xscripts/hal-queries.sh20
-rwxr-xr-xscripts/hidl2aidl-all-interfaces.sh26
-rwxr-xr-xscripts/run-tests.sh114
-rw-r--r--test/Android.bp9
-rw-r--r--test/build_variants/1.0/Android.bp9
-rw-r--r--test/build_variants/2.0/Android.bp9
-rw-r--r--test/build_variants/Android.bp9
-rw-r--r--test/cpp_impl_test/Android.bp21
-rw-r--r--test/error_test/Android.bp10
-rw-r--r--test/error_test/import_identifier/1.0/IFoo.hal25
-rw-r--r--test/error_test/import_identifier/1.0/required_error1
-rw-r--r--test/error_test/import_identifier/1.0/types.hal19
-rw-r--r--test/export_test/Android.bp9
-rw-r--r--test/format_test/1.0/Android.bp9
-rw-r--r--test/format_test/Android.bp10
-rw-r--r--test/hash_test/Android.bp59
-rw-r--r--test/hash_test/bad/current.txt (renamed from test/hash_test/incorrect_hash/current.txt)0
-rw-r--r--test/hash_test/bad/hash/1.0/IHash.hal (renamed from test/hash_test/incorrect_hash/hash/1.0/IHash.hal)0
-rw-r--r--test/hash_test/good/current.txt (renamed from test/hash_test/correct_hash/current.txt)2
-rw-r--r--test/hash_test/good/hash/1.0/IHash.hal (renamed from test/hash_test/correct_hash/hash/1.0/IHash.hal)0
-rw-r--r--test/hash_test/missing_hash/hash/1.0/IUnhashed.hal20
-rw-r--r--test/hidl_test/Android.bp43
-rw-r--r--test/hidl_test/Android.mk48
-rw-r--r--test/hidl_test/AndroidTest.xml34
-rw-r--r--test/hidl_test/hidl_test14
-rw-r--r--test/hidl_test/hidl_test.py74
-rw-r--r--test/hidl_test/hidl_test.xml40
-rw-r--r--test/hidl_test/hidl_test_client.cpp64
-rw-r--r--test/hidl_test/hidl_test_helper140
-rw-r--r--test/hidl_test/hidl_test_servers.cpp2
-rw-r--r--test/host_test/Android.bp10
-rw-r--r--test/host_utils_test/Android.bp10
-rw-r--r--test/java_impl_test/Android.bp13
-rw-r--r--test/java_partial_test/Android.bp9
-rw-r--r--test/java_test/Android.bp50
-rw-r--r--test/java_test/Android.mk18
-rw-r--r--test/java_test/hidl_test_java41
-rw-r--r--test/java_test/hidl_test_java.py81
-rw-r--r--test/java_test/hidl_test_java.xml39
-rw-r--r--test/java_test/hidl_test_java_native.cpp62
-rw-r--r--test/java_test/src/com/android/commands/hidl_test_java/HidlTestJava.java89
-rw-r--r--test/lazy_test/Android.bp12
-rw-r--r--test/lazy_test/hidl_lazy_test.cpp101
-rw-r--r--test/lazy_test/hidl_lazy_test_server.cpp41
-rw-r--r--test/lazy_test/hidl_lazy_test_server.rc5
-rw-r--r--test/lazy_test/hidl_lazy_test_server.xml3
-rwxr-xr-xtest/run_all_device_tests.sh62
-rwxr-xr-xtest/run_all_host_tests.sh (renamed from test/run_tradefed_incompatible_tests.sh)19
-rw-r--r--test/system_api_test/Android.bp9
-rw-r--r--test/utils_test/Android.bp10
-rw-r--r--test/utils_test/main.cpp18
-rw-r--r--test/vendor/1.0/Android.bp9
-rw-r--r--test/vendor/1.0/IVendor.hal7
-rw-r--r--test/vendor/1.1/Android.bp9
-rw-r--r--test/vendor/android/1.0/Android.bp9
-rw-r--r--test/version_test/Android.bp10
-rw-r--r--utils/Android.bp10
-rw-r--r--utils/FQName.cpp8
-rw-r--r--utils/include/hidl-util/FQName.h2
-rw-r--r--utils/include/hidl-util/FqInstance.h11
151 files changed, 1316 insertions, 5254 deletions
diff --git a/AST.cpp b/AST.cpp
index dc62a192..cd4b4dd2 100644
--- a/AST.cpp
+++ b/AST.cpp
@@ -376,12 +376,6 @@ status_t AST::checkForwardReferenceRestrictions() const {
}
bool AST::importFQName(const FQName& fqName) {
- if (!fqName.valueName().empty()) {
- std::cerr << "WARNING: must import type, but importing value: " << fqName.string()
- << ". Did you mean to use '::' instead of ':'?" << std::endl;
- // TODO(b/146215188): consider as error
- }
-
if (fqName.name().empty()) {
// import a package
@@ -847,23 +841,6 @@ void AST::getAllImportedNamesGranular(std::set<FQName> *allImportNames) const {
}
bool AST::isJavaCompatible() const {
- static const std::vector<std::string> keywords({
- "abstract", "continue", "for", "new", "switch", "assert",
- "default", "goto", "package", "synchronized", "boolean", "do",
- "if", "private", "this", "break", "double", "implements",
- "protected", "throw", "byte", "else", "import", "public",
- "throws", "case", "enum", "instanceof", "return", "transient",
- "catch", "extends", "int", "short", "try", "char",
- "final", "interface", "static", "void", "class", "finally",
- "long", "strictfp", "volatile", "const", "float", "native",
- "super", "while",
- });
- // java package shouldn't contain java keywords
- for (const auto& comp : mPackage.getPackageComponents()) {
- if (std::find(keywords.begin(), keywords.end(), comp) != keywords.end()) {
- return false;
- }
- }
return mRootScope.isJavaCompatible();
}
diff --git a/Android.bp b/Android.bp
index 09ecabe9..0f46b9bf 100644
--- a/Android.bp
+++ b/Android.bp
@@ -12,23 +12,6 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package {
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
-// Added automatically by a large-scale-change
-// See: http://go/android-license-faq
-license {
- name: "system_tools_hidl_license",
- visibility: [":__subpackages__"],
- license_kinds: [
- "SPDX-license-identifier-Apache-2.0",
- ],
- license_text: [
- "NOTICE",
- ],
-}
-
cc_defaults {
name: "hidl-gen-defaults",
cflags: [
@@ -78,6 +61,9 @@ java_defaults {
cc_library_host_static {
name: "libhidl-gen",
defaults: ["hidl-gen-defaults"],
+ cflags: [
+ "-Wno-bool-operation", // found in ConstantExpression.cpp:105
+ ],
srcs: [
"Annotation.cpp",
"ArrayType.cpp",
@@ -102,7 +88,6 @@ cc_library_host_static {
"TypeDef.cpp",
"VectorType.cpp",
],
- header_libs: ["libhwbinder_headers"], // for constants
shared_libs: [
"libbase",
"liblog",
diff --git a/CompoundType.cpp b/CompoundType.cpp
index aa12c10d..b35a35ce 100644
--- a/CompoundType.cpp
+++ b/CompoundType.cpp
@@ -296,7 +296,7 @@ void CompoundType::emitSafeUnionReaderWriterForInterfaces(
emitSafeUnionUnknownDiscriminatorError(out, "_hidl_d_primitive",
!isReader /*fatal*/);
if (isReader) {
- out << "_hidl_err = ::android::BAD_VALUE;\n";
+ out << "_hidl_err = BAD_VALUE;\n";
handleError(out, mode);
}
}).endl();
@@ -1013,41 +1013,60 @@ static void emitSafeUnionGetterDefinition(Formatter& out, const std::string& fie
}).endl().endl();
}
-void CompoundType::emitSafeUnionAssignDefinition(Formatter& out, const std::string& parameterName,
- bool usesMoveSemantics) const {
+void CompoundType::emitSafeUnionCopyAndAssignDefinition(Formatter& out,
+ const std::string& parameterName,
+ bool isCopyConstructor,
+ bool usesMoveSemantics) const {
out.block([&] {
- out << "if (this == &" << parameterName << ") { return *this; }\n\n";
+ if (!isCopyConstructor) {
+ out << "if (this == &"
+ << parameterName
+ << ") { return *this; }\n\n";
+ }
- out << "switch (" << parameterName << ".hidl_d) ";
+ out << "switch ("
+ << parameterName
+ << ".hidl_d) ";
+
+ out.block([&] {
+ for (const auto& field : mFields) {
+ const std::string parameterFieldName =
+ (parameterName + ".hidl_u." + field->name());
- out.block([&] {
- for (const auto& field : mFields) {
- const std::string parameterFieldName =
- (parameterName + ".hidl_u." + field->name());
+ const std::string argumentName =
+ usesMoveSemantics ? ("std::move(" + parameterFieldName + ")")
+ : parameterFieldName;
- const std::string argumentName =
- usesMoveSemantics ? ("std::move(" + parameterFieldName + ")")
- : parameterFieldName;
+ out << "case hidl_discriminator::" << field->name() << ": ";
- out << "case hidl_discriminator::" << field->name() << ": ";
+ if (isCopyConstructor) {
+ out.block([&] {
+ emitSafeUnionFieldConstructor(out, field, argumentName);
+ out << "break;\n";
+ }).endl();
+ } else {
+ out.block([&] {
+ out << field->name() << "(" << argumentName << ");\n"
+ << "break;\n";
+ }).endl();
+ }
+ }
- out.block([&] {
- out << field->name() << "(" << argumentName << ");\n"
- << "break;\n";
- }).endl();
- }
-
- out << "default: ";
- out.block([&] {
- emitSafeUnionUnknownDiscriminatorError(out, parameterName + ".hidl_d",
- true /*fatal*/);
- }).endl();
- }).endl();
-
- out << "return *this;\n";
- })
- .endl()
- .endl();
+ out << "default: ";
+ out.block([&] {
+ emitSafeUnionUnknownDiscriminatorError(out, parameterName + ".hidl_d",
+ true /*fatal*/);
+ }).endl();
+ }).endl();
+
+ if (isCopyConstructor) {
+ out << "\nhidl_d = "
+ << parameterName
+ << ".hidl_d;\n";
+ } else {
+ out << "return *this;\n";
+ }
+ }).endl().endl();
}
void CompoundType::emitSafeUnionTypeConstructors(Formatter& out) const {
@@ -1098,23 +1117,29 @@ void CompoundType::emitSafeUnionTypeConstructors(Formatter& out) const {
// Move constructor
out << fullName() << "::" << definedName() << "(" << definedName()
<< "&& other) : " << fullName() << "() ";
- out.block([&] { out << "*this = std::move(other);\n"; }).endl().endl();
+
+ emitSafeUnionCopyAndAssignDefinition(
+ out, "other", true /* isCopyConstructor */, true /* usesMoveSemantics */);
// Copy constructor
out << fullName() << "::" << definedName() << "(const " << definedName()
<< "& other) : " << fullName() << "() ";
- out.block([&] { out << "*this = other;\n"; }).endl().endl();
+
+ emitSafeUnionCopyAndAssignDefinition(
+ out, "other", true /* isCopyConstructor */, false /* usesMoveSemantics */);
// Move assignment operator
out << fullName() << "& (" << fullName() << "::operator=)(" << definedName() << "&& other) ";
- emitSafeUnionAssignDefinition(out, "other", true /* usesMoveSemantics */);
+ emitSafeUnionCopyAndAssignDefinition(
+ out, "other", false /* isCopyConstructor */, true /* usesMoveSemantics */);
// Copy assignment operator
out << fullName() << "& (" << fullName() << "::operator=)(const " << definedName()
<< "& other) ";
- emitSafeUnionAssignDefinition(out, "other", false /* usesMoveSemantics */);
+ emitSafeUnionCopyAndAssignDefinition(
+ out, "other", false /* isCopyConstructor */, false /* usesMoveSemantics */);
}
void CompoundType::emitSafeUnionTypeDefinitions(Formatter& out) const {
diff --git a/CompoundType.h b/CompoundType.h
index 9a4c41cc..566427c1 100644
--- a/CompoundType.h
+++ b/CompoundType.h
@@ -168,8 +168,10 @@ private:
void emitSafeUnionUnknownDiscriminatorError(Formatter& out, const std::string& value,
bool fatal) const;
- void emitSafeUnionAssignDefinition(Formatter& out, const std::string& parameterName,
- bool usesMoveSemantics) const;
+ void emitSafeUnionCopyAndAssignDefinition(Formatter& out,
+ const std::string& parameterName,
+ bool isCopyConstructor,
+ bool usesMoveSemantics) const;
CompoundLayout getCompoundAlignmentAndSize() const;
void emitPaddingZero(Formatter& out, size_t offset, size_t size) const;
diff --git a/ConstantExpression.cpp b/ConstantExpression.cpp
index 02fbf760..9413c9a3 100644
--- a/ConstantExpression.cpp
+++ b/ConstantExpression.cpp
@@ -102,13 +102,7 @@ T handleUnary(const std::string& op, T val) {
COMPUTE_UNARY(+)
COMPUTE_UNARY(-)
COMPUTE_UNARY(!)
-
-// bitwise negation of a boolean expression always evaluates to 'true'
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wbool-operation"
COMPUTE_UNARY(~)
-#pragma clang diagnostic pop
-
// Should not reach here.
SHOULD_NOT_REACH() << "Could not handleUnary for " << op << " " << val;
return static_cast<T>(0xdeadbeef);
diff --git a/Coordinator.cpp b/Coordinator.cpp
index 9c7c13f8..2e16cf1f 100644
--- a/Coordinator.cpp
+++ b/Coordinator.cpp
@@ -63,10 +63,6 @@ void Coordinator::setVerbose(bool verbose) {
mVerbose = verbose;
}
-void Coordinator::setRequireFrozen(bool requireFrozen) {
- mRequireFrozen = requireFrozen;
-}
-
bool Coordinator::isVerbose() const {
return mVerbose;
}
@@ -350,7 +346,7 @@ status_t Coordinator::parseOptional(const FQName& fqName, AST** ast, std::set<AS
}
const Coordinator::PackageRoot* Coordinator::findPackageRoot(const FQName& fqName) const {
- CHECK(!fqName.package().empty()) << fqName.string();
+ CHECK(!fqName.package().empty());
// Find the right package prefix and path for this FQName. For
// example, if FQName is "android.hardware.nfc@1.0::INfc", and the
@@ -840,13 +836,6 @@ Coordinator::HashStatus Coordinator::checkHash(const FQName& fqName) const {
// This ensures that it can be detected.
Hash::clearHash(ast->getFilename());
- if (mRequireFrozen) {
- std::cerr << "ERROR: Unfrozen " << fqName.string()
- << " cannot be referenced from context specifying -F (require_frozen)."
- << std::endl;
- return HashStatus::ERROR;
- }
-
return HashStatus::UNFROZEN;
}
@@ -872,10 +861,6 @@ status_t Coordinator::getUnfrozenDependencies(const FQName& fqName,
std::set<FQName> imported;
ast->getImportedPackages(&imported);
- // consider current package as dependency for types.hal and also to make
- // sure that if anything is frozen in a package, everything is.
- imported.insert(fqName.getPackageAndVersion());
-
// no circular dependency is already guaranteed by parsing
// indirect dependencies will be checked when the imported interface frozen checks are done
for (const FQName& importedPackage : imported) {
@@ -925,7 +910,7 @@ status_t Coordinator::enforceHashes(const FQName& currentPackage) const {
if (!unfrozenDependencies.empty()) {
std::cerr << "ERROR: Frozen interface " << currentFQName.string()
- << " cannot depend or be adjacent to unfrozen thing(s):" << std::endl;
+ << " cannot depend on unfrozen thing(s):" << std::endl;
for (const FQName& name : unfrozenDependencies) {
std::cerr << " (unfrozen) " << name.string() << std::endl;
}
@@ -972,13 +957,12 @@ bool Coordinator::MakeParentHierarchy(const std::string &path) {
}
void Coordinator::emitOptionsUsageString(Formatter& out) {
- out << "[-p <root path>] (-r <interface root>)+ [-R] [-F] [-v] [-d <depfile>]";
+ out << "[-p <root path>] (-r <interface root>)+ [-R] [-v] [-d <depfile>]";
}
void Coordinator::emitOptionsDetailString(Formatter& out) {
out << "-p <root path>: Android build root, defaults to $ANDROID_BUILD_TOP or pwd.\n"
<< "-R: Do not add default package roots if not specified in -r.\n"
- << "-F: Require all referenced ASTs to be frozen.\n"
<< "-r <package:path root>: E.g., android.hardware:hardware/interfaces.\n"
<< "-v: verbose output.\n"
<< "-d <depfile>: location of depfile to write to.\n";
@@ -992,7 +976,7 @@ void Coordinator::parseOptions(int argc, char** argv, const std::string& options
bool suppressDefaultPackagePaths = false;
int res;
- std::string optstr = options + "p:r:RFvd:";
+ std::string optstr = options + "p:r:Rvd:";
while ((res = getopt(argc, argv, optstr.c_str())) >= 0) {
switch (res) {
case 'v': {
@@ -1035,10 +1019,6 @@ void Coordinator::parseOptions(int argc, char** argv, const std::string& options
suppressDefaultPackagePaths = true;
break;
}
- case 'F': {
- setRequireFrozen(true);
- break;
- }
// something downstream should handle these cases
default: { handleArg(res, optarg); }
}
diff --git a/Coordinator.h b/Coordinator.h
index 766a8060..7715e560 100644
--- a/Coordinator.h
+++ b/Coordinator.h
@@ -42,8 +42,6 @@ struct Coordinator {
void setVerbose(bool value);
bool isVerbose() const;
- void setRequireFrozen(bool requireFrozen);
-
void setDepFile(const std::string& depFile);
const std::string& getOwner() const;
@@ -191,7 +189,6 @@ struct Coordinator {
// hidl-gen options
bool mVerbose = false;
- bool mRequireFrozen = false;
std::string mOwner;
// cache to parse().
diff --git a/EnumType.cpp b/EnumType.cpp
index 31835b3c..937f1471 100644
--- a/EnumType.cpp
+++ b/EnumType.cpp
@@ -111,22 +111,6 @@ status_t EnumType::validate() const {
return Scope::validate();
}
-status_t EnumType::validateAnnotations() const {
- for (const Annotation* annotation : annotations()) {
- const std::string name = annotation->name();
-
- if (name == "export") {
- continue;
- }
-
- std::cerr << "WARNING: Unrecognized annotation '" << name << "' for " << typeName()
- << " at " << location() << ". Only @export is supported." << std::endl;
- // This is a warning to avoid breaking downstream unnecessarily.
- // return UNKNOWN_ERROR;
- }
- return OK;
-}
-
status_t EnumType::validateUniqueNames() const {
std::unordered_map<std::string, const EnumType*> registeredValueNames;
for (const auto* type : superTypeChain()) {
diff --git a/EnumType.h b/EnumType.h
index 7a1733d6..2093c37e 100644
--- a/EnumType.h
+++ b/EnumType.h
@@ -74,7 +74,6 @@ struct EnumType : public Scope {
status_t resolveInheritance() override;
status_t validate() const override;
- status_t validateAnnotations() const override;
status_t validateUniqueNames() const;
void emitJavaFieldInitializer(Formatter&, const std::string&) const override;
@@ -122,9 +121,8 @@ struct EnumType : public Scope {
void emitExportedHeader(Formatter& out, bool forJava) const override;
+ private:
std::vector<const EnumType*> typeChain() const;
-
- private:
std::vector<const EnumType*> superTypeChain() const;
const Annotation *findExportAnnotation() const;
diff --git a/Interface.cpp b/Interface.cpp
index 1307a0b9..af6315fd 100644
--- a/Interface.cpp
+++ b/Interface.cpp
@@ -36,16 +36,41 @@
#include <android-base/logging.h>
#include <hidl-util/Formatter.h>
#include <hidl-util/StringHelper.h>
-#include <hwbinder/IBinder.h>
namespace android {
+#define B_PACK_CHARS(c1, c2, c3, c4) \
+ ((((c1)<<24)) | (((c2)<<16)) | (((c3)<<8)) | (c4))
+
+/* It is very important that these values NEVER change. These values
+ * must remain unchanged over the lifetime of android. This is
+ * because the framework on a device will be updated independently of
+ * the hals on a device. If the hals are compiled with one set of
+ * transaction values, and the framework with another, then the
+ * interface between them will be destroyed, and the device will not
+ * work.
+ */
+enum {
+ /////////////////// User defined transactions
+ FIRST_CALL_TRANSACTION = 0x00000001,
+ LAST_CALL_TRANSACTION = 0x0effffff,
+ /////////////////// HIDL reserved
+ FIRST_HIDL_TRANSACTION = 0x0f000000,
+ HIDL_PING_TRANSACTION = B_PACK_CHARS(0x0f, 'P', 'N', 'G'),
+ HIDL_DESCRIPTOR_CHAIN_TRANSACTION = B_PACK_CHARS(0x0f, 'C', 'H', 'N'),
+ HIDL_GET_DESCRIPTOR_TRANSACTION = B_PACK_CHARS(0x0f, 'D', 'S', 'C'),
+ HIDL_SYSPROPS_CHANGED_TRANSACTION = B_PACK_CHARS(0x0f, 'S', 'Y', 'S'),
+ HIDL_LINK_TO_DEATH_TRANSACTION = B_PACK_CHARS(0x0f, 'L', 'T', 'D'),
+ HIDL_UNLINK_TO_DEATH_TRANSACTION = B_PACK_CHARS(0x0f, 'U', 'T', 'D'),
+ HIDL_SET_HAL_INSTRUMENTATION_TRANSACTION = B_PACK_CHARS(0x0f, 'I', 'N', 'T'),
+ HIDL_GET_REF_INFO_TRANSACTION = B_PACK_CHARS(0x0f, 'R', 'E', 'F'),
+ HIDL_DEBUG_TRANSACTION = B_PACK_CHARS(0x0f, 'D', 'B', 'G'),
+ HIDL_HASH_CHAIN_TRANSACTION = B_PACK_CHARS(0x0f, 'H', 'S', 'H'),
+ LAST_HIDL_TRANSACTION = 0x0fffffff,
+};
+
const std::unique_ptr<ConstantExpression> Interface::FLAG_ONE_WAY =
- std::make_unique<LiteralConstantExpression>(ScalarType::KIND_UINT32,
- hardware::IBinder::FLAG_ONEWAY, "oneway");
-const std::unique_ptr<ConstantExpression> Interface::FLAG_CLEAR_BUF =
- std::make_unique<LiteralConstantExpression>(ScalarType::KIND_UINT32,
- hardware::IBinder::FLAG_CLEAR_BUF, "clear buf");
+ std::make_unique<LiteralConstantExpression>(ScalarType::KIND_UINT32, 0x01, "oneway");
Interface::Interface(const std::string& localName, const FQName& fullName, const Location& location,
Scope* parent, const Reference<Type>& superType, const Hash* fileHash)
@@ -65,7 +90,7 @@ bool Interface::fillPingMethod(Method *method) const {
}
method->fillImplementation(
- hardware::IBinder::HIDL_PING_TRANSACTION,
+ HIDL_PING_TRANSACTION,
{
{IMPL_INTERFACE,
[](auto &out) {
@@ -96,7 +121,7 @@ bool Interface::fillLinkToDeathMethod(Method *method) const {
}
method->fillImplementation(
- hardware::IBinder::HIDL_LINK_TO_DEATH_TRANSACTION,
+ HIDL_LINK_TO_DEATH_TRANSACTION,
{
{IMPL_INTERFACE,
[](auto &out) {
@@ -140,7 +165,7 @@ bool Interface::fillUnlinkToDeathMethod(Method *method) const {
}
method->fillImplementation(
- hardware::IBinder::HIDL_UNLINK_TO_DEATH_TRANSACTION,
+ HIDL_UNLINK_TO_DEATH_TRANSACTION,
{
{IMPL_INTERFACE,
[](auto &out) {
@@ -188,7 +213,7 @@ bool Interface::fillSyspropsChangedMethod(Method *method) const {
}
method->fillImplementation(
- hardware::IBinder::HIDL_SYSPROPS_CHANGED_TRANSACTION,
+ HIDL_SYSPROPS_CHANGED_TRANSACTION,
{ { IMPL_INTERFACE, [](auto &out) {
out << "::android::report_sysprop_change();\n";
out << "return ::android::hardware::Void();\n";
@@ -206,7 +231,7 @@ bool Interface::fillSetHALInstrumentationMethod(Method *method) const {
}
method->fillImplementation(
- hardware::IBinder::HIDL_SET_HAL_INSTRUMENTATION_TRANSACTION,
+ HIDL_SET_HAL_INSTRUMENTATION_TRANSACTION,
{
{IMPL_INTERFACE,
[](auto &out) {
@@ -239,7 +264,7 @@ bool Interface::fillDescriptorChainMethod(Method *method) const {
}
method->fillImplementation(
- hardware::IBinder::HIDL_DESCRIPTOR_CHAIN_TRANSACTION,
+ HIDL_DESCRIPTOR_CHAIN_TRANSACTION,
{ { IMPL_INTERFACE, [this](auto &out) {
std::vector<const Interface *> chain = typeChain();
out << "_hidl_cb(";
@@ -294,7 +319,7 @@ bool Interface::fillHashChainMethod(Method *method) const {
const ArrayType *digestType = static_cast<const ArrayType *>(chainType->getElementType());
method->fillImplementation(
- hardware::IBinder::HIDL_HASH_CHAIN_TRANSACTION,
+ HIDL_HASH_CHAIN_TRANSACTION,
{ { IMPL_INTERFACE, [this, digestType](auto &out) {
std::vector<const Interface *> chain = typeChain();
out << "_hidl_cb(";
@@ -327,7 +352,7 @@ bool Interface::fillGetDescriptorMethod(Method *method) const {
}
method->fillImplementation(
- hardware::IBinder::HIDL_GET_DESCRIPTOR_TRANSACTION,
+ HIDL_GET_DESCRIPTOR_TRANSACTION,
{ { IMPL_INTERFACE, [this](auto &out) {
out << "_hidl_cb("
<< fullName()
@@ -356,7 +381,7 @@ bool Interface::fillGetDebugInfoMethod(Method *method) const {
"#endif\n";
method->fillImplementation(
- hardware::IBinder::HIDL_GET_REF_INFO_TRANSACTION,
+ HIDL_GET_REF_INFO_TRANSACTION,
{
{IMPL_INTERFACE,
[](auto &out) {
@@ -400,7 +425,7 @@ bool Interface::fillDebugMethod(Method *method) const {
return false;
}
- method->fillImplementation(hardware::IBinder::HIDL_DEBUG_TRANSACTION,
+ method->fillImplementation(HIDL_DEBUG_TRANSACTION,
{
{IMPL_INTERFACE,
[](auto& out) {
@@ -456,14 +481,14 @@ std::vector<const Reference<Type>*> Interface::getStrongReferences() const {
}
status_t Interface::resolveInheritance() {
- size_t serial = hardware::IBinder::FIRST_CALL_TRANSACTION;
+ size_t serial = FIRST_CALL_TRANSACTION;
for (const auto* ancestor : superTypeChain()) {
serial += ancestor->mUserMethods.size();
}
for (Method* method : mUserMethods) {
- if (serial > hardware::IBinder::LAST_CALL_TRANSACTION) {
- std::cerr << "ERROR: More than " << hardware::IBinder::LAST_CALL_TRANSACTION
+ if (serial > LAST_CALL_TRANSACTION) {
+ std::cerr << "ERROR: More than " << LAST_CALL_TRANSACTION
<< " methods (including super and reserved) are not allowed at " << location()
<< std::endl;
return UNKNOWN_ERROR;
@@ -490,6 +515,9 @@ status_t Interface::validate() const {
err = validateUniqueNames();
if (err != OK) return err;
+ err = validateAnnotations();
+ if (err != OK) return err;
+
return Scope::validate();
}
@@ -533,19 +561,6 @@ status_t Interface::validateUniqueNames() const {
}
status_t Interface::validateAnnotations() const {
- for (const Annotation* annotation : annotations()) {
- const std::string name = annotation->name();
-
- if (name == "SensitiveData") {
- continue;
- }
-
- std::cerr << "WARNING: Unrecognized annotation '" << name << "' for " << typeName()
- << " at " << location() << ". Only @SensitiveData is supported." << std::endl;
- // ideally would be error, but we don't want to break downstream
- // return UNKNOWN_ERROR;
- }
-
for (const Method* method : methods()) {
for (const Annotation* annotation : method->annotations()) {
const std::string name = annotation->name();
@@ -555,13 +570,12 @@ status_t Interface::validateAnnotations() const {
}
std::cerr << "ERROR: Unrecognized annotation '" << name
- << "' for method: " << method->name() << " at " << method->location()
- << ". An annotation should be one of: "
- << "@entry, @exit, or @callflow." << std::endl;
+ << "' for method: " << method->name() << ". An annotation should be one of: "
+ << "entry, exit, callflow." << std::endl;
return UNKNOWN_ERROR;
}
}
- return OK; // not calling superclass which is more restrictive
+ return OK;
}
bool Interface::addAllReservedMethods(const std::map<std::string, Method*>& allReservedMethods) {
@@ -598,16 +612,6 @@ bool Interface::addAllReservedMethods(const std::map<std::string, Method*>& allR
return true;
}
-bool Interface::hasSensitiveDataAnnotation() const {
- for (const auto& annotation : annotations()) {
- if (annotation->name() == "SensitiveData") {
- return true;
- }
- }
-
- return false;
-}
-
const Interface* Interface::superType() const {
if (isIBase()) return nullptr;
if (!mSuperType->isInterface()) {
@@ -961,10 +965,6 @@ void Interface::emitVtsAttributeType(Formatter& out) const {
}
bool Interface::deepIsJavaCompatible(std::unordered_set<const Type*>* visited) const {
- if (hasSensitiveDataAnnotation()) {
- return false;
- }
-
if (superType() != nullptr && !superType()->isJavaCompatible(visited)) {
return false;
}
diff --git a/Interface.h b/Interface.h
index ea287579..ff475c58 100644
--- a/Interface.h
+++ b/Interface.h
@@ -37,7 +37,6 @@ extern const FQName gIManagerFqName;
struct Interface : public Scope {
const static std::unique_ptr<ConstantExpression> FLAG_ONE_WAY;
- const static std::unique_ptr<ConstantExpression> FLAG_CLEAR_BUF;
Interface(const std::string& localName, const FQName& fullName, const Location& location,
Scope* parent, const Reference<Type>& superType, const Hash* fileHash);
@@ -52,8 +51,6 @@ struct Interface : public Scope {
bool isIBase() const { return fqName() == gIBaseFqName; }
std::string typeName() const override;
- bool hasSensitiveDataAnnotation() const;
-
const Interface* superType() const;
// Super type chain to root type.
@@ -106,7 +103,7 @@ struct Interface : public Scope {
status_t resolveInheritance() override;
status_t validate() const override;
status_t validateUniqueNames() const;
- status_t validateAnnotations() const override;
+ status_t validateAnnotations() const;
void emitReaderWriter(
Formatter &out,
diff --git a/MODULE_LICENSE_APACHE2 b/MODULE_LICENSE_APACHE2
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/MODULE_LICENSE_APACHE2
diff --git a/PREUPLOAD.cfg b/PREUPLOAD.cfg
index e2ce6174..0a1b5b54 100644
--- a/PREUPLOAD.cfg
+++ b/PREUPLOAD.cfg
@@ -1,6 +1,9 @@
[Options]
ignore_merged_commits = true
+[Builtin Hooks Options]
+bpfmt = -s
+
[Builtin Hooks]
clang_format = true
bpfmt = true
diff --git a/README.md b/README.md
index a727e4fa..499cbd32 100644
--- a/README.md
+++ b/README.md
@@ -41,14 +41,6 @@ hidl-gen -L c++-impl -r vendor.foo:vendor/foo/interfaces vendor.foo.nfc@1.0
See update-makefiles-helper.sh and update-all-google-makefiles.sh for examples
of how to generate HIDL makefiles (using the -Landroidbp option).
-> **_NOTE:_** When using the -Landroidbp option, you can force generated
-> modules to be installed in `/system_ext` rather than other partition by putting a
-> marker file `.hidl_for_system_ext` alongside `*.hal` files.
-
-> **_NOTE:_** You can also install the vendor variant of the generated modules
-> to be installed in `/odm` rather than `/vendor` by putting a marker file
-> `.hidl_for_odm` alongside `*.hal` files.
-
# c2hal
This is a helper tool to convert C headers to valid .hal files.
diff --git a/Scope.cpp b/Scope.cpp
index 026a7ac5..588ba957 100644
--- a/Scope.cpp
+++ b/Scope.cpp
@@ -41,13 +41,6 @@ void Scope::addType(NamedType* type) {
mTypeIndexByName[type->definedName()] = index;
}
-status_t Scope::validate() const {
- status_t status = validateAnnotations();
- if (status != OK) return status;
-
- return NamedType::validate();
-}
-
status_t Scope::validateUniqueNames() const {
for (const auto* type : mTypes) {
if (mTypes[mTypeIndexByName.at(type->definedName())] != type) {
@@ -59,15 +52,6 @@ status_t Scope::validateUniqueNames() const {
return OK;
}
-status_t Scope::validateAnnotations() const {
- for (const Annotation* annotation : annotations()) {
- std::cerr << "WARNING: Unrecognized annotation '" << annotation->name() << "' at "
- << location() << ". No annotations are supported here." << std::endl;
- // This is a warning to avoid breaking downstream unnecessarily.
- }
- return OK;
-}
-
NamedType *Scope::lookupType(const FQName &fqName) const {
CHECK(fqName.package().empty() && fqName.version().empty());
if (!fqName.valueName().empty()) {
diff --git a/Scope.h b/Scope.h
index d67a300e..ea6ef2b6 100644
--- a/Scope.h
+++ b/Scope.h
@@ -40,9 +40,6 @@ struct Scope : public NamedType {
void addType(NamedType* type);
- status_t validate() const override;
- virtual status_t validateAnnotations() const;
-
status_t validateUniqueNames() const;
// lookup a type given an FQName.
diff --git a/TEST_MAPPING b/TEST_MAPPING
index 13ed681d..16467e1f 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -1,10 +1,16 @@
{
"presubmit": [
{
- "name": "hidl_test"
+ "name": "hidl-gen-host_test",
+ "host": true
},
{
- "name": "hidl_test_java"
+ "name": "libhidl-gen-host-utils_test",
+ "host": true
+ },
+ {
+ "name": "libhidl-gen-utils_test",
+ "host": true
},
{
"name": "libhidl-gen-utils_test"
diff --git a/build/Android.bp b/build/Android.bp
index 963a6904..ea227295 100644
--- a/build/Android.bp
+++ b/build/Android.bp
@@ -12,15 +12,6 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
bootstrap_go_package {
name: "hidl-soong-rules",
pkgPath: "android/soong/hidl",
diff --git a/build/hidl_interface.go b/build/hidl_interface.go
index 8ce3e4b7..c4f0256f 100644
--- a/build/hidl_interface.go
+++ b/build/hidl_interface.go
@@ -44,20 +44,20 @@ var (
hidlRule = pctx.StaticRule("hidlRule", blueprint.RuleParams{
Depfile: "${depfile}",
Deps: blueprint.DepsGCC,
- Command: "rm -rf ${genDir} && ${hidl} -R -p . -d ${depfile} -o ${genDir} -L ${language} ${options} ${fqName}",
+ Command: "rm -rf ${genDir} && ${hidl} -R -p . -d ${depfile} -o ${genDir} -L ${language} ${roots} ${fqName}",
CommandDeps: []string{"${hidl}"},
Description: "HIDL ${language}: ${in} => ${out}",
- }, "depfile", "fqName", "genDir", "language", "options")
+ }, "depfile", "fqName", "genDir", "language", "roots")
hidlSrcJarRule = pctx.StaticRule("hidlSrcJarRule", blueprint.RuleParams{
Depfile: "${depfile}",
Deps: blueprint.DepsGCC,
Command: "rm -rf ${genDir} && " +
- "${hidl} -R -p . -d ${depfile} -o ${genDir}/srcs -L ${language} ${options} ${fqName} && " +
+ "${hidl} -R -p . -d ${depfile} -o ${genDir}/srcs -L ${language} ${roots} ${fqName} && " +
"${soong_zip} -o ${genDir}/srcs.srcjar -C ${genDir}/srcs -D ${genDir}/srcs",
CommandDeps: []string{"${hidl}", "${soong_zip}"},
Description: "HIDL ${language}: ${in} => srcs.srcjar",
- }, "depfile", "fqName", "genDir", "language", "options")
+ }, "depfile", "fqName", "genDir", "language", "roots")
vtsRule = pctx.StaticRule("vtsRule", blueprint.RuleParams{
Command: "rm -rf ${genDir} && ${vtsc} -m${mode} -t${type} ${inputDir}/${packagePath} ${genDir}/${packagePath}",
@@ -66,10 +66,10 @@ var (
}, "mode", "type", "inputDir", "genDir", "packagePath")
lintRule = pctx.StaticRule("lintRule", blueprint.RuleParams{
- Command: "rm -f ${output} && touch ${output} && ${lint} -j -e -R -p . ${options} ${fqName} > ${output}",
+ Command: "rm -f ${output} && touch ${output} && ${lint} -j -e -R -p . ${roots} ${fqName} > ${output}",
CommandDeps: []string{"${lint}"},
Description: "hidl-lint ${fqName}: ${out}",
- }, "output", "options", "fqName")
+ }, "output", "roots", "fqName")
zipLintRule = pctx.StaticRule("zipLintRule", blueprint.RuleParams{
Command: "rm -f ${output} && ${soong_zip} -o ${output} -C ${intermediatesDir} ${files}",
@@ -78,10 +78,10 @@ var (
}, "output", "files")
inheritanceHierarchyRule = pctx.StaticRule("inheritanceHierarchyRule", blueprint.RuleParams{
- Command: "rm -f ${out} && ${hidl} -L inheritance-hierarchy ${options} ${fqInterface} > ${out}",
+ Command: "rm -f ${out} && ${hidl} -L inheritance-hierarchy ${roots} ${fqInterface} > ${out}",
CommandDeps: []string{"${hidl}"},
Description: "HIDL inheritance hierarchy: ${fqInterface} => ${out}",
- }, "options", "fqInterface")
+ }, "roots", "fqInterface")
joinJsonObjectsToArrayRule = pctx.StaticRule("joinJsonObjectsToArrayRule", blueprint.RuleParams{
Rspfile: "$out.rsp",
@@ -89,8 +89,6 @@ var (
Command: "rm -rf ${out} && " +
// Start the output array with an opening bracket.
"echo '[' >> ${out} && " +
- // Add prebuilt declarations
- "echo \"${extras}\" >> ${out} && " +
// Append each input file and a comma to the output.
"for file in $$(cat ${out}.rsp); do " +
"cat $$file >> ${out}; echo ',' >> ${out}; " +
@@ -98,11 +96,10 @@ var (
// Remove the last comma, replacing it with the closing bracket.
"sed -i '$$d' ${out} && echo ']' >> ${out}",
Description: "Joining JSON objects into array ${out}",
- }, "extras", "files")
+ }, "files")
)
func init() {
- android.RegisterModuleType("prebuilt_hidl_interfaces", prebuiltHidlInterfaceFactory)
android.RegisterModuleType("hidl_interface", hidlInterfaceFactory)
android.RegisterSingletonType("all_hidl_lints", allHidlLintsFactory)
android.RegisterMakeVarsProvider(pctx, makeVarsProvider)
@@ -131,7 +128,6 @@ func (m *hidlInterfacesMetadataSingleton) GenerateAndroidBuildActions(ctx androi
}
var inheritanceHierarchyOutputs android.Paths
- additionalInterfaces := []string{}
ctx.VisitDirectDeps(func(m android.Module) {
if !m.ExportedToMake() {
return
@@ -140,8 +136,6 @@ func (m *hidlInterfacesMetadataSingleton) GenerateAndroidBuildActions(ctx androi
if t.properties.Language == "inheritance-hierarchy" {
inheritanceHierarchyOutputs = append(inheritanceHierarchyOutputs, t.genOutputs.Paths()...)
}
- } else if t, ok := m.(*prebuiltHidlInterface); ok {
- additionalInterfaces = append(additionalInterfaces, t.properties.Interfaces...)
}
})
@@ -152,8 +146,7 @@ func (m *hidlInterfacesMetadataSingleton) GenerateAndroidBuildActions(ctx androi
Inputs: inheritanceHierarchyOutputs,
Output: m.inheritanceHierarchyPath,
Args: map[string]string{
- "extras": strings.Join(wrap("{\\\"interface\\\":\\\"", additionalInterfaces, "\\\"},"), " "),
- "files": strings.Join(inheritanceHierarchyOutputs.Strings(), " "),
+ "files": strings.Join(inheritanceHierarchyOutputs.Strings(), " "),
},
})
}
@@ -263,26 +256,24 @@ func (g *hidlGenRule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
vtsListMutex.Unlock()
}
- var extraOptions []string // including roots
+ var fullRootOptions []string
var currentPath android.OptionalPath
ctx.VisitDirectDeps(func(dep android.Module) {
switch t := dep.(type) {
case *hidlInterface:
- extraOptions = append(extraOptions, t.properties.Full_root_option)
+ fullRootOptions = append(fullRootOptions, t.properties.Full_root_option)
case *hidlPackageRoot:
if currentPath.Valid() {
panic(fmt.Sprintf("Expecting only one path, but found %v %v", currentPath, t.getCurrentPath()))
}
currentPath = t.getCurrentPath()
-
- if t.requireFrozen() {
- extraOptions = append(extraOptions, "-F")
- }
+ default:
+ panic(fmt.Sprintf("Unrecognized hidlGenProperties dependency: %T", t))
}
})
- extraOptions = android.FirstUniqueStrings(extraOptions)
+ fullRootOptions = android.FirstUniqueStrings(fullRootOptions)
inputs := g.genInputs
if currentPath.Valid() {
@@ -300,9 +291,9 @@ func (g *hidlGenRule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
Inputs: inputs,
Output: g.genOutputs[0],
Args: map[string]string{
- "output": g.genOutputs[0].String(),
- "fqName": g.properties.FqName,
- "options": strings.Join(extraOptions, " "),
+ "output": g.genOutputs[0].String(),
+ "fqName": g.properties.FqName,
+ "roots": strings.Join(fullRootOptions, " "),
},
})
@@ -317,7 +308,7 @@ func (g *hidlGenRule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
Output: g.genOutputs[i],
Args: map[string]string{
"fqInterface": g.properties.FqName + "::" + intf,
- "options": strings.Join(extraOptions, " "),
+ "roots": strings.Join(fullRootOptions, " "),
},
})
}
@@ -335,7 +326,7 @@ func (g *hidlGenRule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
"genDir": g.genOutputDir.String(),
"fqName": g.properties.FqName,
"language": g.properties.Language,
- "options": strings.Join(extraOptions, " "),
+ "roots": strings.Join(fullRootOptions, " "),
},
})
}
@@ -448,33 +439,6 @@ func vtscFactory() android.Module {
return g
}
-type prebuiltHidlInterfaceProperties struct {
- // List of interfaces to consider valid, e.g. "vendor.foo.bar@1.0::IFoo" for typo checking
- // between init.rc, VINTF, and elsewhere. Note that inheritance properties will not be
- // checked for these (but would be checked in a branch where the actual hidl_interface
- // exists).
- Interfaces []string
-}
-
-type prebuiltHidlInterface struct {
- android.ModuleBase
-
- properties prebuiltHidlInterfaceProperties
-}
-
-func (p *prebuiltHidlInterface) GenerateAndroidBuildActions(ctx android.ModuleContext) {}
-
-func (p *prebuiltHidlInterface) DepsMutator(ctx android.BottomUpMutatorContext) {
- ctx.AddReverseDependency(ctx.Module(), nil, hidlMetadataSingletonName)
-}
-
-func prebuiltHidlInterfaceFactory() android.Module {
- i := &prebuiltHidlInterface{}
- i.AddProperties(&i.properties)
- android.InitAndroidModule(i)
- return i
-}
-
type hidlInterfaceProperties struct {
// Vndk properties for interface library only.
cc.VndkProperties
@@ -505,6 +469,10 @@ type hidlInterfaceProperties struct {
// example: -randroid.hardware:hardware/interfaces
Full_root_option string `blueprint:"mutated"`
+ // Whether this interface library should be installed on product partition.
+ // TODO(b/150902910): remove, since this should be an inherited property.
+ Product_specific *bool
+
// List of APEX modules this interface can be used in.
//
// WARNING: HIDL is not fully supported in APEX since VINTF currently doesn't
@@ -517,10 +485,6 @@ type hidlInterfaceProperties struct {
// does not apply to VTS targets/adapter targets/fuzzers since these components
// should not be shipped on device.
Apex_available []string
-
- // Installs the vendor variant of the module to the /odm partition instead of
- // the /vendor partition.
- Odm_available *bool
}
type hidlInterface struct {
@@ -588,11 +552,6 @@ func removeCoreDependencies(mctx android.LoadHookContext, dependencies []string)
}
func hidlInterfaceMutator(mctx android.LoadHookContext, i *hidlInterface) {
- if !canInterfaceExist(i.ModuleBase.Name()) {
- mctx.PropertyErrorf("name", "No more HIDL interfaces can be added to Android. Please use AIDL.")
- return
- }
-
name, err := parseFqName(i.ModuleBase.Name())
if err != nil {
mctx.PropertyErrorf("name", err.Error())
@@ -636,19 +595,8 @@ This corresponds to the "-r%s:<some path>" option that would be passed into hidl
shouldGenerateJavaConstants := i.properties.Gen_java_constants
shouldGenerateVts := shouldGenerateLibrary && proptools.BoolDefault(i.properties.Gen_vts, true)
- // To generate VTS, hidl_interface must have a core variant.
- // A module with 'product_specific: true' does not create a core variant.
- shouldGenerateVts = shouldGenerateVts && !mctx.ProductSpecific()
-
- var productAvailable *bool
- if !mctx.ProductSpecific() {
- productAvailable = proptools.BoolPtr(true)
- }
-
- var vendorAvailable *bool
- if !proptools.Bool(i.properties.Odm_available) {
- vendorAvailable = proptools.BoolPtr(true)
- }
+ // TODO(b/150902910): re-enable VTS builds for product things
+ shouldGenerateVts = shouldGenerateVts && !proptools.Bool(i.properties.Product_specific)
var libraryIfExists []string
if shouldGenerateLibrary {
@@ -693,9 +641,7 @@ This corresponds to the "-r%s:<some path>" option that would be passed into hidl
Name: proptools.StringPtr(name.string()),
Host_supported: proptools.BoolPtr(true),
Recovery_available: proptools.BoolPtr(true),
- Vendor_available: vendorAvailable,
- Odm_available: i.properties.Odm_available,
- Product_available: productAvailable,
+ Vendor_available: proptools.BoolPtr(true),
Double_loadable: proptools.BoolPtr(isDoubleLoadable(name.string())),
Defaults: []string{"hidl-module-defaults"},
Generated_sources: []string{name.sourcesName()},
@@ -797,9 +743,7 @@ This corresponds to the "-r%s:<some path>" option that would be passed into hidl
mctx.CreateModule(cc.LibraryFactory, &ccProperties{
Name: proptools.StringPtr(name.adapterHelperName()),
- Vendor_available: vendorAvailable,
- Odm_available: i.properties.Odm_available,
- Product_available: productAvailable,
+ Vendor_available: proptools.BoolPtr(true),
Defaults: []string{"hidl-module-defaults"},
Generated_sources: []string{name.adapterHelperSourcesName()},
Generated_headers: []string{name.adapterHelperHeadersName()},
@@ -971,13 +915,11 @@ func (h *hidlInterface) Name() string {
func (h *hidlInterface) GenerateAndroidBuildActions(ctx android.ModuleContext) {
visited := false
ctx.VisitDirectDeps(func(dep android.Module) {
- if r, ok := dep.(*hidlPackageRoot); ok {
- if visited {
- panic("internal error, multiple dependencies found but only one added")
- }
- visited = true
- h.properties.Full_root_option = r.getFullPackageRoot()
+ if visited {
+ panic("internal error, multiple dependencies found but only one added")
}
+ visited = true
+ h.properties.Full_root_option = dep.(*hidlPackageRoot).getFullPackageRoot()
})
if !visited {
panic("internal error, no dependencies found but dependency added")
@@ -998,7 +940,6 @@ func hidlInterfaceFactory() android.Module {
}
var minSdkVersion = map[string]string{
- "android.frameworks.bufferhub@1.0": "29",
"android.hardware.audio.common@5.0": "30",
"android.hardware.bluetooth.a2dp@1.0": "30",
"android.hardware.bluetooth.audio@2.0": "30",
@@ -1021,7 +962,6 @@ var minSdkVersion = map[string]string{
"android.hardware.media.bufferpool@2.0": "29",
"android.hardware.media.c2@1.0": "29",
"android.hardware.media.c2@1.1": "29",
- "android.hardware.media.c2@1.2": "29",
"android.hardware.media.omx@1.0": "29",
"android.hardware.media@1.0": "29",
"android.hardware.neuralnetworks@1.0": "30",
@@ -1033,16 +973,13 @@ var minSdkVersion = map[string]string{
"android.hardware.wifi@1.2": "30",
"android.hardware.wifi@1.3": "30",
"android.hardware.wifi@1.4": "30",
- "android.hardware.wifi@1.5": "30",
"android.hardware.wifi.hostapd@1.0": "30",
"android.hardware.wifi.hostapd@1.1": "30",
"android.hardware.wifi.hostapd@1.2": "30",
- "android.hardware.wifi.hostapd@1.3": "30",
"android.hardware.wifi.supplicant@1.0": "30",
"android.hardware.wifi.supplicant@1.1": "30",
"android.hardware.wifi.supplicant@1.2": "30",
"android.hardware.wifi.supplicant@1.3": "30",
- "android.hardware.wifi.supplicant@1.4": "30",
"android.hidl.allocator@1.0": "29",
"android.hidl.manager@1.0": "30",
"android.hidl.manager@1.1": "30",
@@ -1105,18 +1042,15 @@ func isCorePackage(name string) bool {
var fuzzerPackageNameBlacklist = []string{
"android.hardware.keymaster@", // to avoid deleteAllKeys()
- // Same-process HALs are always opened in the same process as their client.
- // So stability guarantees don't apply to them, e.g. it's OK to crash on
- // NULL input from client. Disable corresponding fuzzers as they create too
- // much noise.
- "android.hardware.graphics.mapper@",
- "android.hardware.renderscript@",
- "android.hidl.memory@",
}
func isFuzzerEnabled(name string) bool {
- // TODO(151338797): re-enable fuzzers
- return false
+ for _, pkgname := range fuzzerPackageNameBlacklist {
+ if strings.HasPrefix(name, pkgname) {
+ return false
+ }
+ }
+ return true
}
// TODO(b/126383715): centralize this logic/support filtering in core VTS build
@@ -1152,254 +1086,3 @@ func makeVarsProvider(ctx android.MakeVarsContext) {
ctx.Strict("VTS_SPEC_FILE_LIST", strings.Join(vtsList, " "))
}
-
-func canInterfaceExist(name string) bool {
- if strings.HasPrefix(name, "android.") {
- return allAospHidlInterfaces[name]
- }
-
- return true
-}
-
-var allAospHidlInterfaces = map[string]bool{
- "android.frameworks.automotive.display@1.0": true,
- "android.frameworks.bufferhub@1.0": true,
- "android.frameworks.cameraservice.common@2.0": true,
- "android.frameworks.cameraservice.device@2.0": true,
- "android.frameworks.cameraservice.device@2.1": true,
- "android.frameworks.cameraservice.service@2.0": true,
- "android.frameworks.cameraservice.service@2.1": true,
- "android.frameworks.cameraservice.service@2.2": true,
- "android.frameworks.displayservice@1.0": true,
- "android.frameworks.schedulerservice@1.0": true,
- "android.frameworks.sensorservice@1.0": true,
- "android.frameworks.stats@1.0": true,
- "android.frameworks.vr.composer@1.0": true,
- "android.frameworks.vr.composer@2.0": true,
- "android.hardware.atrace@1.0": true,
- "android.hardware.audio@2.0": true,
- "android.hardware.audio@4.0": true,
- "android.hardware.audio@5.0": true,
- "android.hardware.audio@6.0": true,
- "android.hardware.audio@7.0": true,
- "android.hardware.audio.common@2.0": true,
- "android.hardware.audio.common@4.0": true,
- "android.hardware.audio.common@5.0": true,
- "android.hardware.audio.common@6.0": true,
- "android.hardware.audio.common@7.0": true,
- "android.hardware.audio.effect@2.0": true,
- "android.hardware.audio.effect@4.0": true,
- "android.hardware.audio.effect@5.0": true,
- "android.hardware.audio.effect@6.0": true,
- "android.hardware.audio.effect@7.0": true,
- "android.hardware.authsecret@1.0": true,
- "android.hardware.automotive.audiocontrol@1.0": true,
- "android.hardware.automotive.audiocontrol@2.0": true,
- "android.hardware.automotive.can@1.0": true,
- "android.hardware.automotive.evs@1.0": true,
- "android.hardware.automotive.evs@1.1": true,
- "android.hardware.automotive.sv@1.0": true,
- "android.hardware.automotive.vehicle@2.0": true,
- "android.hardware.biometrics.face@1.0": true,
- "android.hardware.biometrics.fingerprint@2.1": true,
- "android.hardware.biometrics.fingerprint@2.2": true,
- "android.hardware.biometrics.fingerprint@2.3": true,
- "android.hardware.bluetooth@1.0": true,
- "android.hardware.bluetooth@1.1": true,
- "android.hardware.bluetooth.a2dp@1.0": true,
- "android.hardware.bluetooth.audio@2.0": true,
- "android.hardware.bluetooth.audio@2.1": true,
- "android.hardware.boot@1.0": true,
- "android.hardware.boot@1.1": true,
- "android.hardware.boot@1.2": true,
- "android.hardware.broadcastradio@1.0": true,
- "android.hardware.broadcastradio@1.1": true,
- "android.hardware.broadcastradio@2.0": true,
- "android.hardware.camera.common@1.0": true,
- "android.hardware.camera.device@1.0": true,
- "android.hardware.camera.device@3.2": true,
- "android.hardware.camera.device@3.3": true,
- "android.hardware.camera.device@3.4": true,
- "android.hardware.camera.device@3.5": true,
- "android.hardware.camera.device@3.6": true,
- "android.hardware.camera.device@3.7": true,
- "android.hardware.camera.metadata@3.2": true,
- "android.hardware.camera.metadata@3.3": true,
- "android.hardware.camera.metadata@3.4": true,
- "android.hardware.camera.metadata@3.5": true,
- "android.hardware.camera.metadata@3.6": true,
- "android.hardware.camera.provider@2.4": true,
- "android.hardware.camera.provider@2.5": true,
- "android.hardware.camera.provider@2.6": true,
- "android.hardware.camera.provider@2.7": true,
- "android.hardware.cas@1.0": true,
- "android.hardware.cas@1.1": true,
- "android.hardware.cas@1.2": true,
- "android.hardware.cas.native@1.0": true,
- "android.hardware.configstore@1.0": true,
- "android.hardware.configstore@1.1": true,
- "android.hardware.confirmationui@1.0": true,
- "android.hardware.contexthub@1.0": true,
- "android.hardware.contexthub@1.1": true,
- "android.hardware.contexthub@1.2": true,
- "android.hardware.drm@1.0": true,
- "android.hardware.drm@1.1": true,
- "android.hardware.drm@1.2": true,
- "android.hardware.drm@1.3": true,
- "android.hardware.drm@1.4": true,
- "android.hardware.dumpstate@1.0": true,
- "android.hardware.dumpstate@1.1": true,
- "android.hardware.fastboot@1.0": true,
- "android.hardware.fastboot@1.1": true,
- "android.hardware.gatekeeper@1.0": true,
- "android.hardware.gnss@1.0": true,
- "android.hardware.gnss@1.1": true,
- "android.hardware.gnss@2.0": true,
- "android.hardware.gnss@2.1": true,
- "android.hardware.gnss.measurement_corrections@1.0": true,
- "android.hardware.gnss.measurement_corrections@1.1": true,
- "android.hardware.gnss.visibility_control@1.0": true,
- "android.hardware.graphics.allocator@2.0": true,
- "android.hardware.graphics.allocator@3.0": true,
- "android.hardware.graphics.allocator@4.0": true,
- "android.hardware.graphics.bufferqueue@1.0": true,
- "android.hardware.graphics.bufferqueue@2.0": true,
- "android.hardware.graphics.common@1.0": true,
- "android.hardware.graphics.common@1.1": true,
- "android.hardware.graphics.common@1.2": true,
- "android.hardware.graphics.composer@2.1": true,
- "android.hardware.graphics.composer@2.2": true,
- "android.hardware.graphics.composer@2.3": true,
- "android.hardware.graphics.composer@2.4": true,
- "android.hardware.graphics.mapper@2.0": true,
- "android.hardware.graphics.mapper@2.1": true,
- "android.hardware.graphics.mapper@3.0": true,
- "android.hardware.graphics.mapper@4.0": true,
- "android.hardware.health@1.0": true,
- "android.hardware.health@2.0": true,
- "android.hardware.health@2.1": true,
- "android.hardware.health.storage@1.0": true,
- "android.hardware.input.classifier@1.0": true,
- "android.hardware.input.common@1.0": true,
- "android.hardware.ir@1.0": true,
- "android.hardware.keymaster@3.0": true,
- "android.hardware.keymaster@4.0": true,
- "android.hardware.keymaster@4.1": true,
- "android.hardware.light@2.0": true,
- "android.hardware.media@1.0": true,
- "android.hardware.media.bufferpool@1.0": true,
- "android.hardware.media.bufferpool@2.0": true,
- "android.hardware.media.c2@1.0": true,
- "android.hardware.media.c2@1.1": true,
- "android.hardware.media.c2@1.2": true,
- "android.hardware.media.omx@1.0": true,
- "android.hardware.memtrack@1.0": true,
- "android.hardware.neuralnetworks@1.0": true,
- "android.hardware.neuralnetworks@1.1": true,
- "android.hardware.neuralnetworks@1.2": true,
- "android.hardware.neuralnetworks@1.3": true,
- "android.hardware.nfc@1.0": true,
- "android.hardware.nfc@1.1": true,
- "android.hardware.nfc@1.2": true,
- "android.hardware.oemlock@1.0": true,
- "android.hardware.power@1.0": true,
- "android.hardware.power@1.1": true,
- "android.hardware.power@1.2": true,
- "android.hardware.power@1.3": true,
- "android.hardware.power.stats@1.0": true,
- "android.hardware.radio@1.0": true,
- "android.hardware.radio@1.1": true,
- "android.hardware.radio@1.2": true,
- "android.hardware.radio@1.3": true,
- "android.hardware.radio@1.4": true,
- "android.hardware.radio@1.5": true,
- "android.hardware.radio@1.6": true,
- "android.hardware.radio.config@1.0": true,
- "android.hardware.radio.config@1.1": true,
- "android.hardware.radio.config@1.2": true,
- "android.hardware.radio.config@1.3": true,
- "android.hardware.radio.deprecated@1.0": true,
- "android.hardware.renderscript@1.0": true,
- "android.hardware.secure_element@1.0": true,
- "android.hardware.secure_element@1.1": true,
- "android.hardware.secure_element@1.2": true,
- "android.hardware.sensors@1.0": true,
- "android.hardware.sensors@2.0": true,
- "android.hardware.sensors@2.1": true,
- "android.hardware.soundtrigger@2.0": true,
- "android.hardware.soundtrigger@2.1": true,
- "android.hardware.soundtrigger@2.2": true,
- "android.hardware.soundtrigger@2.3": true,
- "android.hardware.soundtrigger@2.4": true,
- "android.hardware.tests.bar@1.0": true,
- "android.hardware.tests.baz@1.0": true,
- "android.hardware.tests.expression@1.0": true,
- "android.hardware.tests.extension.light@2.0": true,
- "android.hardware.tests.foo@1.0": true,
- "android.hardware.tests.hash@1.0": true,
- "android.hardware.tests.inheritance@1.0": true,
- "android.hardware.tests.lazy@1.0": true,
- "android.hardware.tests.lazy@1.1": true,
- "android.hardware.tests.libhwbinder@1.0": true,
- "android.hardware.tests.memory@1.0": true,
- "android.hardware.tests.memory@2.0": true,
- "android.hardware.tests.msgq@1.0": true,
- "android.hardware.tests.multithread@1.0": true,
- "android.hardware.tests.safeunion@1.0": true,
- "android.hardware.tests.safeunion.cpp@1.0": true,
- "android.hardware.tests.trie@1.0": true,
- "android.hardware.tetheroffload.config@1.0": true,
- "android.hardware.tetheroffload.control@1.0": true,
- "android.hardware.tetheroffload.control@1.1": true,
- "android.hardware.thermal@1.0": true,
- "android.hardware.thermal@1.1": true,
- "android.hardware.thermal@2.0": true,
- "android.hardware.tv.cec@1.0": true,
- "android.hardware.tv.cec@1.1": true,
- "android.hardware.tv.input@1.0": true,
- "android.hardware.tv.tuner@1.0": true,
- "android.hardware.tv.tuner@1.1": true,
- "android.hardware.usb@1.0": true,
- "android.hardware.usb@1.1": true,
- "android.hardware.usb@1.2": true,
- "android.hardware.usb@1.3": true,
- "android.hardware.usb.gadget@1.0": true,
- "android.hardware.usb.gadget@1.1": true,
- "android.hardware.usb.gadget@1.2": true,
- "android.hardware.vibrator@1.0": true,
- "android.hardware.vibrator@1.1": true,
- "android.hardware.vibrator@1.2": true,
- "android.hardware.vibrator@1.3": true,
- "android.hardware.vr@1.0": true,
- "android.hardware.weaver@1.0": true,
- "android.hardware.wifi@1.0": true,
- "android.hardware.wifi@1.1": true,
- "android.hardware.wifi@1.2": true,
- "android.hardware.wifi@1.3": true,
- "android.hardware.wifi@1.4": true,
- "android.hardware.wifi@1.5": true,
- "android.hardware.wifi.hostapd@1.0": true,
- "android.hardware.wifi.hostapd@1.1": true,
- "android.hardware.wifi.hostapd@1.2": true,
- "android.hardware.wifi.hostapd@1.3": true,
- "android.hardware.wifi.offload@1.0": true,
- "android.hardware.wifi.supplicant@1.0": true,
- "android.hardware.wifi.supplicant@1.1": true,
- "android.hardware.wifi.supplicant@1.2": true,
- "android.hardware.wifi.supplicant@1.3": true,
- "android.hardware.wifi.supplicant@1.4": true,
- "android.hidl.allocator@1.0": true,
- "android.hidl.base@1.0": true,
- "android.hidl.manager@1.0": true,
- "android.hidl.manager@1.1": true,
- "android.hidl.manager@1.2": true,
- "android.hidl.memory@1.0": true,
- "android.hidl.memory.block@1.0": true,
- "android.hidl.memory.token@1.0": true,
- "android.hidl.safe_union@1.0": true,
- "android.hidl.token@1.0": true,
- "android.system.net.netd@1.0": true,
- "android.system.net.netd@1.1": true,
- "android.system.suspend@1.0": true,
- "android.system.wifi.keystore@1.0": true,
-}
diff --git a/build/hidl_package_root.go b/build/hidl_package_root.go
index fc58597d..e15b4ac3 100644
--- a/build/hidl_package_root.go
+++ b/build/hidl_package_root.go
@@ -30,20 +30,6 @@ var (
}, "output")
)
-type hidlPackageRootProperties struct {
- // Path to the package root from android build root. It is recommended not to set this and
- // use the current path. This will be deprecated in the future.
- Path *string
-
- // True to require a current.txt API file here.
- //
- // When false, it uses the file only when it exists.
- Use_current *bool
-
- // True to require all things referenced by this package root to be frozen.
- Require_frozen *bool
-}
-
func init() {
android.RegisterModuleType("hidl_package_root", hidlPackageRootFactory)
}
@@ -51,7 +37,16 @@ func init() {
type hidlPackageRoot struct {
android.ModuleBase
- properties hidlPackageRootProperties
+ properties struct {
+ // Path to the package root from android build root. It is recommended not to set this and
+ // use the current path. This will be deprecated in the future.
+ Path *string
+
+ // True to require a current.txt API file here.
+ //
+ // When false, it uses the file only when it exists.
+ Use_current *bool
+ }
currentPath android.OptionalPath
genOutputs android.Paths
@@ -67,10 +62,6 @@ func (r *hidlPackageRoot) getCurrentPath() android.OptionalPath {
return r.currentPath
}
-func (r *hidlPackageRoot) requireFrozen() bool {
- return proptools.BoolDefault(r.properties.Require_frozen, false)
-}
-
func (r *hidlPackageRoot) generateCurrentFile(ctx android.ModuleContext) {
if !r.currentPath.Valid() {
return
diff --git a/build/properties.go b/build/properties.go
index c88bbef5..d746beca 100644
--- a/build/properties.go
+++ b/build/properties.go
@@ -30,8 +30,6 @@ type ccProperties struct {
Defaults []string
Host_supported *bool
Vendor_available *bool
- Odm_available *bool
- Product_available *bool
Recovery_available *bool
Generated_sources []string
Generated_headers []string
diff --git a/c2hal/Android.bp b/c2hal/Android.bp
index 099e3a58..69f22126 100644
--- a/c2hal/Android.bp
+++ b/c2hal/Android.bp
@@ -12,15 +12,6 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
cc_binary_host {
name: "c2hal",
defaults: ["hidl-gen-defaults"],
diff --git a/c2hal/c2hal_y.yy b/c2hal/c2hal_y.yy
index 1296ded9..596b2113 100644
--- a/c2hal/c2hal_y.yy
+++ b/c2hal/c2hal_y.yy
@@ -72,7 +72,7 @@ std::string get_last_comment() {
%parse-param { android::AST *ast }
%lex-param { void *scanner }
%locations
-%define api.pure
+%pure-parser
%glr-parser
/* These have to do with the fact that
diff --git a/c2hal/test/Android.bp b/c2hal/test/Android.bp
index 4e69de67..722d1a8e 100644
--- a/c2hal/test/Android.bp
+++ b/c2hal/test/Android.bp
@@ -13,15 +13,6 @@
// limitations under the License.
//
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
genrule {
name: "c2hal_test_genc++_headers",
tools: [
diff --git a/generateCpp.cpp b/generateCpp.cpp
index ec957749..d7ee043a 100644
--- a/generateCpp.cpp
+++ b/generateCpp.cpp
@@ -1071,9 +1071,6 @@ void AST::generateStaticProxyMethodSource(Formatter& out, const std::string& kla
declareCppReaderLocals(
out, method->results(), true /* forResults */);
}
- if (superInterface->hasSensitiveDataAnnotation()) {
- out << "_hidl_data.markSensitive();\n";
- }
out << "_hidl_err = _hidl_data.writeInterfaceToken(";
out << klassName;
@@ -1101,14 +1098,15 @@ void AST::generateStaticProxyMethodSource(Formatter& out, const std::string& kla
out << "::android::hardware::ProcessState::self()->startThreadPool();\n";
}
out << "_hidl_transact_err = ::android::hardware::IInterface::asBinder(_hidl_this)->transact("
- << method->getSerialId() << " /* " << method->name()
- << " */, _hidl_data, &_hidl_reply, 0 /* flags */";
+ << method->getSerialId()
+ << " /* "
+ << method->name()
+ << " */, _hidl_data, &_hidl_reply";
if (method->isOneway()) {
- out << " | " << Interface::FLAG_ONE_WAY->cppValue();
- }
- if (superInterface->hasSensitiveDataAnnotation()) {
- out << " | " << Interface::FLAG_CLEAR_BUF->cppValue();
+ out << ", " << Interface::FLAG_ONE_WAY->cppValue();
+ } else {
+ out << ", 0";
}
if (hasCallback) {
diff --git a/generateInheritanceHierarchy.cpp b/generateInheritanceHierarchy.cpp
index b5585432..38d1a5d1 100644
--- a/generateInheritanceHierarchy.cpp
+++ b/generateInheritanceHierarchy.cpp
@@ -19,7 +19,6 @@
#include <android-base/logging.h>
#include <hidl-util/Formatter.h>
#include <json/json.h>
-#include <sstream>
#include <string>
#include <vector>
@@ -41,12 +40,8 @@ void AST::generateInheritanceHierarchy(Formatter& out) const {
}
root["inheritedInterfaces"] = inheritedInterfaces;
}
- Json::StreamWriterBuilder factory;
- std::unique_ptr<Json::StreamWriter> const writer(factory.newStreamWriter());
- std::ostringstream ss;
- writer->write(root, &ss);
- ss << std::endl;
- out << ss.str();
+ Json::StyledWriter writer;
+ out << writer.write(root);
}
} // namespace android
diff --git a/generateJava.cpp b/generateJava.cpp
index 4b6fea6d..9eb1232c 100644
--- a/generateJava.cpp
+++ b/generateJava.cpp
@@ -73,17 +73,15 @@ void emitGetService(
"This will invoke the equivalent of the C++ getService(std::string) if retry is\n"
"true or tryGetService(std::string) if retry is false. If the service is\n"
"available on the device and retry is true, this will wait for the service to\n"
- "start.\n\n@throws NoSuchElementException if this service is not available",
+ "start. Otherwise, it will return immediately even if the service is null.",
HIDL_LOCATION_HERE)
.emit(out);
} else {
DocComment(
- "@throws NoSuchElementException if this service is not available\n"
- "@deprecated this will not wait for the interface to come up if it hasn't yet\n"
- " started. See getService(String,boolean) instead.\n",
+ "Warning: this will not wait for the interface to come up if it hasn't yet\n"
+ "started. See getService(String,boolean) instead.",
HIDL_LOCATION_HERE)
.emit(out);
- out << "@Deprecated\n";
}
out << "public static "
<< ifaceName
@@ -108,12 +106,10 @@ void emitGetService(
DocComment("Calls getService(\"default\",retry).", HIDL_LOCATION_HERE).emit(out);
} else {
DocComment(
- "@throws NoSuchElementException if this service is not available\n"
- "@deprecated this will not wait for the interface to come up if it hasn't yet\n"
- " started. See getService(boolean) instead.\n",
+ "Warning: this will not wait for the interface to come up if it hasn't yet "
+ "started. See getService(String,boolean) instead.",
HIDL_LOCATION_HERE)
.emit(out);
- out << "@Deprecated\n";
}
out << "public static "
<< ifaceName
diff --git a/hashing/Android.bp b/hashing/Android.bp
index c6bacd3f..9f63a274 100644
--- a/hashing/Android.bp
+++ b/hashing/Android.bp
@@ -12,15 +12,6 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
cc_library {
name: "libhidl-gen-hash",
host_supported: true,
diff --git a/hidl2aidl/AidlHelper.cpp b/hidl2aidl/AidlHelper.cpp
index 94ab1e05..509b2aab 100644
--- a/hidl2aidl/AidlHelper.cpp
+++ b/hidl2aidl/AidlHelper.cpp
@@ -14,20 +14,17 @@
* limitations under the License.
*/
-#include <android-base/file.h>
#include <android-base/logging.h>
#include <android-base/strings.h>
#include <hidl-util/FQName.h>
#include <hidl-util/Formatter.h>
#include <hidl-util/StringHelper.h>
-#include <iostream>
#include <set>
#include <string>
#include <vector>
#include "AidlHelper.h"
#include "ArrayType.h"
-#include "CompoundType.h"
#include "Coordinator.h"
#include "Interface.h"
#include "Method.h"
@@ -38,8 +35,6 @@
namespace android {
Formatter* AidlHelper::notesFormatter = nullptr;
-std::string AidlHelper::fileHeader = "";
-bool AidlHelper::expandExtended = false;
Formatter& AidlHelper::notes() {
CHECK(notesFormatter != nullptr);
@@ -68,19 +63,11 @@ std::string AidlHelper::getAidlPackage(const FQName& fqName) {
return aidlPackage;
}
-std::string AidlHelper::getAidlPackagePath(const FQName& fqName) {
- return base::Join(base::Split(AidlHelper::getAidlPackage(fqName), "."), "/");
-}
-
-std::optional<std::string> AidlHelper::getAidlFQName(const FQName& fqName) {
- std::optional<const ReplacedTypeInfo> type = getAidlReplacedType(fqName);
- if (type) {
- return type.value().aidlReplacedFQName;
- }
+std::string AidlHelper::getAidlFQName(const FQName& fqName) {
return getAidlPackage(fqName) + "." + getAidlName(fqName);
}
-void AidlHelper::importLocallyReferencedType(const Type& type, std::set<std::string>* imports) {
+static void importLocallyReferencedType(const Type& type, std::set<std::string>* imports) {
if (type.isArray()) {
return importLocallyReferencedType(*static_cast<const ArrayType*>(&type)->getElementType(),
imports);
@@ -93,20 +80,16 @@ void AidlHelper::importLocallyReferencedType(const Type& type, std::set<std::str
if (!type.isNamedType()) return;
const NamedType& namedType = *static_cast<const NamedType*>(&type);
- std::optional<std::string> import = AidlHelper::getAidlFQName(namedType.fqName());
- if (import) {
- imports->insert(import.value());
- }
+ std::string import = AidlHelper::getAidlFQName(namedType.fqName());
+ imports->insert(import);
}
// This tries iterating over the HIDL AST which is a bit messy because
// it has to encode the logic in the rest of hidl2aidl. It would be better
// if we could iterate over the AIDL structure which has already been
// processed.
-void AidlHelper::emitFileHeader(
- Formatter& out, const NamedType& type,
- const std::map<const NamedType*, const ProcessedCompoundType>& processedTypes) {
- AidlHelper::emitFileHeader(out);
+void AidlHelper::emitFileHeader(Formatter& out, const NamedType& type) {
+ out << "// FIXME: license file if you have one\n\n";
out << "package " << getAidlPackage(type.fqName()) << ";\n\n";
std::set<std::string> imports;
@@ -121,34 +104,17 @@ void AidlHelper::emitFileHeader(
// Import all the referenced types
if (type.isInterface()) {
- // This is a separate case because getReferences doesn't traverse all the superTypes and
+ // This is a separate case becase getReferences doesn't traverse all the superTypes and
// sometimes includes references to types that would not exist on AIDL
const std::vector<const Method*>& methods =
- getUserDefinedMethods(out, static_cast<const Interface&>(type));
+ getUserDefinedMethods(static_cast<const Interface&>(type));
for (const Method* method : methods) {
for (const Reference<Type>* ref : method->getReferences()) {
importLocallyReferencedType(*ref->get(), &imports);
}
}
- } else if (type.isCompoundType()) {
- // Get all of the imports for the flattened compound type that may
- // include additional fields and subtypes from older versions
- const auto& it = processedTypes.find(&type);
- CHECK(it != processedTypes.end()) << "Failed to find " << type.fullName();
- const ProcessedCompoundType& processedType = it->second;
-
- for (const auto& field : processedType.fields) {
- importLocallyReferencedType(*field.field->get(), &imports);
- }
- for (const auto& subType : processedType.subTypes) {
- importLocallyReferencedType(*subType, &imports);
- }
} else {
for (const Reference<Type>* ref : type.getReferences()) {
- if (ref->get()->definedName() == type.fqName().name()) {
- // Don't import the referenced type if this is referencing itself
- continue;
- }
importLocallyReferencedType(*ref->get(), &imports);
}
}
@@ -162,94 +128,14 @@ void AidlHelper::emitFileHeader(
}
}
-Formatter AidlHelper::getFileWithHeader(
- const NamedType& namedType, const Coordinator& coordinator,
- const std::map<const NamedType*, const ProcessedCompoundType>& processedTypes) {
- Formatter out =
- coordinator.getFormatter(namedType.fqName(), Coordinator::Location::DIRECT,
- AidlHelper::getAidlPackagePath(namedType.fqName()) + "/" +
- getAidlName(namedType.fqName()) + ".aidl");
- emitFileHeader(out, namedType, processedTypes);
+Formatter AidlHelper::getFileWithHeader(const NamedType& namedType,
+ const Coordinator& coordinator) {
+ std::string aidlPackage = getAidlPackage(namedType.fqName());
+ Formatter out = coordinator.getFormatter(namedType.fqName(), Coordinator::Location::DIRECT,
+ base::Join(base::Split(aidlPackage, "."), "/") + "/" +
+ getAidlName(namedType.fqName()) + ".aidl");
+ emitFileHeader(out, namedType);
return out;
}
-void AidlHelper::processCompoundType(const CompoundType& compoundType,
- ProcessedCompoundType* processedType,
- const std::string& fieldNamePrefix) {
- // Gather all of the subtypes defined in this type
- for (const NamedType* subType : compoundType.getSubTypes()) {
- processedType->subTypes.insert(subType);
- }
- std::pair<size_t, size_t> version = compoundType.fqName().hasVersion()
- ? compoundType.fqName().getVersion()
- : std::pair<size_t, size_t>{0, 0};
- for (const NamedReference<Type>* field : compoundType.getFields()) {
- // Check for references to another version of itself
- if (field->get()->typeName() == compoundType.typeName()) {
- if (AidlHelper::shouldBeExpanded(
- static_cast<const CompoundType&>(*field->get()).fqName(),
- compoundType.fqName())) {
- processCompoundType(static_cast<const CompoundType&>(*field->get()), processedType,
- fieldNamePrefix + field->name() + ".");
- } else {
- // Keep this field as is
- processedType->fields.push_back({field, fieldNamePrefix + field->name(), version});
- }
- } else {
- // Handle duplicate field names. Keep only the most recent definitions.
- auto it = std::find_if(processedType->fields.begin(), processedType->fields.end(),
- [field](auto& processedField) {
- return processedField.field->name() == field->name();
- });
- if (it != processedType->fields.end()) {
- AidlHelper::notes()
- << "Found conflicting field name \"" << field->name()
- << "\" in different versions of " << compoundType.fqName().name() << ". ";
-
- if (version.first > it->version.first ||
- (version.first == it->version.first && version.second > it->version.second)) {
- AidlHelper::notes()
- << "Keeping " << field->get()->typeName() << " from " << version.first
- << "." << version.second << " and discarding "
- << (it->field)->get()->typeName() << " from " << it->version.first
- << "." << it->version.second << ".\n";
- it->fullName = fieldNamePrefix + field->name();
- it->field = field;
- it->version = version;
- } else {
- AidlHelper::notes()
- << "Keeping " << (it->field)->get()->typeName() << " from "
- << it->version.first << "." << it->version.second << " and discarding "
- << field->get()->typeName() << " from " << version.first << "."
- << version.second << ".\n";
- }
- } else {
- processedType->fields.push_back({field, fieldNamePrefix + field->name(), version});
- }
- }
- }
-}
-
-void AidlHelper::setFileHeader(const std::string& file) {
- if (!file.empty()) {
- if (!android::base::ReadFileToString(file, &fileHeader)) {
- std::cerr << "ERROR: Failed to find license file: " << file << "\n";
- exit(1);
- }
- }
-}
-
-void AidlHelper::emitFileHeader(Formatter& out) {
- if (fileHeader.empty()) {
- out << "// FIXME: license file, or use the -l option to generate the files with the "
- "header.\n\n";
- } else {
- out << fileHeader << "\n";
- }
-}
-
-bool AidlHelper::shouldBeExpanded(const FQName& a, const FQName& b) {
- return a.package() == b.package() || expandExtended;
-}
-
} // namespace android
diff --git a/hidl2aidl/AidlHelper.h b/hidl2aidl/AidlHelper.h
index 246744ce..54f3bf41 100644
--- a/hidl2aidl/AidlHelper.h
+++ b/hidl2aidl/AidlHelper.h
@@ -16,15 +16,11 @@
#pragma once
-#include <map>
-#include <set>
#include <string>
#include <vector>
-#include "Reference.h"
namespace android {
-struct CompoundType;
struct Coordinator;
struct Formatter;
struct FQName;
@@ -34,32 +30,6 @@ struct NamedType;
struct Scope;
struct Type;
-struct FieldWithVersion {
- const NamedReference<Type>* field;
- // name of the field appended by the
- std::string fullName;
- std::pair<size_t, size_t> version;
-};
-
-struct ProcessedCompoundType {
- // map modified name to field. This modified name is old.new
- std::vector<FieldWithVersion> fields;
- std::set<const NamedType*> subTypes;
-};
-
-struct ReplacedTypeInfo {
- // if a HIDL type is replaced, this returns the new AIDL type
- // android.hardware.safe_enum@1.0::Monostate -> boolean
- std::string aidlReplacedType;
- // if a HIDL type is replaced, this is the FQName of the new AIDL type
- // android.hardware.safe_enum@1.0::Monostate -> std::nullopt
- std::optional<std::string> aidlReplacedFQName;
- // if a HIDL type is replaced, this returns the function needed to generate translation
- std::optional<std::function<void(Formatter&)>> translateField;
-};
-
-enum class AidlBackend { UNKNOWN, NDK, CPP, JAVA };
-
struct AidlHelper {
/* FQName helpers */
// getAidlName returns the type names
@@ -70,65 +40,33 @@ struct AidlHelper {
// android.hardware.foo@1.x -> android.hardware.foo
// android.hardware.foo@2.x -> android.hardware.foo2
static std::string getAidlPackage(const FQName& fqName);
- // returns getAidlPackage(fqName) with '.' replaced by '/'
- // android.hardware.foo@1.x -> android/hardware/foo
- static std::string getAidlPackagePath(const FQName& fqName);
// getAidlFQName = getAidlPackage + "." + getAidlName
- static std::optional<std::string> getAidlFQName(const FQName& fqName);
-
- // if a HIDL type is replaced, this returns the ReplacedTypeInfo for the new AIDL type
- static std::optional<const ReplacedTypeInfo> getAidlReplacedType(const FQName& fqName);
+ static std::string getAidlFQName(const FQName& fqName);
- static void emitFileHeader(
- Formatter& out, const NamedType& type,
- const std::map<const NamedType*, const ProcessedCompoundType>& processedTypes);
- static void importLocallyReferencedType(const Type& type, std::set<std::string>* imports);
- static Formatter getFileWithHeader(
- const NamedType& namedType, const Coordinator& coordinator,
- const std::map<const NamedType*, const ProcessedCompoundType>& processedTypes);
+ static void emitFileHeader(Formatter& out, const NamedType& type);
+ static Formatter getFileWithHeader(const NamedType& namedType, const Coordinator& coordinator);
/* Methods for Type */
static std::string getAidlType(const Type& type, const FQName& relativeTo);
/* Methods for NamedType */
- static void emitAidl(
- const NamedType& namedType, const Coordinator& coordinator,
- const std::map<const NamedType*, const ProcessedCompoundType>& processedTypes);
+ static void emitAidl(const NamedType& namedType, const Coordinator& coordinator);
+
+ /* Methods for Scope */
+ static void emitAidl(const Scope& scope, const Coordinator& coordinator);
/* Methods for Interface */
- static void emitAidl(const Interface& interface, const Coordinator& coordinator,
- const std::map<const NamedType*, const ProcessedCompoundType>&);
+ static void emitAidl(const Interface& interface, const Coordinator& coordinator);
// Returns all methods that would exist in an AIDL equivalent interface
- static std::vector<const Method*> getUserDefinedMethods(Formatter& out,
- const Interface& interface);
-
- static void processCompoundType(const CompoundType& compoundType,
- ProcessedCompoundType* processedType,
- const std::string& fieldNamePrefix);
+ static std::vector<const Method*> getUserDefinedMethods(const Interface& interface);
static Formatter& notes();
static void setNotes(Formatter* formatter);
- // return the full file names for the header/source files based on the backend
- static std::string translateHeaderFile(const FQName& fqName, AidlBackend backend);
- static std::string translateSourceFile(const FQName& fqName, AidlBackend backend);
-
- static void emitTranslation(
- const Coordinator& coordinator, const FQName& fqName,
- const std::set<const NamedType*>& namedTypesInPackage,
- const std::map<const NamedType*, const ProcessedCompoundType>& processedTypes);
- static void setFileHeader(const std::string& file);
- static void emitFileHeader(Formatter& out);
- static void setExpandExtended(bool expand) { expandExtended = expand; };
- static bool isExpandExtended() { return expandExtended; };
- static bool shouldBeExpanded(const FQName& source, const FQName& extended);
-
private:
// This is the formatter to use for additional conversion output
static Formatter* notesFormatter;
- static std::string fileHeader;
- static bool expandExtended;
};
} // namespace android
diff --git a/hidl2aidl/AidlInterface.cpp b/hidl2aidl/AidlInterface.cpp
index 6c4b4af1..cece6cb3 100644
--- a/hidl2aidl/AidlInterface.cpp
+++ b/hidl2aidl/AidlInterface.cpp
@@ -61,18 +61,9 @@ static void emitAidlMethodParams(WrappedOutput* wrappedOutput,
}
}
-std::vector<const Method*> AidlHelper::getUserDefinedMethods(Formatter& out,
- const Interface& interface) {
+std::vector<const Method*> AidlHelper::getUserDefinedMethods(const Interface& interface) {
std::vector<const Method*> methods;
for (const Interface* iface : interface.typeChain()) {
- if (!AidlHelper::shouldBeExpanded(interface.fqName(), iface->fqName()) &&
- iface->fqName() != gIBaseFqName) {
- out << "// Types from " << iface->fqName().string()
- << " are not included because it is in a separate package, and it is expected to "
- "be a separate AIDL interface. To include these methods, use the '-e' argument. "
- "\n";
- break;
- }
const std::vector<Method*> userDefined = iface->userDefinedMethods();
methods.insert(methods.end(), userDefined.begin(), userDefined.end());
}
@@ -80,54 +71,50 @@ std::vector<const Method*> AidlHelper::getUserDefinedMethods(Formatter& out,
return methods;
}
-// Represents a node which is potentially overriding another node.
-// e.g. if this is 'foo_1_4'
-template <class NODE>
-struct NodeWithVersion {
- size_t major; // 1
- size_t minor; // 4
- const NODE* node; // HIDL object representing foo_1_4.
- std::string baseName; // foo
+struct MethodWithVersion {
+ size_t major;
+ size_t minor;
+ const Method* method;
+ std::string name;
};
-std::string getBaseName(const std::string& rawName) {
- size_t underscore = rawName.find('_');
+static void pushVersionedMethodOntoMap(MethodWithVersion versionedMethod,
+ std::map<std::string, MethodWithVersion>* map,
+ std::vector<const MethodWithVersion*>* ignored) {
+ const Method* method = versionedMethod.method;
+ std::string name = method->name();
+ size_t underscore = name.find('_');
if (underscore != std::string::npos) {
- std::string version = rawName.substr(underscore + 1); // don't include _
- std::string baseName = rawName.substr(0, underscore);
+ std::string version = name.substr(underscore + 1); // don't include _
+ std::string nameWithoutVersion = name.substr(0, underscore);
underscore = version.find('_');
size_t major, minor;
if (underscore != std::string::npos &&
base::ParseUint(version.substr(0, underscore), &major) &&
base::ParseUint(version.substr(underscore + 1), &minor)) {
- // contains major and minor version. consider it's baseName now.
- return baseName;
+ // contains major and minor version. consider it's nameWithoutVersion now.
+ name = nameWithoutVersion;
+ versionedMethod.name = nameWithoutVersion;
}
}
- return rawName;
-}
-template <class NODE>
-static void pushVersionedNodeOntoMap(const NODE& versionedNode,
- std::map<std::string, NODE>* latestNodeForBaseName,
- std::vector<const NODE>* supersededNode) {
- // attempt to push name onto latestNodeForBaseName
- auto [it, inserted] =
- latestNodeForBaseName->emplace(std::move(versionedNode.baseName), versionedNode);
+ // push name onto map
+ auto [it, inserted] = map->emplace(std::move(name), versionedMethod);
if (!inserted) {
auto* current = &it->second;
- // Node in the latestNodeForBaseName is more recent
- if ((current->major > versionedNode.major) ||
- (current->major == versionedNode.major && current->minor > versionedNode.minor)) {
- supersededNode->push_back(versionedNode);
+ // Method in the map is more recent
+ if ((current->major > versionedMethod.major) ||
+ (current->major == versionedMethod.major && current->minor > versionedMethod.minor)) {
+ // ignoring versionedMethod
+ ignored->push_back(&versionedMethod);
return;
}
// Either current.major < versioned.major OR versioned.minor >= current.minor
- supersededNode->push_back(*current);
- *current = std::move(versionedNode);
+ ignored->push_back(current);
+ *current = std::move(versionedMethod);
}
}
@@ -151,29 +138,12 @@ static bool shouldWarnStatusType(const std::string& typeName) {
return false;
}
-static bool shouldWarnOutParam(const std::string& typeName) {
- static const std::vector<std::string> kNoOutParamTypes = {"ParcelFileDescriptor",
- "FileDescriptor",
- "ParcelableHolder",
- "IBinder",
- "String",
- "CharacterSequence",
- "void",
- "boolean",
- "byte",
- "char",
- "int",
- "long",
- "float",
- "double"};
- return std::find(kNoOutParamTypes.begin(), kNoOutParamTypes.end(), typeName) !=
- kNoOutParamTypes.end();
-}
+void AidlHelper::emitAidl(const Interface& interface, const Coordinator& coordinator) {
+ for (const NamedType* type : interface.getSubTypes()) {
+ emitAidl(*type, coordinator);
+ }
-void AidlHelper::emitAidl(
- const Interface& interface, const Coordinator& coordinator,
- const std::map<const NamedType*, const ProcessedCompoundType>& processedTypes) {
- Formatter out = getFileWithHeader(interface, coordinator, processedTypes);
+ Formatter out = getFileWithHeader(interface, coordinator);
interface.emitDocComment(out);
if (interface.superType() && interface.superType()->fqName() != gIBaseFqName) {
@@ -181,164 +151,132 @@ void AidlHelper::emitAidl(
<< " but AIDL does not support interface inheritance.\n";
}
- out << "@VintfStability\n";
out << "interface " << getAidlName(interface.fqName()) << " ";
out.block([&] {
- std::map<std::string, NodeWithVersion<NamedType>> latestTypeForBaseName;
- std::vector<const NodeWithVersion<NamedType>> supersededNamedTypes;
- std::map<std::string, NodeWithVersion<Method>> latestMethodForBaseName;
- std::vector<const NodeWithVersion<Method>> supersededMethods;
- for (const Interface* iface : interface.typeChain()) {
- if (!AidlHelper::shouldBeExpanded(interface.fqName(), iface->fqName())) {
- // Stop traversing extended interfaces once they leave this package
- break;
- }
- for (const Method* method : iface->userDefinedMethods()) {
- pushVersionedNodeOntoMap({iface->fqName().getPackageMajorVersion(),
- iface->fqName().getPackageMinorVersion(), method,
- getBaseName(method->name())},
- &latestMethodForBaseName, &supersededMethods);
- }
- // Types from other interfaces will be handled while those interfaces
- // are being emitted.
- if (iface->getBaseName() != interface.getBaseName()) {
- continue;
- }
- for (const NamedType* type : iface->getSubTypes()) {
- // The baseName for types is not being stripped of the version
- // numbers like that of the methods. If a type was named
- // BigStruct_1_1 and the previous version was named BigStruct,
- // they will be treated as two different types.
- pushVersionedNodeOntoMap({iface->fqName().getPackageMajorVersion(),
- iface->fqName().getPackageMinorVersion(), type,
- getAidlName(type->fqName())},
- &latestTypeForBaseName, &supersededNamedTypes);
+ for (const NamedType* type : interface.getSubTypes()) {
+ emitAidl(*type, coordinator);
+ }
+
+ std::map<std::string, MethodWithVersion> methodMap;
+ std::vector<const MethodWithVersion*> ignoredMethods;
+ std::vector<std::string> methodNames;
+ std::vector<const Interface*> typeChain = interface.typeChain();
+ for (auto iface = typeChain.rbegin(); iface != typeChain.rend(); ++iface) {
+ for (const Method* method : (*iface)->userDefinedMethods()) {
+ pushVersionedMethodOntoMap(
+ {(*iface)->fqName().getPackageMajorVersion(),
+ (*iface)->fqName().getPackageMinorVersion(), method, method->name()},
+ &methodMap, &ignoredMethods);
+ methodNames.push_back(method->name());
}
}
- // Add comment for superseded types
- out.join(supersededNamedTypes.begin(), supersededNamedTypes.end(), "\n",
- [&](const NodeWithVersion<NamedType>& versionedType) {
- out << "// Ignoring type " << getAidlName(versionedType.node->fqName())
- << " from " << versionedType.major << "." << versionedType.minor
+ std::set<std::string> ignoredMethodNames;
+ out.join(ignoredMethods.begin(), ignoredMethods.end(), "\n",
+ [&](const MethodWithVersion* versionedMethod) {
+ out << "// Ignoring method " << versionedMethod->method->name() << " from "
+ << versionedMethod->major << "." << versionedMethod->minor
<< "::" << getAidlName(interface.fqName())
<< " since a newer alternative is available.";
+ ignoredMethodNames.insert(versionedMethod->method->name());
});
- if (!supersededNamedTypes.empty()) out << "\n\n";
+ if (!ignoredMethods.empty()) out << "\n\n";
- // Add comment for superseded methods
- out.join(supersededMethods.begin(), supersededMethods.end(), "\n",
- [&](const NodeWithVersion<Method>& versionedMethod) {
- out << "// Ignoring method " << versionedMethod.node->name() << " from "
- << versionedMethod.major << "." << versionedMethod.minor
- << "::" << getAidlName(interface.fqName())
- << " since a newer alternative is available.";
- });
- if (!supersededMethods.empty()) out << "\n\n";
-
- // Emit latest methods defined for this interface
- out.join(latestMethodForBaseName.begin(), latestMethodForBaseName.end(), "\n",
- [&](const std::pair<std::string, NodeWithVersion<Method>>& methodPair) {
- const Method* method = methodPair.second.node;
- const std::string& baseName = methodPair.first;
- std::vector<NamedReference<Type>*> results;
- std::vector<ResultTransformation> transformations;
- for (NamedReference<Type>* res : method->results()) {
- const std::string aidlType = getAidlType(*res->get(), interface.fqName());
-
- if (shouldWarnStatusType(aidlType)) {
- out << "// FIXME: AIDL has built-in status types. Do we need the "
- "status type here?\n";
- }
- if (method->results().size() > 1 && shouldWarnOutParam(aidlType)) {
- out << "// FIXME: AIDL does not allow " << aidlType
- << " to be an out parameter.\n";
- out << "// Move it to return, or add it to a Parcelable.\n";
- }
- results.push_back(res);
- }
-
- if (method->name() != baseName) {
- out << "// Changing method name from " << method->name() << " to "
- << baseName << "\n";
- }
-
- std::string returnType = "void";
- if (results.size() == 1) {
- returnType = getAidlType(*results[0]->get(), interface.fqName());
-
- out << "// Adding return type to method instead of out param "
- << returnType << " " << results[0]->name()
- << " since there is only one return value.\n";
- transformations.emplace_back(ResultTransformation{
- results[0]->name(), ResultTransformation::TransformType::MOVED});
- results.clear();
- }
-
- if (method->getDocComment() != nullptr) {
- std::vector<std::string> modifiedDocComment;
- for (const std::string& line : method->getDocComment()->lines()) {
- std::vector<std::string> tokens = base::Split(line, " ");
- if (tokens.size() <= 1 || tokens[0] != "@return") {
- // unimportant line
- modifiedDocComment.emplace_back(line);
- continue;
- }
-
- const std::string& res = tokens[1];
- bool transformed = false;
- for (const ResultTransformation& transform : transformations) {
- if (transform.resultName != res) continue;
-
- // Some transform was done to it
- if (transform.type == ResultTransformation::TransformType::MOVED) {
- // remove the name
- tokens.erase(++tokens.begin());
- transformed = true;
- } else {
- CHECK(transform.type ==
- ResultTransformation::TransformType::REMOVED);
- tokens.insert(tokens.begin(),
- "FIXME: The following return was removed\n");
- transformed = true;
- }
- }
-
- if (!transformed) {
- tokens.erase(tokens.begin());
- tokens.insert(tokens.begin(), "@param out");
- }
-
- modifiedDocComment.emplace_back(base::Join(tokens, " "));
- }
-
- DocComment(modifiedDocComment, HIDL_LOCATION_HERE).emit(out);
- }
-
- WrappedOutput wrappedOutput(MAX_LINE_LENGTH);
-
- if (method->isOneway()) wrappedOutput << "oneway ";
- wrappedOutput << returnType << " " << baseName << "(";
-
- if (results.empty()) {
- emitAidlMethodParams(&wrappedOutput, method->args(), /* prefix */ "in ",
- /* attachToLast */ ");\n", interface);
- } else {
- const bool emitArgs = !method->args().empty();
- if (emitArgs) {
- emitAidlMethodParams(&wrappedOutput, method->args(),
- /* prefix */ "in ",
- /* attachToLast */ ",", interface);
- }
- wrappedOutput.group([&] {
- if (emitArgs) wrappedOutput.printUnlessWrapped(" ");
- emitAidlMethodParams(&wrappedOutput, results, /* prefix */ "out ",
- /* attachToLast */ ");\n", interface);
- });
- }
-
- out << wrappedOutput;
- });
+ out.join(methodNames.begin(), methodNames.end(), "\n", [&](const std::string& name) {
+ const Method* method = methodMap[name].method;
+ if (method == nullptr) {
+ CHECK(ignoredMethodNames.count(name) == 1);
+ return;
+ }
+
+ std::vector<NamedReference<Type>*> results;
+ std::vector<ResultTransformation> transformations;
+ for (NamedReference<Type>* res : method->results()) {
+ const std::string aidlType = getAidlType(*res->get(), interface.fqName());
+
+ if (shouldWarnStatusType(aidlType)) {
+ out << "// FIXME: AIDL has built-in status types. Do we need the status type "
+ "here?\n";
+ }
+ results.push_back(res);
+ }
+
+ if (method->name() != name) {
+ out << "// Changing method name from " << method->name() << " to " << name << "\n";
+ }
+
+ std::string returnType = "void";
+ if (results.size() == 1) {
+ returnType = getAidlType(*results[0]->get(), interface.fqName());
+
+ out << "// Adding return type to method instead of out param " << returnType << " "
+ << results[0]->name() << " since there is only one return value.\n";
+ transformations.emplace_back(ResultTransformation{
+ results[0]->name(), ResultTransformation::TransformType::MOVED});
+ results.clear();
+ }
+
+ if (method->getDocComment() != nullptr) {
+ std::vector<std::string> modifiedDocComment;
+ for (const std::string& line : method->getDocComment()->lines()) {
+ std::vector<std::string> tokens = base::Split(line, " ");
+ if (tokens.size() <= 1 || tokens[0] != "@return") {
+ // unimportant line
+ modifiedDocComment.emplace_back(line);
+ continue;
+ }
+
+ const std::string& res = tokens[1];
+ bool transformed = false;
+ for (const ResultTransformation& transform : transformations) {
+ if (transform.resultName != res) continue;
+
+ // Some transform was done to it
+ if (transform.type == ResultTransformation::TransformType::MOVED) {
+ // remove the name
+ tokens.erase(++tokens.begin());
+ transformed = true;
+ } else {
+ CHECK(transform.type == ResultTransformation::TransformType::REMOVED);
+ tokens.insert(tokens.begin(),
+ "FIXME: The following return was removed\n");
+ transformed = true;
+ }
+ }
+
+ if (!transformed) {
+ tokens.erase(tokens.begin());
+ tokens.insert(tokens.begin(), "@param out");
+ }
+
+ modifiedDocComment.emplace_back(base::Join(tokens, " "));
+ }
+
+ DocComment(modifiedDocComment, HIDL_LOCATION_HERE).emit(out);
+ }
+
+ WrappedOutput wrappedOutput(MAX_LINE_LENGTH);
+
+ if (method->isOneway()) wrappedOutput << "oneway ";
+ wrappedOutput << returnType << " " << name << "(";
+
+ if (results.empty()) {
+ emitAidlMethodParams(&wrappedOutput, method->args(), /* prefix */ "in ",
+ /* attachToLast */ ");\n", interface);
+ } else {
+ if (!method->args().empty()) {
+ emitAidlMethodParams(&wrappedOutput, method->args(), /* prefix */ "in ",
+ /* attachToLast */ ",", interface);
+ wrappedOutput.printUnlessWrapped(" ");
+ }
+
+ // TODO: Emit warning if a primitive is given as a out param.
+ emitAidlMethodParams(&wrappedOutput, results, /* prefix */ "out ",
+ /* attachToLast */ ");\n", interface);
+ }
+
+ out << wrappedOutput;
+ });
});
}
diff --git a/hidl2aidl/AidlNamedType.cpp b/hidl2aidl/AidlNamedType.cpp
index a1382d9f..8c982875 100644
--- a/hidl2aidl/AidlNamedType.cpp
+++ b/hidl2aidl/AidlNamedType.cpp
@@ -18,7 +18,6 @@
#include "CompoundType.h"
#include "Coordinator.h"
#include "EnumType.h"
-#include "Interface.h"
#include "NamedType.h"
#include "TypeDef.h"
@@ -43,84 +42,56 @@ static void emitEnumAidlDefinition(Formatter& out, const EnumType& enumType) {
CHECK(scalar != nullptr) << enumType.typeName();
enumType.emitDocComment(out);
- out << "@VintfStability\n";
out << "@Backing(type=\"" << AidlHelper::getAidlType(*scalar, enumType.fqName()) << "\")\n";
- out << "enum " << AidlHelper::getAidlType(enumType, enumType.fqName()) << " ";
-
- std::vector<const EnumValue*> values;
- const EnumType* skippedType = nullptr;
- for (const EnumType* type : enumType.typeChain()) {
- if (!AidlHelper::shouldBeExpanded(enumType.fqName(), type->fqName())) {
- skippedType = type;
- break;
- }
- values.insert(values.end(), type->values().rbegin(), type->values().rend());
- }
+ out << "enum " << enumType.fqName().name() << " ";
out.block([&] {
- if (skippedType != nullptr) {
- out << "// Not expanding values from " << skippedType->fqName().string()
- << ". See \'-e\' argument.\n";
- }
- for (auto it = values.rbegin(); it != values.rend(); ++it) {
- (*it)->emitDocComment(out);
- out << (*it)->name();
- if (!(*it)->isAutoFill()) {
- out << " = " << (*it)->constExpr()->expression();
+ enumType.forEachValueFromRoot([&](const EnumValue* value) {
+ value->emitDocComment(out);
+ out << value->name();
+ if (!value->isAutoFill()) {
+ out << " = " << value->constExpr()->expression();
}
out << ",\n";
- };
+ });
});
}
-static void emitCompoundTypeAidlDefinition(
- Formatter& out, const CompoundType& compoundType,
- const std::map<const NamedType*, const ProcessedCompoundType>& processedTypes) {
- // Get all of the subtypes and fields from this type and any older versions
- // that it references.
- const auto& it = processedTypes.find(&compoundType);
- CHECK(it != processedTypes.end()) << "Failed to find " << compoundType.fullName();
- const ProcessedCompoundType& processedType = it->second;
+static void emitCompoundTypeAidlDefinition(Formatter& out, const CompoundType& compoundType,
+ const Coordinator& coordinator) {
+ for (const NamedType* namedType : compoundType.getSubTypes()) {
+ AidlHelper::emitAidl(*namedType, coordinator);
+ }
compoundType.emitDocComment(out);
- out << "@VintfStability\n";
+ out << "parcelable " << AidlHelper::getAidlName(compoundType.fqName()) << " ";
if (compoundType.style() == CompoundType::STYLE_STRUCT) {
- out << "parcelable " << AidlHelper::getAidlName(compoundType.fqName()) << " ";
+ out.block([&] {
+ for (const NamedReference<Type>* field : compoundType.getFields()) {
+ field->emitDocComment(out);
+ out << AidlHelper::getAidlType(*field->get(), compoundType.fqName()) << " "
+ << field->name() << ";\n";
+ }
+ });
} else {
- if (compoundType.style() == CompoundType::STYLE_UNION) {
- out << "// FIXME Any discriminators should be removed since they are automatically "
- "added.\n";
- }
- out << "union " << AidlHelper::getAidlName(compoundType.fqName()) << " ";
+ out << "{}\n";
+ out << "// Cannot convert unions/safe_unions since AIDL does not support them.\n";
+ emitConversionNotes(out, compoundType);
}
- out.block([&] {
- // Emit all of the fields from the processed type
- for (auto const& fieldWithVersion : processedType.fields) {
- fieldWithVersion.field->emitDocComment(out);
- std::string aidlType =
- AidlHelper::getAidlType(*fieldWithVersion.field->get(), compoundType.fqName());
- out << aidlType << " " << fieldWithVersion.field->name() << ";\n";
- }
- });
out << "\n\n";
}
// TODO: Enum/Typedef should just emit to hidl-error.log or similar
-void AidlHelper::emitAidl(
- const NamedType& namedType, const Coordinator& coordinator,
- const std::map<const NamedType*, const ProcessedCompoundType>& processedTypes) {
- Formatter out = getFileWithHeader(namedType, coordinator, processedTypes);
+void AidlHelper::emitAidl(const NamedType& namedType, const Coordinator& coordinator) {
+ Formatter out = getFileWithHeader(namedType, coordinator);
if (namedType.isTypeDef()) {
const TypeDef& typeDef = static_cast<const TypeDef&>(namedType);
emitTypeDefAidlDefinition(out, typeDef);
} else if (namedType.isCompoundType()) {
const CompoundType& compoundType = static_cast<const CompoundType&>(namedType);
- emitCompoundTypeAidlDefinition(out, compoundType, processedTypes);
+ emitCompoundTypeAidlDefinition(out, compoundType, coordinator);
} else if (namedType.isEnum()) {
const EnumType& enumType = static_cast<const EnumType&>(namedType);
emitEnumAidlDefinition(out, enumType);
- } else if (namedType.isInterface()) {
- const Interface& iface = static_cast<const Interface&>(namedType);
- emitAidl(iface, coordinator, processedTypes);
} else {
out << "// TODO: Fix this " << namedType.definedName() << "\n";
}
diff --git a/hidl2aidl/test/1.2/IFoo.hal b/hidl2aidl/AidlScope.cpp
index 344f2e7a..bd74c30b 100644
--- a/hidl2aidl/test/1.2/IFoo.hal
+++ b/hidl2aidl/AidlScope.cpp
@@ -14,13 +14,17 @@
* limitations under the License.
*/
-package hidl2aidl.test@1.2;
+#include "AidlHelper.h"
+#include "Coordinator.h"
+#include "NamedType.h"
+#include "Scope.h"
-import @1.1::IFoo;
+namespace android {
-interface IFoo extends @1.1::IFoo {
- /*
- * Should take precedence over @1.1::someBar
- */
- someBar_1_2(string a, string b);
-};
+void AidlHelper::emitAidl(const Scope& scope, const Coordinator& coordinator) {
+ for (const NamedType* type : scope.getSubTypes()) {
+ AidlHelper::emitAidl(*type, coordinator);
+ }
+}
+
+} // namespace android
diff --git a/hidl2aidl/AidlTranslate.cpp b/hidl2aidl/AidlTranslate.cpp
deleted file mode 100644
index aa47664b..00000000
--- a/hidl2aidl/AidlTranslate.cpp
+++ /dev/null
@@ -1,545 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <android-base/logging.h>
-#include <android-base/strings.h>
-#include <hidl-util/FQName.h>
-#include <hidl-util/Formatter.h>
-#include <hidl-util/StringHelper.h>
-#include <limits>
-#include <set>
-#include <string>
-#include <vector>
-
-#include "AidlHelper.h"
-#include "ArrayType.h"
-#include "CompoundType.h"
-#include "ConstantExpression.h"
-#include "Coordinator.h"
-#include "EnumType.h"
-#include "Interface.h"
-#include "NamedType.h"
-#include "ScalarType.h"
-#include "Scope.h"
-#include "VectorType.h"
-
-namespace android {
-
-std::string AidlHelper::translateHeaderFile(const FQName& fqName, AidlBackend backend) {
- switch (backend) {
- case AidlBackend::NDK:
- return AidlHelper::getAidlPackagePath(fqName) + "/translate-ndk.h";
- case AidlBackend::CPP:
- return AidlHelper::getAidlPackagePath(fqName) + "/translate-cpp.h";
- default:
- LOG(FATAL) << "Unexpected AidlBackend value";
- return "";
- }
-}
-
-std::string AidlHelper::translateSourceFile(const FQName& fqName, AidlBackend backend) {
- switch (backend) {
- case AidlBackend::NDK:
- return AidlHelper::getAidlPackagePath(fqName) + "/translate-ndk.cpp";
- case AidlBackend::CPP:
- return AidlHelper::getAidlPackagePath(fqName) + "/translate-cpp.cpp";
- case AidlBackend::JAVA:
- return AidlHelper::getAidlPackagePath(fqName) + "/Translate.java";
- default:
- LOG(FATAL) << "Unexpected AidlBackend value";
- return "";
- }
-}
-
-static const std::string aidlTypePackage(const NamedType& type, AidlBackend backend) {
- const std::string prefix = (backend == AidlBackend::NDK) ? "aidl::" : std::string();
- const std::string separator = (backend == AidlBackend::JAVA) ? "." : "::";
- return prefix +
- base::Join(base::Split(AidlHelper::getAidlPackage(type.fqName()), "."), separator) +
- separator + AidlHelper::getAidlType(type, type.fqName());
-}
-
-static void emitEnumStaticAssert(Formatter& out, const NamedType& namedType, AidlBackend backend) {
- CHECK(namedType.isEnum());
- const auto& enumType = static_cast<const EnumType&>(namedType);
-
- std::vector<const EnumValue*> values;
- for (const EnumType* type : enumType.typeChain()) {
- if (!AidlHelper::shouldBeExpanded(enumType.fqName(), type->fqName())) {
- break;
- }
- values.insert(values.end(), type->values().rbegin(), type->values().rend());
- }
-
- for (auto it = values.rbegin(); it != values.rend(); ++it) {
- out << "static_assert(" << aidlTypePackage(namedType, backend) << "::" << (*it)->name()
- << " == static_cast<" << aidlTypePackage(namedType, backend) << ">("
- << namedType.fullName() << "::" << (*it)->name() << "));\n";
- };
-
- out << "\n";
-}
-
-static void emitStaticAsserts(Formatter& out, const std::set<const NamedType*>& namedTypes,
- AidlBackend backend) {
- CHECK(backend != AidlBackend::JAVA);
- for (const auto& namedType : namedTypes) {
- if (namedType->isEnum()) {
- emitEnumStaticAssert(out, *namedType, backend);
- }
- }
-}
-
-static void namedTypeTranslation(Formatter& out, const std::set<const NamedType*>& namedTypes,
- const FieldWithVersion& field, const CompoundType* parent,
- AidlBackend backend) {
- const NamedType* type = static_cast<const NamedType*>(field.field->get());
- if (namedTypes.find(type) == namedTypes.end()) {
- std::optional<const ReplacedTypeInfo> replacedType =
- AidlHelper::getAidlReplacedType(type->fqName());
- if (replacedType) {
- std::optional<std::function<void(Formatter&)>> translateField =
- replacedType.value().translateField;
- if (translateField) {
- translateField.value()(out);
- }
- } else {
- AidlHelper::notes() << "An unknown named type was found in translation: "
- << type->fqName().string() + "\n";
- out << "// FIXME Unknown type: " << type->fqName().string() << "\n";
- out << "// That type's package needs to be converted separately and the corresponding "
- "translate function should be added here.\n";
- }
- } else {
- if (parent->style() == CompoundType::STYLE_STRUCT) {
- if (backend == AidlBackend::JAVA) {
- out << "out." << field.field->name() << " = h2aTranslate(in." << field.fullName
- << ");\n";
- } else {
- out << "if (!translate(in." << field.fullName << ", &out->" << field.field->name()
- << ")) return false;\n";
- }
- } else {
- if (backend == AidlBackend::JAVA) {
- out << "out.set" << StringHelper::Capitalize(field.field->name())
- << "(h2aTranslate(in." << field.fullName << "()));\n";
- } else {
- out << "{\n";
- out << aidlTypePackage(*type, backend) << " " << field.field->name() << ";\n";
- out << "if (!translate(in." << field.fullName + "(), &" << field.field->name()
- << ")) return false;\n";
- out << "out->set<" << aidlTypePackage(*parent, backend) << "::" << field.fullName
- << ">(" << field.field->name() << ");\n";
- out << "}\n";
- }
- }
- }
-}
-
-static void h2aScalarChecks(Formatter& out, const Type& type, const std::string& inputAccess,
- AidlBackend backend) {
- static const std::map<ScalarType::Kind, std::pair<std::string, size_t>> kSignedMaxSize{
- {ScalarType::KIND_UINT8,
- {"std::numeric_limits<int8_t>::max()", std::numeric_limits<int8_t>::max()}},
- {ScalarType::KIND_UINT16, {"", 0}},
- {ScalarType::KIND_INT16, {"", 0}},
- {ScalarType::KIND_UINT32,
- {"std::numeric_limits<int32_t>::max()", std::numeric_limits<int32_t>::max()}},
- {ScalarType::KIND_UINT64,
- {"std::numeric_limits<int64_t>::max()", std::numeric_limits<int64_t>::max()}}};
- const ScalarType* scalarType = type.resolveToScalarType();
- if (scalarType != nullptr && !type.isEnum()) {
- const auto& it = kSignedMaxSize.find(scalarType->getKind());
- // *int16_t is a special case for both HIDL and AIDL. For uint16_t, checks are only
- // needed in the Java backend.
- if (backend != AidlBackend::JAVA && scalarType->getKind() == ScalarType::KIND_UINT16) {
- return;
- }
- if (it != kSignedMaxSize.end()) {
- out << "// FIXME This requires conversion between signed and unsigned. Change this if "
- "it doesn't suit your needs.\n";
- if (scalarType->getKind() == ScalarType::KIND_UINT16 ||
- scalarType->getKind() == ScalarType::KIND_INT16) {
- // HIDL uses a signed 16-bit char in Java for uint16_t and int16_t
- // AIDL uses an unsigned 16-bit char/char16_t, so this is signed to unsigned.
- out << "if (" << inputAccess << " < 0) {\n";
- } else {
- std::string affix = (scalarType->getKind() == ScalarType::KIND_UINT64) ? "L" : "";
- std::string limit = (backend == AidlBackend::JAVA)
- ? std::to_string(it->second.second) + affix
- : it->second.first;
- out << "if (" << inputAccess << " > " << limit << " || " << inputAccess
- << " < 0) {\n";
- }
- if (backend == AidlBackend::JAVA) {
- out.indent([&] {
- out << "throw new RuntimeException(\"Unsafe conversion between signed and "
- "unsigned scalars for field: "
- << inputAccess << "\");\n";
- });
- } else {
- out.indent([&] { out << "return false;\n"; });
- }
- out << "}\n";
- }
- }
-}
-
-static std::string wrapToString16(const std::string& payload, AidlBackend backend) {
- if (backend == AidlBackend::CPP) {
- return "String16(" + payload + ".c_str())";
- } else {
- return payload;
- }
-}
-
-static std::string wrapStaticCast(const std::string& payload, const Type& type,
- const FQName& fqName, AidlBackend backend) {
- static const std::map<std::string, std::string> kAidlBackendScalarTypes{
- {"boolean", "bool"}, {"byte", "int8_t"}, {"char", "char16_t"}, {"int", "int32_t"},
- {"long", "int64_t"}, {"float", "float"}, {"double", "double"}};
- if (type.isEnum()) {
- return "static_cast<" +
- aidlTypePackage(static_cast<const android::NamedType&>(type), backend) + ">(" +
- payload + ")";
- }
- const auto& it = kAidlBackendScalarTypes.find(AidlHelper::getAidlType(type, fqName));
- if (it != kAidlBackendScalarTypes.end()) {
- return "static_cast<" + it->second + ">(" + payload + ")";
- } else {
- return payload;
- }
-}
-
-static std::string wrapCppSource(const std::string& payload, const Type& type, const FQName& fqName,
- AidlBackend backend) {
- if (type.isString()) {
- return wrapToString16(payload, backend);
- } else if (type.isBitField()) {
- return wrapStaticCast(payload, *static_cast<const BitFieldType&>(type).getElementEnumType(),
- fqName, backend);
- } else {
- return wrapStaticCast(payload, type, fqName, backend);
- }
-}
-
-static void containerTranslation(Formatter& out, const FieldWithVersion& field,
- const CompoundType* parent, AidlBackend backend) {
- const Type* elementType;
- std::string javaSizeAccess;
- std::string javaElementAccess;
- std::string cppSize;
- if (field.field->type().isArray()) {
- elementType = static_cast<const ArrayType*>(field.field->get())->getElementType();
- javaSizeAccess = ".length";
- javaElementAccess = "[i]";
- cppSize = "sizeof(in." + field.fullName + ")/sizeof(in." + field.fullName + "[0])";
- } else if (field.field->type().isVector()) {
- elementType = static_cast<const VectorType*>(field.field->get())->getElementType();
- javaSizeAccess = ".size()";
- javaElementAccess = ".get(i)";
- cppSize = "in." + field.fullName + ".size()";
- } else {
- LOG(FATAL) << "Unexpected container type for field: " << field.field->name();
- return;
- }
- if (elementType->isArray() || elementType->isVector()) {
- out << "#error Nested arrays and vectors are currently not supported. Needs implementation "
- "for field: "
- << field.field->name() << "\n";
- return;
- }
- if (elementType->isNamedType() && !elementType->isEnum()) {
- out << "#error Arrays of NamedTypes are not currently not supported. Needs implementation "
- "for field: "
- << field.field->name() << "\n";
- return;
- }
- if (backend == AidlBackend::JAVA) {
- const std::string inputAccess = "in." + field.fullName;
- out << "if (" << inputAccess << " != null) {\n";
- out.indent([&] {
- out << "out." << field.field->name() << " = new " << elementType->getJavaType(true)
- << "[" << inputAccess << javaSizeAccess << "];\n";
- out << "for (int i = 0; i < " << inputAccess << javaSizeAccess << "; i++) {\n";
- out.indent([&] {
- h2aScalarChecks(out, *elementType, inputAccess + javaElementAccess, backend);
- out << "out." << field.field->name() << "[i] = " << inputAccess << javaElementAccess
- << ";\n";
- });
- out << "}\n";
- });
- out << "}\n";
- } else {
- const std::string inputAccessElement = "in." + field.fullName + "[i]";
- out << "{\n";
- out.indent([&] {
- out << "size_t size = " << cppSize << ";\n";
- out << "for (size_t i = 0; i < size; i++) {\n";
- out.indent([&] {
- h2aScalarChecks(out, *elementType, inputAccessElement, backend);
- out << "out->" << field.field->name() << ".push_back("
- << wrapCppSource(inputAccessElement, *elementType, parent->fqName(), backend)
- << ");\n";
- });
- out << "}\n";
- });
- out << "}\n";
- }
-}
-
-static void simpleTranslation(Formatter& out, const FieldWithVersion& field,
- const CompoundType* parent, AidlBackend backend) {
- std::string inputAccess = "in." + field.fullName;
- if (backend == AidlBackend::JAVA) {
- // HIDL uses short(signed) in the Java backend for uint16_t and int16_t
- // AIDL uses char which is unsigned. This assignment needs a cast.
- std::string cast;
- if (AidlHelper::getAidlType(field.field->type(), parent->fqName()) == "char") {
- cast = "(char) ";
- }
- if (parent->style() == CompoundType::STYLE_STRUCT) {
- h2aScalarChecks(out, field.field->type(), inputAccess, backend);
- out << "out." << field.field->name() << " = " << cast << inputAccess << ";\n";
- } else {
- inputAccess += "()";
- h2aScalarChecks(out, field.field->type(), inputAccess, backend);
- out << "out.set" << StringHelper::Capitalize(field.fullName) << "(" << cast
- << inputAccess << ");\n";
- }
- } else {
- if (parent->style() == CompoundType::STYLE_STRUCT) {
- h2aScalarChecks(out, field.field->type(), inputAccess, backend);
- out << "out->" << field.field->name() << " = "
- << wrapCppSource("in." + field.fullName, field.field->type(), parent->fqName(),
- backend)
- << ";\n";
- } else {
- inputAccess += "()";
- h2aScalarChecks(out, field.field->type(), inputAccess, backend);
- out << "*out = "
- << wrapCppSource(inputAccess, field.field->type(), parent->fqName(), backend)
- << ";\n";
- }
- }
-}
-
-static void h2aFieldTranslation(Formatter& out, const std::set<const NamedType*>& namedTypes,
- const CompoundType* parent, const FieldWithVersion& field,
- AidlBackend backend) {
- if (field.field->type().isNamedType() && !field.field->type().isEnum()) {
- namedTypeTranslation(out, namedTypes, field, parent, backend);
- } else if (field.field->type().isArray() || field.field->type().isVector()) {
- containerTranslation(out, field, parent, backend);
- } else if (field.field->type().isEnum() || field.field->type().isScalar() ||
- field.field->type().isString() || field.field->type().isBitField()) {
- simpleTranslation(out, field, parent, backend);
- } else {
- AidlHelper::notes() << "An unhandled type was found in translation: "
- << field.field->type().typeName() << "\n";
- out << "#error FIXME Unhandled type: " << field.field->type().typeName() << "\n";
- }
-}
-
-static const std::string declareAidlFunctionSignature(const NamedType* type, AidlBackend backend) {
- if (backend == AidlBackend::JAVA) {
- return "static public " + aidlTypePackage(*type, backend) + " h2aTranslate(" +
- type->fullJavaName() + " in)";
- } else {
- return "__attribute__((warn_unused_result)) bool translate(const " + type->fullName() +
- "& in, " + aidlTypePackage(*type, backend) + "* out)";
- }
-}
-
-static const std::string getHidlPackagePath(const NamedType* type) {
- return base::Join(base::Split(type->fqName().package(), "."), "/");
-}
-
-static std::optional<const Interface*> getParentInterface(const NamedType* type) {
- const Scope* parent = type->parent();
- while (parent != nullptr) {
- if (parent->definesInterfaces()) {
- return parent->getInterface();
- }
- parent = parent->parent();
- }
- return std::nullopt;
-}
-
-static const std::string hidlIncludeFile(const NamedType* type) {
- std::optional<const Interface*> parent = getParentInterface(type);
- if (parent) {
- return "#include \"" + getHidlPackagePath(type) + "/" + type->fqName().version() + "/" +
- parent.value()->fqName().getInterfaceName() + ".h\"\n";
- } else {
- return "#include \"" + getHidlPackagePath(type) + "/" + type->fqName().version() +
- "/types.h\"\n";
- }
-}
-
-static const std::string aidlIncludeFile(const NamedType* type, AidlBackend backend) {
- const std::string prefix = (backend == AidlBackend::NDK) ? "aidl/" : std::string();
- return "#include \"" + prefix + AidlHelper::getAidlPackagePath(type->fqName()) + "/" +
- AidlHelper::getAidlType(*type, type->fqName()) + ".h\"\n";
-}
-
-static void emitCppTranslateHeader(
- const Coordinator& coordinator, const FQName& fqName,
- const std::set<const NamedType*>& namedTypes,
- const std::map<const NamedType*, const ProcessedCompoundType>& processedTypes,
- AidlBackend backend) {
- CHECK(backend == AidlBackend::CPP || backend == AidlBackend::NDK);
- Formatter out =
- coordinator.getFormatter(fqName, Coordinator::Location::DIRECT,
- "include/" + AidlHelper::translateHeaderFile(fqName, backend));
-
- AidlHelper::emitFileHeader(out);
- out << "// FIXME Remove this file if you don't need to translate types in this backend.\n\n";
- out << "#pragma once\n\n";
-
- std::set<std::string> includes = {"#include <limits>"};
- for (const auto& type : namedTypes) {
- const auto& it = processedTypes.find(type);
- if (it == processedTypes.end() && !type->isEnum()) {
- continue;
- }
- includes.insert(aidlIncludeFile(type, backend));
- includes.insert(hidlIncludeFile(type));
- }
- out << base::Join(includes, "") << "\n\n";
-
- out << "namespace android::h2a {\n\n";
- for (const auto& type : namedTypes) {
- const auto& it = processedTypes.find(type);
- if (it == processedTypes.end()) {
- continue;
- }
- out << declareAidlFunctionSignature(type, backend) << ";\n";
- }
- out << "\n} // namespace android::h2a\n";
-}
-
-static void emitTranslateSource(
- const Coordinator& coordinator, const FQName& fqName,
- const std::set<const NamedType*>& namedTypes,
- const std::map<const NamedType*, const ProcessedCompoundType>& processedTypes,
- AidlBackend backend) {
- Formatter out = coordinator.getFormatter(fqName, Coordinator::Location::DIRECT,
- AidlHelper::translateSourceFile(fqName, backend));
- AidlHelper::emitFileHeader(out);
- out << "// FIXME Remove this file if you don't need to translate types in this backend.\n\n";
- if (backend == AidlBackend::JAVA) {
- out << "package " << AidlHelper::getAidlPackage(fqName) + ";\n\n";
- out << "public class Translate {\n";
- } else {
- out << "#include \""
- << AidlHelper::translateHeaderFile((*namedTypes.begin())->fqName(), backend) + "\"\n\n";
- out << "namespace android::h2a {\n\n";
- emitStaticAsserts(out, namedTypes, backend);
- }
- for (const auto& type : namedTypes) {
- const auto& it = processedTypes.find(type);
- if (it == processedTypes.end()) {
- continue;
- }
- CHECK(type->isCompoundType()) << "Unexpected type: " << type->fqName().string();
- const CompoundType* compound = static_cast<const CompoundType*>(type);
-
- if (compound->style() == CompoundType::STYLE_UNION) {
- // HIDL Java backend doesn't support union so don't add a comment.
- if (backend != AidlBackend::JAVA) {
- out << "// FIXME not enough information to safely convert. Remove this function or "
- "fill it out using the custom discriminators.\n";
- out << "// " << declareAidlFunctionSignature(type, backend) << "\n\n";
- }
- continue;
- }
-
- out << declareAidlFunctionSignature(type, backend) << " {\n";
- if (compound->style() == CompoundType::STYLE_SAFE_UNION) {
- out.indent([&] {
- if (backend == AidlBackend::JAVA) {
- out << aidlTypePackage(*type, backend) << " out = new "
- << aidlTypePackage(*type, backend) << "();\n";
- }
- out << "switch (in.getDiscriminator()) {\n";
- out.indent([&] {
- const ProcessedCompoundType& processedType = it->second;
- for (const auto& field : processedType.fields) {
- if (backend == AidlBackend::JAVA) {
- out << "case " << compound->fullJavaName() << ".hidl_discriminator."
- << field.field->name() << ":\n";
- } else {
- out << "case " << compound->fullName()
- << "::hidl_discriminator::" << field.field->name() << ":\n";
- }
- out.indent([&] {
- h2aFieldTranslation(out, namedTypes, compound, field, backend);
- out << "break;\n";
- });
- }
- out << "default:\n";
- if (backend == AidlBackend::JAVA) {
- out.indent([&] {
- out << "throw new RuntimeException(\"Unknown discriminator value: \" + "
- "Integer.toString(in.getDiscriminator()));\n";
- });
- } else {
- out.indent([&] { out << "return false;\n"; });
- }
- });
- out << "}\n";
- });
- } else {
- out.indent([&] {
- if (backend == AidlBackend::JAVA) {
- out << aidlTypePackage(*type, backend) << " out = new "
- << aidlTypePackage(*type, backend) << "();\n";
- }
- const ProcessedCompoundType& processedType = it->second;
- for (const auto& field : processedType.fields) {
- h2aFieldTranslation(out, namedTypes, compound, field, backend);
- }
- });
- }
- if (backend == AidlBackend::JAVA) {
- out.indent([&] { out << "return out;\n"; });
- } else {
- out.indent([&] { out << "return true;\n"; });
- }
- out << "}\n\n";
- }
- if (backend == AidlBackend::JAVA) {
- out << "}";
- } else {
- out << "} // namespace android::h2a";
- }
-}
-
-void AidlHelper::emitTranslation(
- const Coordinator& coordinator, const FQName& fqName,
- const std::set<const NamedType*>& namedTypes,
- const std::map<const NamedType*, const ProcessedCompoundType>& processedTypes) {
- if (processedTypes.empty()) return;
- for (auto backend : {AidlBackend::NDK, AidlBackend::CPP, AidlBackend::JAVA}) {
- if (backend != AidlBackend::JAVA) {
- emitCppTranslateHeader(coordinator, fqName, namedTypes, processedTypes, backend);
- }
- emitTranslateSource(coordinator, fqName, namedTypes, processedTypes, backend);
- }
-}
-
-} // namespace android
diff --git a/hidl2aidl/AidlType.cpp b/hidl2aidl/AidlType.cpp
index 471044e6..d293de1c 100644
--- a/hidl2aidl/AidlType.cpp
+++ b/hidl2aidl/AidlType.cpp
@@ -18,8 +18,6 @@
#include <string>
#include "AidlHelper.h"
-#include "ArrayType.h"
-#include "EnumType.h"
#include "FmqType.h"
#include "NamedType.h"
#include "Type.h"
@@ -31,46 +29,19 @@ static std::string getPlaceholderType(const std::string& type) {
return "IBinder /* FIXME: " + type + " */";
}
-static const std::map<std::string, ReplacedTypeInfo> kReplacedTypes{
- {"android.hidl.safe_union@1.0::Monostate",
- ReplacedTypeInfo{
- "boolean", std::nullopt,
- [](Formatter& out) { out << "// Nothing to translate for Monostate.\n"; }}},
-};
-
-std::optional<const ReplacedTypeInfo> AidlHelper::getAidlReplacedType(const FQName& fqName) {
- const auto& it = kReplacedTypes.find(fqName.string());
- if (it != kReplacedTypes.end()) {
- return it->second;
- }
- return std::nullopt;
-}
-
std::string AidlHelper::getAidlType(const Type& type, const FQName& relativeTo) {
if (type.isVector()) {
const VectorType& vec = static_cast<const VectorType&>(type);
- return getAidlType(*vec.getElementType(), relativeTo) + "[]";
- } else if (type.isArray()) {
- const ArrayType& arr = static_cast<const ArrayType&>(type);
- return getAidlType(*arr.getElementType(), relativeTo) + "[]";
+ const Type* elementType = vec.getElementType();
+
+ // Aidl doesn't support List<*> for C++ and NDK backends
+ return getAidlType(*elementType, relativeTo) + "[]";
} else if (type.isNamedType()) {
const NamedType& namedType = static_cast<const NamedType&>(type);
if (getAidlPackage(relativeTo) == getAidlPackage(namedType.fqName())) {
return getAidlName(namedType.fqName());
} else {
- std::optional<const ReplacedTypeInfo> type = getAidlReplacedType(namedType.fqName());
- if (type) {
- notes() << "Replacing type " << namedType.fqName().string() << " with "
- << type.value().aidlReplacedType << ".\n";
- return type.value().aidlReplacedType;
- }
- std::optional<std::string> name = getAidlFQName(namedType.fqName()).value();
- if (name) {
- return name.value();
- } else {
- LOG(FATAL) << "Failed to resolve Aidl FQName: " << namedType.fqName().string();
- return "";
- }
+ return getAidlFQName(namedType.fqName());
}
} else if (type.isMemory()) {
return getPlaceholderType("memory");
@@ -84,13 +55,6 @@ std::string AidlHelper::getAidlType(const Type& type, const FQName& relativeTo)
// enum type goes to the primitive java type in HIDL, but AIDL should use
// the enum type name itself
return type.definedName();
- } else if (type.isBitField()) {
- const BitFieldType& bitfield = static_cast<const BitFieldType&>(type);
- return getAidlType(*bitfield.getElementType(), relativeTo);
- } else if (type.getJavaType() == "short") {
- notes() << relativeTo.name()
- << ": Consider replacing char with int if signed integer is desired\n";
- return "char";
} else {
return type.getJavaType();
}
diff --git a/hidl2aidl/Android.bp b/hidl2aidl/Android.bp
index 69cef490..816d31ea 100644
--- a/hidl2aidl/Android.bp
+++ b/hidl2aidl/Android.bp
@@ -14,15 +14,6 @@
* limitations under the License.
*/
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
cc_binary_host {
name: "hidl2aidl",
defaults: ["hidl-gen-defaults"],
@@ -30,8 +21,8 @@ cc_binary_host {
"AidlHelper.cpp",
"AidlInterface.cpp",
"AidlNamedType.cpp",
+ "AidlScope.cpp",
"AidlType.cpp",
- "AidlTranslate.cpp",
"main.cpp",
],
static_libs: [
diff --git a/hidl2aidl/main.cpp b/hidl2aidl/main.cpp
index 9a3b50e2..e440af65 100644
--- a/hidl2aidl/main.cpp
+++ b/hidl2aidl/main.cpp
@@ -25,19 +25,17 @@
#include "AST.h"
#include "AidlHelper.h"
-#include "CompoundType.h"
#include "Coordinator.h"
#include "DocComment.h"
-#include "Interface.h"
using namespace android;
static void usage(const char* me) {
Formatter out(stderr);
- out << "Usage: " << me << " [-fh] [-o <output path>] [-l <header file>] ";
+ out << "Usage: " << me << " [-o <output path>] ";
Coordinator::emitOptionsUsageString(out);
- out << " FQNAME\n\n";
+ out << " FQNAME...\n\n";
out << "Converts FQNAME, PACKAGE(.SUBPACKAGE)*@[0-9]+.[0-9]+(::TYPE)? to an aidl "
"equivalent.\n\n";
@@ -45,11 +43,8 @@ static void usage(const char* me) {
out.indent();
out.indent();
- out << "-f: Force hidl2aidl to convert older packages\n";
- out << "-e: Used for expanding extensions and types from other packages\n";
- out << "-h: Prints this menu.\n";
out << "-o <output path>: Location to output files.\n";
- out << "-l <header file>: File containing a header to prepend to generated files.\n";
+ out << "-h: Prints this menu.\n";
Coordinator::emitOptionsDetailString(out);
out.unindent();
@@ -86,7 +81,7 @@ static FQName getLatestMinorVersionFQNameFromList(const FQName& fqName,
}
static FQName getLatestMinorVersionNamedTypeFromList(const FQName& fqName,
- const std::set<const NamedType*>& list) {
+ const std::vector<const NamedType*>& list) {
FQName currentCandidate = fqName;
bool found = false;
for (const NamedType* currentNamedType : list) {
@@ -114,30 +109,6 @@ static bool packageExists(const Coordinator& coordinator, const FQName& fqName)
return result;
}
-// assuming fqName exists, find oldest version which does exist
-// e.g. android.hardware.foo@1.7 -> android.hardware.foo@1.1 (if foo@1.0 doesn't
-// exist)
-static FQName getLowestExistingFqName(const Coordinator& coordinator, const FQName& fqName) {
- FQName lowest(fqName);
- while (lowest.getPackageMinorVersion() != 0) {
- if (!packageExists(coordinator, lowest.downRev())) break;
-
- lowest = lowest.downRev();
- }
- return lowest;
-}
-
-// assuming fqName exists, find newest version which does exist
-// e.g. android.hardware.foo@1.1 -> android.hardware.foo@1.7 if that's the
-// newest
-static FQName getHighestExistingFqName(const Coordinator& coordinator, const FQName& fqName) {
- FQName highest(fqName);
- while (packageExists(coordinator, highest.upRev())) {
- highest = highest.upRev();
- }
- return highest;
-}
-
static AST* parse(const Coordinator& coordinator, const FQName& target) {
AST* ast = coordinator.parse(target);
if (ast == nullptr) {
@@ -159,114 +130,6 @@ static AST* parse(const Coordinator& coordinator, const FQName& target) {
return ast;
}
-static void getSubTypes(const NamedType& namedType, std::set<const NamedType*>* types) {
- if (namedType.isScope()) {
- const Scope& compoundType = static_cast<const Scope&>(namedType);
- for (const NamedType* subType : compoundType.getSubTypes()) {
- types->insert(subType);
- getSubTypes(*subType, types);
- }
- }
-}
-
-static void emitAidlSharedLibs(Formatter& out, FQName fqName, AidlBackend backend) {
- if (backend == AidlBackend::NDK) {
- out << " \"libbinder_ndk\",\n";
- out << " \"libhidlbase\",\n";
- out << " \"" << AidlHelper::getAidlPackage(fqName) << "-V1-ndk_platform\",\n";
- } else if (backend == AidlBackend::CPP) {
- out << " \"libbinder\",\n";
- out << " \"libhidlbase\",\n";
- out << " \"" << AidlHelper::getAidlPackage(fqName) << "-V1-cpp\",\n";
- out << " \"libutils\",\n";
- } else {
- out << " \"" << AidlHelper::getAidlPackage(fqName) << "-V1-java\",\n";
- }
-}
-
-static void emitHidlSharedLibs(Formatter& out, std::vector<FQName>& targets, AidlBackend backend) {
- std::set<std::string> uniquePackages;
- for (const auto& target : targets) {
- if (backend == AidlBackend::JAVA) {
- uniquePackages.insert(
- android::base::StringReplace(target.getPackageAndVersion().string(), "@", "-V",
- false /* all */) +
- "-java");
- } else {
- uniquePackages.insert(target.getPackageAndVersion().string());
- }
- }
- for (const auto& package : uniquePackages) {
- out << " \"" << package << "\",\n";
- }
-}
-
-static std::string aidlTranslateLibraryName(FQName fqName, AidlBackend backend) {
- std::string postfix;
- if (backend == AidlBackend::NDK) {
- postfix = "-ndk";
- } else if (backend == AidlBackend::CPP) {
- postfix = "-cpp";
- } else {
- postfix = "-java";
- }
- return AidlHelper::getAidlPackage(fqName) + "-translate" + postfix;
-}
-
-static void emitBuildFile(Formatter& out, const FQName& fqName, std::vector<FQName>& targets,
- bool needsTranslation) {
- out << "// This is the expected build file, but it may not be right in all cases\n";
- out << "\n";
- out << "aidl_interface {\n";
- out << " name: \"" << AidlHelper::getAidlPackage(fqName) << "\",\n";
- out << " vendor_available: true,\n";
- out << " srcs: [\"" << AidlHelper::getAidlPackagePath(fqName) << "/*.aidl\"],\n";
- out << " stability: \"vintf\",\n";
- out << " backend: {\n";
- out << " cpp: {\n";
- out << " // FIXME should this be disabled?\n";
- out << " // prefer NDK backend which can be used anywhere\n";
- out << " enabled: true,\n";
- out << " },\n";
- out << " java: {\n";
- out << " sdk_version: \"module_current\",\n";
- out << " },\n";
- out << " ndk: {\n";
- out << " vndk: {\n";
- out << " enabled: true,\n";
- out << " },\n";
- out << " },\n";
- out << " },\n";
- out << "}\n\n";
-
- if (!needsTranslation) return;
-
- for (auto backend : {AidlBackend::CPP, AidlBackend::NDK}) {
- out << "cc_library {\n";
- out << " name: \"" << aidlTranslateLibraryName(fqName, backend) << +"\",\n";
- if (backend == AidlBackend::NDK) {
- out << " vendor_available: true,\n";
- }
- out << " srcs: [\"" << AidlHelper::translateSourceFile(fqName, backend) + "\"],\n";
- out << " shared_libs: [\n";
- emitAidlSharedLibs(out, fqName, backend);
- emitHidlSharedLibs(out, targets, backend);
- out << " ],\n";
- out << " export_include_dirs: [\"include\"],\n";
- out << "}\n\n";
- }
-
- out << "java_library {\n";
- out << " name: \"" << aidlTranslateLibraryName(fqName, AidlBackend::JAVA) << +"\",\n";
- out << " srcs: [\"" << AidlHelper::translateSourceFile(fqName, AidlBackend::JAVA) + "\"],\n";
- out << " libs: [\n";
- emitAidlSharedLibs(out, fqName, AidlBackend::JAVA);
- emitHidlSharedLibs(out, targets, AidlBackend::JAVA);
- out << " ],\n";
- out << " sdk_version: \"module_current\",\n";
- out << "}\n\n";
-}
-
// hidl is intentionally leaky. Turn off LeakSanitizer by default.
extern "C" const char* __asan_default_options() {
return "detect_leaks=0";
@@ -282,9 +145,7 @@ int main(int argc, char** argv) {
Coordinator coordinator;
std::string outputPath;
- std::string fileHeader;
- bool forceConvertOldInterfaces = false;
- coordinator.parseOptions(argc, argv, "fho:l:e", [&](int res, char* arg) {
+ coordinator.parseOptions(argc, argv, "ho:", [&](int res, char* arg) {
switch (res) {
case 'o': {
if (!outputPath.empty()) {
@@ -294,19 +155,6 @@ int main(int argc, char** argv) {
outputPath = arg;
break;
}
- case 'l':
- if (!fileHeader.empty()) {
- fprintf(stderr, "ERROR: -l <header file> can only be specified once.\n");
- exit(1);
- }
- fileHeader = arg;
- break;
- case 'f':
- forceConvertOldInterfaces = true;
- break;
- case 'e':
- AidlHelper::setExpandExtended(true);
- break;
case 'h':
case '?':
default: {
@@ -321,7 +169,6 @@ int main(int argc, char** argv) {
outputPath += "/";
}
coordinator.setOutputPath(outputPath);
- AidlHelper::setFileHeader(fileHeader);
argc -= optind;
argv += optind;
@@ -332,135 +179,107 @@ int main(int argc, char** argv) {
exit(1);
}
- if (argc > 1) {
- usage(me);
- std::cerr << "ERROR: only one fqname can be specified." << std::endl;
- exit(1);
- }
-
- const char* arg = argv[0];
+ for (int i = 0; i < argc; ++i) {
+ const char* arg = argv[i];
- FQName fqName;
- if (!FQName::parse(arg, &fqName)) {
- std::cerr << "ERROR: Invalid fully-qualified name as argument: " << arg << "." << std::endl;
- exit(1);
- }
+ FQName fqName;
+ if (!FQName::parse(arg, &fqName)) {
+ std::cerr << "ERROR: Invalid fully-qualified name as argument: " << arg << "."
+ << std::endl;
+ exit(1);
+ }
- if (fqName.isFullyQualified()) {
- std::cerr << "ERROR: hidl2aidl only supports converting an entire package, try "
- "converting "
- << fqName.getPackageAndVersion().string() << " instead." << std::endl;
- exit(1);
- }
+ if (!packageExists(coordinator, fqName)) {
+ std::cerr << "ERROR: Could not get sources for: " << arg << "." << std::endl;
+ exit(1);
+ }
- if (!packageExists(coordinator, fqName)) {
- std::cerr << "ERROR: Could not get sources for: " << arg << "." << std::endl;
- exit(1);
- }
+ FQName currentFqName(fqName);
+ while (currentFqName.getPackageMinorVersion() != 0) {
+ if (!packageExists(coordinator, currentFqName.downRev())) break;
- if (!forceConvertOldInterfaces) {
- const FQName highestFqName = getHighestExistingFqName(coordinator, fqName);
- if (fqName != highestFqName) {
- std::cerr << "ERROR: A newer minor version of " << fqName.string() << " exists ("
- << highestFqName.string()
- << "). In general, prefer to convert that instead. If you really mean to "
- "use an old minor version use '-f'."
- << std::endl;
- exit(1);
+ currentFqName = currentFqName.downRev();
}
- }
- // This is the list of all types which should be converted
- std::vector<FQName> targets;
- for (FQName version = getLowestExistingFqName(coordinator, fqName);
- version.getPackageMinorVersion() <= fqName.getPackageMinorVersion();
- version = version.upRev()) {
- std::vector<FQName> newTargets;
- status_t err = coordinator.appendPackageInterfacesToVector(version, &newTargets);
- if (err != OK) exit(1);
+ std::vector<FQName> targets;
+ while (packageExists(coordinator, currentFqName)) {
+ std::vector<FQName> newTargets;
+ status_t err = coordinator.appendPackageInterfacesToVector(currentFqName, &newTargets);
+ if (err != OK) break;
- targets.insert(targets.end(), newTargets.begin(), newTargets.end());
- }
+ targets.insert(targets.end(), newTargets.begin(), newTargets.end());
- // targets should not contain duplicates since appendPackageInterfaces is only called once
- // per version. now remove all the elements that are not the "newest"
- const auto& newEnd =
- std::remove_if(targets.begin(), targets.end(), [&](const FQName& fqName) -> bool {
- if (fqName.name() == "types") return false;
-
- return getLatestMinorVersionFQNameFromList(fqName, targets) != fqName;
- });
- targets.erase(newEnd, targets.end());
-
- // Set up AIDL conversion log
- Formatter err =
- coordinator.getFormatter(fqName, Coordinator::Location::DIRECT, "conversion.log");
- err << "Notes relating to hidl2aidl conversion of " << fqName.string() << " to "
- << AidlHelper::getAidlPackage(fqName) << " (if any) follow:\n";
- AidlHelper::setNotes(&err);
-
- // Gather all the types and interfaces
- std::set<const NamedType*> namedTypesInPackage;
- for (const FQName& target : targets) {
-
- AST* ast = parse(coordinator, target);
- CHECK(ast);
-
- const Interface* iface = ast->getInterface();
- if (iface) {
- namedTypesInPackage.insert(iface);
-
- // Get all of the types defined in the interface chain(includes self)
- for (const Interface* interface : iface->typeChain()) {
- if (!AidlHelper::shouldBeExpanded(iface->fqName(), interface->fqName())) {
- break;
- }
- getSubTypes(*interface, &namedTypesInPackage);
+ currentFqName = currentFqName.upRev();
+ }
+
+ // targets should not contain duplicates since appendPackageInterfaces is only called once
+ // per version. now remove all the elements that are not the "newest"
+ const auto& newEnd =
+ std::remove_if(targets.begin(), targets.end(), [&](const FQName& fqName) -> bool {
+ if (fqName.name() == "types") return false;
+
+ return getLatestMinorVersionFQNameFromList(fqName, targets) != fqName;
+ });
+ targets.erase(newEnd, targets.end());
+
+ if (fqName.isFullyQualified()) {
+ // Ensure that this fqName exists in the list.
+ // If not then there is a more recent version
+ if (std::find(targets.begin(), targets.end(), fqName) == targets.end()) {
+ // Not found. Error.
+ std::cerr << "ERROR: A newer minor version of " << fqName.string()
+ << " exists. Compile that instead." << std::endl;
+ exit(1);
+ } else {
+ targets.clear();
+ targets.push_back(fqName);
}
- } else {
- getSubTypes(ast->getRootScope(), &namedTypesInPackage);
}
- }
- // Remove all of the older versions of types and keep the latest
- for (auto it = namedTypesInPackage.begin(); it != namedTypesInPackage.end();) {
- if (getLatestMinorVersionNamedTypeFromList((*it)->fqName(), namedTypesInPackage) !=
- (*it)->fqName()) {
- it = namedTypesInPackage.erase(it);
- } else {
- it++;
+ // Set up AIDL conversion log
+ std::string aidlPackage = AidlHelper::getAidlPackage(fqName);
+ std::string aidlName = AidlHelper::getAidlName(fqName);
+ Formatter err = coordinator.getFormatter(
+ fqName, Coordinator::Location::DIRECT,
+ base::Join(base::Split(aidlPackage, "."), "/") + "/" +
+ (aidlName.empty() ? "" : (aidlName + "-")) + "conversion.log");
+ AidlHelper::setNotes(&err);
+
+ std::vector<const NamedType*> namedTypesInPackage;
+ for (const FQName& target : targets) {
+ if (target.name() != "types") continue;
+
+ AST* ast = parse(coordinator, target);
+
+ CHECK(!ast->isInterface());
+
+ std::vector<const NamedType*> types = ast->getRootScope().getSortedDefinedTypes();
+ namedTypesInPackage.insert(namedTypesInPackage.end(), types.begin(), types.end());
}
- }
- // Process and flatten all of the types. Many types include fields of older
- // versions of that type.
- // This step recursively finds all of those fields and adds their fields to
- // the most recent top level type.
- std::map<const NamedType*, const ProcessedCompoundType> processedTypesInPackage;
- for (const auto& namedType : namedTypesInPackage) {
- if (namedType->isCompoundType()) {
- ProcessedCompoundType processed;
- AidlHelper::processCompoundType(static_cast<const CompoundType&>(*namedType),
- &processed, std::string());
- processedTypesInPackage.insert(
- std::pair<const NamedType*, const ProcessedCompoundType>(namedType, processed));
+ const auto& endNamedTypes = std::remove_if(
+ namedTypesInPackage.begin(), namedTypesInPackage.end(),
+ [&](const NamedType* namedType) -> bool {
+ return getLatestMinorVersionNamedTypeFromList(
+ namedType->fqName(), namedTypesInPackage) != namedType->fqName();
+ });
+ namedTypesInPackage.erase(endNamedTypes, namedTypesInPackage.end());
+
+ for (const NamedType* namedType : namedTypesInPackage) {
+ AidlHelper::emitAidl(*namedType, coordinator);
}
- }
- Formatter buildFile =
- coordinator.getFormatter(fqName, Coordinator::Location::DIRECT, "Android.bp");
- emitBuildFile(buildFile, fqName, targets, !processedTypesInPackage.empty());
- AidlHelper::emitTranslation(coordinator, fqName, namedTypesInPackage, processedTypesInPackage);
-
- // Emit all types and interfaces
- // The interfaces and types are still be further manipulated inside
- // emitAidl. The interfaces are consolidating methods from their typechains
- // and the composite types are being flattened.
- for (const auto& namedType : namedTypesInPackage) {
- AidlHelper::emitAidl(*namedType, coordinator, processedTypesInPackage);
- }
+ for (const FQName& target : targets) {
+ if (target.name() == "types") continue;
- err << "END OF LOG\n";
+ AST* ast = parse(coordinator, target);
+
+ const Interface* iface = ast->getInterface();
+ CHECK(iface);
+
+ AidlHelper::emitAidl(*iface, coordinator);
+ }
+ }
return 0;
}
diff --git a/hidl2aidl/test/1.0/Android.bp b/hidl2aidl/test/1.0/Android.bp
deleted file mode 100644
index a20796c1..00000000
--- a/hidl2aidl/test/1.0/Android.bp
+++ /dev/null
@@ -1,22 +0,0 @@
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
-hidl_interface {
- name: "hidl2aidl.test@1.0",
- root: "hidl2aidl.test",
- srcs: [
- "types.hal",
- "IFoo.hal",
- "IBar.hal",
- ],
- interfaces: [
- "android.hidl.base@1.0",
- ],
- gen_java: true,
-}
diff --git a/hidl2aidl/test/1.0/IBar.hal b/hidl2aidl/test/1.0/IBar.hal
index d87742ac..b58f4d10 100644
--- a/hidl2aidl/test/1.0/IBar.hal
+++ b/hidl2aidl/test/1.0/IBar.hal
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package hidl2aidl.test@1.0;
+package hidl2aidl@1.0;
import IFoo;
@@ -24,4 +24,6 @@ interface IBar extends IFoo {
};
extraMethod(Inner inner);
+
+ fmqMethod(fmq_sync<bool> sync, fmq_unsync<int32_t> unsync) generates (pointer t);
};
diff --git a/hidl2aidl/test/1.0/IFoo.hal b/hidl2aidl/test/1.0/IFoo.hal
index 8f2d4ce5..e484f25d 100644
--- a/hidl2aidl/test/1.0/IFoo.hal
+++ b/hidl2aidl/test/1.0/IFoo.hal
@@ -14,13 +14,11 @@
* limitations under the License.
*/
-package hidl2aidl.test@1.0;
+package hidl2aidl@1.0;
interface IFoo {
- struct BigStruct {
- uint8_t type;
- };
oneway someFoo(int8_t a);
+ retVec(int8_t a) generates (vec<string> b);
someBar(string a, int8_t b) generates (string foo);
// This case fails since string cannot be an out param in aidl.
diff --git a/hidl2aidl/test/1.0/types.hal b/hidl2aidl/test/1.0/types.hal
index d4d75d15..0332b3f3 100644
--- a/hidl2aidl/test/1.0/types.hal
+++ b/hidl2aidl/test/1.0/types.hal
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package hidl2aidl.test@1.0;
+package hidl2aidl@1.0;
struct Outer {
struct Inner {
@@ -24,13 +24,6 @@ struct Outer {
struct OverrideMe {
uint8_t a;
- uint8_t b;
-};
-
-struct NameCollision {
- uint8_t a;
- uint8_t b;
- uint8_t c;
};
struct OnlyIn10 {
diff --git a/hidl2aidl/test/1.1/Android.bp b/hidl2aidl/test/1.1/Android.bp
deleted file mode 100644
index 82869aba..00000000
--- a/hidl2aidl/test/1.1/Android.bp
+++ /dev/null
@@ -1,22 +0,0 @@
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
-hidl_interface {
- name: "hidl2aidl.test@1.1",
- root: "hidl2aidl.test",
- srcs: [
- "types.hal",
- "IFoo.hal",
- ],
- interfaces: [
- "hidl2aidl.test@1.0",
- "android.hidl.base@1.0",
- ],
- gen_java: true,
-}
diff --git a/hidl2aidl/test/1.1/IFoo.hal b/hidl2aidl/test/1.1/IFoo.hal
index c561a8b3..59d9a7c0 100644
--- a/hidl2aidl/test/1.1/IFoo.hal
+++ b/hidl2aidl/test/1.1/IFoo.hal
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package hidl2aidl.test@1.1;
+package hidl2aidl@1.1;
import @1.0::IFoo;
import @1.0::Outer;
@@ -22,7 +22,6 @@ import @1.0::Outer;
interface IFoo extends @1.0::IFoo {
struct BigStruct {
uint8_t type;
- uint8_t value;
};
// Should take precedence over @1.0::someBar
@@ -35,6 +34,12 @@ interface IFoo extends @1.0::IFoo {
useImportedStruct(Outer outer);
/**
+ * @param mem memory
+ */
+ useMemory(memory mem);
+ shouldImportCorrectTypes() generates (vec<OnlyIn11> lst);
+
+ /**
* @return output output
*/
oneOutput() generates (string output);
diff --git a/hidl2aidl/test/1.1/types.hal b/hidl2aidl/test/1.1/types.hal
index 47c2b325..ed9d2db8 100644
--- a/hidl2aidl/test/1.1/types.hal
+++ b/hidl2aidl/test/1.1/types.hal
@@ -14,30 +14,18 @@
* limitations under the License.
*/
-package hidl2aidl.test@1.1;
+package hidl2aidl@1.1;
import @1.0::Value;
-import @1.0::Outer;
-import @1.0::NameCollision;
struct OverrideMe {
string a;
};
-struct NameCollision {
- string b;
- @1.0::NameCollision reference;
-};
-
struct OnlyIn11 {
int32_t str;
};
-struct Outer {
- @1.0::Outer v1_0;
- int32_t a;
-};
-
enum Value : @1.0::Value {
D,
E = 27,
diff --git a/hidl2aidl/test/1.2/Android.bp b/hidl2aidl/test/1.2/Android.bp
deleted file mode 100644
index f94c7e30..00000000
--- a/hidl2aidl/test/1.2/Android.bp
+++ /dev/null
@@ -1,24 +0,0 @@
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
-hidl_interface {
- name: "hidl2aidl.test@1.2",
- root: "hidl2aidl.test",
- srcs: [
- "types.hal",
- "IFoo.hal",
- ],
- interfaces: [
- "hidl2aidl.test@1.0",
- "hidl2aidl.test@1.1",
- "android.hidl.base@1.0",
- "android.hidl.safe_union@1.0",
- ],
- gen_java: true,
-}
diff --git a/hidl2aidl/test/1.2/types.hal b/hidl2aidl/test/1.2/types.hal
deleted file mode 100644
index 4dcf2fc3..00000000
--- a/hidl2aidl/test/1.2/types.hal
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package hidl2aidl.test@1.2;
-
-import @1.1::OnlyIn11;
-import @1.1::NameCollision;
-import @1.1::Value;
-import android.hidl.safe_union@1.0::Monostate;
-
-struct NameCollision {
- @1.1::NameCollision reference;
-
- string c;
- int16_t d;
-};
-
-union UnionFoo {
- int64_t a;
- int8_t b;
- @1.1::OnlyIn11 c;
-};
-
-enum FooFlag : uint32_t {
- NONE = 0x0,
- FIRST = 0x1 << 0,
- SECOND = 0x1 << 1,
- THIRD = 0x1 << 2,
-};
-
-safe_union SafeUnionBar {
- Monostate noInit;
- int8_t a;
- uint64_t b;
- struct InnerStructBar {
- int8_t x;
- int8_t z;
- } innerStructBar;
- @1.1::OnlyIn11 c;
- string d;
- float e;
- double f;
- bitfield<FooFlag> g;
- @1.1::Value h;
- uint16_t i;
-};
-
-struct ArrayFoo {
- int8_t[12] a;
- uint32_t[12] b;
- @1.1::Value[12] c;
- string[2] d;
-};
-
-struct VectorFoo {
- vec<int8_t> a;
- vec<uint32_t> b;
- vec<@1.1::Value> c;
- vec<string> d;
-};
-
diff --git a/hidl2aidl/test/1.3/IFoo.hal b/hidl2aidl/test/1.3/IFoo.hal
deleted file mode 100644
index 5ce6dabe..00000000
--- a/hidl2aidl/test/1.3/IFoo.hal
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package hidl2aidl.test@1.1;
-
-import @1.2::IFoo;
-
-/**
- * The types in this package are not supported in the Java backend of HIDL
- */
-interface IFoo extends @1.2::IFoo {
- ImportedStruct(Outer outer);
-
- /**
- * @param mem memory
- */
- useMemory(memory mem);
- shouldImportCorrectTypes() generates (vec<OnlyIn11> lst);
-
- removedOutput() generates (string status);
-
- fmqMethod(fmq_sync<bool> sync, fmq_unsync<int32_t> unsync) generates (pointer t);
-
- retVec(int8_t a) generates (vec<string> b);
-};
diff --git a/hidl2aidl/test/2.0/IFoo.hal b/hidl2aidl/test/2.0/IFoo.hal
index d1a4ab68..8c2bbad2 100644
--- a/hidl2aidl/test/2.0/IFoo.hal
+++ b/hidl2aidl/test/2.0/IFoo.hal
@@ -14,16 +14,13 @@
* limitations under the License.
*/
-package hidl2aidl.test@2.0;
+package hidl2aidl@2.0;
import @1.0::IFoo;
-import @1.0::Value;
-/* This should go into a package called hidl2aidl.test2 */
+/* This should go into a package called hidl2aidl2 */
interface IFoo {
oneway someFoo(int8_t a);
shouldImportExternalTypes(@1.0::IFoo foo);
-
- useImportedEnum(Value value);
};
diff --git a/hidl2aidl/test/3.0/Android.bp b/hidl2aidl/test/3.0/Android.bp
deleted file mode 100644
index 9c6fdbd7..00000000
--- a/hidl2aidl/test/3.0/Android.bp
+++ /dev/null
@@ -1,20 +0,0 @@
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
-hidl_interface {
- name: "hidl2aidl.test@3.0",
- root: "hidl2aidl.test",
- srcs: [
- "IFoo.hal",
- ],
- interfaces: [
- "android.hidl.base@1.0",
- ],
- gen_java: true,
-}
diff --git a/hidl2aidl/test/3.0/IFoo.hal b/hidl2aidl/test/3.0/IFoo.hal
deleted file mode 100644
index 76128c06..00000000
--- a/hidl2aidl/test/3.0/IFoo.hal
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package hidl2aidl.test@3.0;
-
-// minimal file for run_build_file_test.sh
-interface IFoo {
- // minimal type to get translate libraries to generate and build
- struct BuildThis {
- int32_t a;
- };
-};
diff --git a/hidl2aidl/test/Android.bp b/hidl2aidl/test/Android.bp
index e364b4b4..fa923d25 100644
--- a/hidl2aidl/test/Android.bp
+++ b/hidl2aidl/test/Android.bp
@@ -14,131 +14,40 @@
* limitations under the License.
*/
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
-genrule_defaults {
- name: "hidl2aidl_test_gen_defaults",
+genrule {
+ name: "hidl2aidl_test_gen_aidl",
tools: ["hidl2aidl"],
- cmd: "$(location hidl2aidl) -f -o $(genDir)/ " +
- "-rhidl2aidl.test:system/tools/hidl/hidl2aidl/test " +
- "hidl2aidl.test@1.2 && " +
- "$(location hidl2aidl) -f -o $(genDir)/ " +
- "-rhidl2aidl.test:system/tools/hidl/hidl2aidl/test " +
- "hidl2aidl.test.extension@1.2 && " +
- "$(location hidl2aidl) -o $(genDir)/ " +
- "-rhidl2aidl.test:system/tools/hidl/hidl2aidl/test " +
- "hidl2aidl.test@2.0 && " +
- "mv $(genDir)/include/hidl2aidl/test/translate-ndk.h $(genDir)/hidl2aidl/test/ && " +
- "mv $(genDir)/include/hidl2aidl/test/translate-cpp.h $(genDir)/hidl2aidl/test/ &&" +
- "mv $(genDir)/include/hidl2aidl/test/extension/translate-ndk.h $(genDir)/hidl2aidl/test/extension/ && " +
- "mv $(genDir)/include/hidl2aidl/test/extension/translate-cpp.h $(genDir)/hidl2aidl/test/extension/ ",
+ cmd: "$(location hidl2aidl) -o $(genDir)/ " +
+ "-rhidl2aidl:system/tools/hidl/hidl2aidl/test " +
+ "hidl2aidl@1.0 hidl2aidl@2.0",
+ required: ["android.hidl.base@1.0"],
srcs: [
"1.0/IBar.hal",
"1.0/IFoo.hal",
"1.0/types.hal",
"1.1/IFoo.hal",
"1.1/types.hal",
- "1.2/IFoo.hal",
"2.0/IFoo.hal",
- "extension/1.2/IFoo.hal",
- "extension/1.2/types.hal",
- ],
-}
-
-genrule {
- name: "hidl2aidl_test_gen_aidl",
- defaults: ["hidl2aidl_test_gen_defaults"],
- out: [
- "hidl2aidl/test/ArrayFoo.aidl",
- "hidl2aidl/test/VectorFoo.aidl",
- "hidl2aidl/test/FooFlag.aidl",
- "hidl2aidl/test/IBar.aidl",
- "hidl2aidl/test/IBarInner.aidl",
- "hidl2aidl/test/IFoo.aidl",
- "hidl2aidl/test/IFooBigStruct.aidl",
- "hidl2aidl/test/NameCollision.aidl",
- "hidl2aidl/test/OnlyIn10.aidl",
- "hidl2aidl/test/OnlyIn11.aidl",
- "hidl2aidl/test/Outer.aidl",
- "hidl2aidl/test/OuterInner.aidl",
- "hidl2aidl/test/OverrideMe.aidl",
- "hidl2aidl/test/SafeUnionBar.aidl",
- "hidl2aidl/test/SafeUnionBarInnerStructBar.aidl",
- "hidl2aidl/test/UnionFoo.aidl",
- "hidl2aidl/test/Value.aidl",
- "hidl2aidl/test2/IFoo.aidl",
- "hidl2aidl/test/extension/IFoo.aidl",
- "hidl2aidl/test/extension/FooFlag.aidl",
- "hidl2aidl/test/extension/ArrayFoo.aidl",
- ],
-}
-
-genrule {
- name: "hidl2aidl_translate_ndk_test_gen_src",
- defaults: ["hidl2aidl_test_gen_defaults"],
- out: [
- "hidl2aidl/test/translate-ndk.cpp",
- "hidl2aidl/test/extension/translate-ndk.cpp",
- ],
-}
-
-genrule {
- name: "hidl2aidl_translate_ndk_test_gen_headers",
- defaults: ["hidl2aidl_test_gen_defaults"],
- out: [
- "hidl2aidl/test/translate-ndk.h",
- "hidl2aidl/test/extension/translate-ndk.h",
],
-}
-
-genrule {
- name: "hidl2aidl_translate_cpp_test_gen_src",
- defaults: ["hidl2aidl_test_gen_defaults"],
out: [
- "hidl2aidl/test/translate-cpp.cpp",
- "hidl2aidl/test/extension/translate-cpp.cpp",
- ],
-}
-
-genrule {
- name: "hidl2aidl_translate_cpp_test_gen_headers",
- defaults: ["hidl2aidl_test_gen_defaults"],
- out: [
- "hidl2aidl/test/translate-cpp.h",
- "hidl2aidl/test/extension/translate-cpp.h",
- ],
-}
-
-genrule {
- name: "hidl2aidl_translate_java_test_gen_src",
- defaults: ["hidl2aidl_test_gen_defaults"],
- out: [
- "hidl2aidl/test/Translate.java",
- "hidl2aidl/test/extension/Translate.java",
+ "hidl2aidl/IBar.aidl",
+ "hidl2aidl/IBarInner.aidl",
+ "hidl2aidl/IFoo.aidl",
+ "hidl2aidl/IFooBigStruct.aidl",
+ "hidl2aidl/OnlyIn10.aidl",
+ "hidl2aidl/OnlyIn11.aidl",
+ "hidl2aidl/Outer.aidl",
+ "hidl2aidl/OuterInner.aidl",
+ "hidl2aidl/OverrideMe.aidl",
+ "hidl2aidl/Value.aidl",
+ "hidl2aidl2/IFoo.aidl",
],
}
aidl_interface {
name: "hidl2aidl_test_gen",
- owner: "test",
- stability: "vintf",
+ unstable: true,
srcs: [":hidl2aidl_test_gen_aidl"],
- backend: {
- java: {
- sdk_version: "module_current",
- },
- },
- flags: [
- "-Werror",
- "-Wno-mixed-oneway",
- ],
}
cc_test_library {
@@ -148,8 +57,8 @@ cc_test_library {
"ndk_test_compile.cpp",
],
shared_libs: [
- "hidl2aidl_test_gen-V1-cpp",
- "hidl2aidl_test_gen-V1-ndk_platform",
+ "hidl2aidl_test_gen-cpp",
+ "hidl2aidl_test_gen-ndk_platform",
"libbinder",
"libbinder_ndk",
"libutils",
@@ -157,115 +66,10 @@ cc_test_library {
gtest: false,
}
-cc_test {
- name: "hidl2aidl_translate_ndk_test",
- test_suites: ["general-tests"],
-
- cflags: [
- "-Wall",
- "-Wextra",
- "-Werror",
- "-g",
- ],
- srcs: [
- ":hidl2aidl_translate_ndk_test_gen_src",
- "translate_ndk_test.cpp",
- ],
- generated_headers: [
- "hidl2aidl_translate_ndk_test_gen_headers",
- ],
- shared_libs: [
- "libbinder_ndk",
- "libhidlbase",
- "liblog",
- ],
- static_libs: [
- "hidl2aidl_test_gen-V1-ndk_platform",
- "hidl2aidl.test@1.0",
- "hidl2aidl.test@1.1",
- "hidl2aidl.test@1.2",
- "hidl2aidl.test.extension@1.2",
- ],
- host_required: [
- "hidl2aidl",
- ],
-}
-
-cc_test {
- name: "hidl2aidl_translate_cpp_test",
- test_suites: ["general-tests"],
-
- cflags: [
- "-Wall",
- "-Wextra",
- "-Werror",
- "-g",
- "-DHIDL2AIDLTESTING",
- ],
- srcs: [
- ":hidl2aidl_translate_cpp_test_gen_src",
- "translate_cpp_test.cpp",
- ],
- generated_headers: [
- "hidl2aidl_translate_cpp_test_gen_headers",
- ],
- shared_libs: [
- "libbinder",
- "libhidlbase",
- "libutils",
- "liblog",
- ],
- static_libs: [
- "hidl2aidl_test_gen-V1-cpp",
- "hidl2aidl.test@1.0",
- "hidl2aidl.test@1.1",
- "hidl2aidl.test@1.2",
- "hidl2aidl.test.extension@1.2",
- ],
- host_required: [
- "hidl2aidl",
- ],
-}
-
-android_test {
- name: "hidl2aidl_translate_java_test",
- platform_apis: true,
- // Turn off Java optimization tools to speed up our test iterations.
- optimize: {
- enabled: false,
- },
- dex_preopt: {
- enabled: false,
- },
- srcs: [
- ":hidl2aidl_translate_java_test_gen_src",
- "TranslateJavaTest.java",
- ],
- static_libs: [
- "androidx.test.core",
- "androidx.test.runner",
- "hidl2aidl_test_gen-V1-java",
- "hidl2aidl.test-V1.0-java",
- "hidl2aidl.test-V1.1-java",
- "hidl2aidl.test-V1.2-java",
- "hidl2aidl.test.extension-V1.2-java",
- ],
- host_required: [
- "hidl2aidl",
- ],
- test_suites: ["general-tests"],
-}
-
phony {
name: "hidl2aidl_test",
required: [
"hidl2aidl_test_comp_cc",
- "hidl2aidl_test_gen-V1-java",
- "hidl2aidl_translate_ndk_test",
- "hidl2aidl_translate_cpp_test",
+ "hidl2aidl_test_gen",
],
}
-
-hidl_package_root {
- name: "hidl2aidl.test",
-}
diff --git a/hidl2aidl/test/AndroidManifest.xml b/hidl2aidl/test/AndroidManifest.xml
deleted file mode 100644
index eb0122ff..00000000
--- a/hidl2aidl/test/AndroidManifest.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2020 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="hidl2aidl.tests">
-
- <application>
- <uses-library android:name="android.test.runner" />
- </application>
-
- <instrumentation
- android:name="androidx.test.runner.AndroidJUnitRunner"
- android:targetPackage="hidl2aidl.tests"
- android:label="Hidl2aidl Tests" />
-</manifest>
diff --git a/hidl2aidl/test/TranslateJavaTest.java b/hidl2aidl/test/TranslateJavaTest.java
deleted file mode 100644
index 32fcc851..00000000
--- a/hidl2aidl/test/TranslateJavaTest.java
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * Copyright (C) 2020, The Android Open Source Project
- *
- * Licensed under the Apache License, is(Version 2.0 (the "License"));
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package hidl2aidl.tests;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
-
-import hidl2aidl.test.Translate;
-import org.junit.Test;
-import org.junit.runners.JUnit4;
-
-public class TranslateJavaTest {
- @Test
- public void OnlyIn10() {
- hidl2aidl.test.OnlyIn10 dest;
- hidl2aidl.test.V1_0.OnlyIn10 source = new hidl2aidl.test.V1_0.OnlyIn10();
- source.str = "Hello";
- dest = Translate.h2aTranslate(source);
- assertThat(source.str, is(dest.str));
- }
-
- @Test
- public void OnlyIn11() {
- hidl2aidl.test.OnlyIn11 dest;
- hidl2aidl.test.V1_1.OnlyIn11 source = new hidl2aidl.test.V1_1.OnlyIn11();
- source.str = 12;
- dest = Translate.h2aTranslate(source);
- assertThat(source.str, is(dest.str));
- }
-
- @Test
- public void OverrideMe() {
- hidl2aidl.test.OverrideMe dest;
- hidl2aidl.test.V1_1.OverrideMe source = new hidl2aidl.test.V1_1.OverrideMe();
- source.a = "World";
- dest = Translate.h2aTranslate(source);
- assertThat(source.a, is(dest.a));
- }
-
- @Test
- public void Outer() {
- hidl2aidl.test.Outer dest;
- hidl2aidl.test.V1_1.Outer source = new hidl2aidl.test.V1_1.Outer();
- source.a = 12;
- source.v1_0.inner.a = 16;
- dest = Translate.h2aTranslate(source);
- assertThat(source.v1_0.inner.a, is(dest.inner.a));
- }
-
- @Test
- public void OuterInner() {
- hidl2aidl.test.OuterInner dest;
- hidl2aidl.test.V1_0.Outer.Inner source = new hidl2aidl.test.V1_0.Outer.Inner();
- source.a = 12;
- dest = Translate.h2aTranslate(source);
- assertThat(source.a, is(dest.a));
- }
-
- @Test
- public void NameCollision() {
- hidl2aidl.test.NameCollision dest;
- hidl2aidl.test.V1_2.NameCollision source = new hidl2aidl.test.V1_2.NameCollision();
- source.reference.reference.a = 12;
- source.reference.b = "Fancy";
- source.c = "Car";
- dest = Translate.h2aTranslate(source);
- assertThat(source.reference.reference.a, is(dest.a));
- assertThat(source.reference.b, is(dest.b));
- assertThat(source.c, is(dest.c));
- }
-
- @Test
- public void IFooBigStruct() {
- hidl2aidl.test.IFooBigStruct dest;
- hidl2aidl.test.V1_1.IFoo.BigStruct source = new hidl2aidl.test.V1_1.IFoo.BigStruct();
- source.type = 12;
- source.value = 16;
- dest = Translate.h2aTranslate(source);
- assertThat(source.type, is(dest.type));
- assertThat(source.value, is(dest.value));
- }
-
- @Test
- public void IBarInner() {
- hidl2aidl.test.IBarInner dest;
- hidl2aidl.test.V1_0.IBar.Inner source = new hidl2aidl.test.V1_0.IBar.Inner();
- source.a = 0x70000000;
- dest = Translate.h2aTranslate(source);
- assertThat(source.a, is(dest.a));
- }
-
- @Test
- public void UnsignedToSignedTooLarge() {
- hidl2aidl.test.IBarInner dest;
- hidl2aidl.test.V1_0.IBar.Inner source = new hidl2aidl.test.V1_0.IBar.Inner();
- // source.a is uint32_t, dest.a is int32_t
- source.a = -1;
- try {
- dest = Translate.h2aTranslate(source);
- fail("Expected an exception to be thrown for out of bounds unsigned to signed translation");
- } catch (RuntimeException e) {
- String message = e.getMessage();
- assertThat("Unsafe conversion between signed and unsigned scalars for field: in.a",
- is(message));
- }
- }
-
- @Test
- public void SafeUnionBarByte() {
- hidl2aidl.test.SafeUnionBar dest;
- hidl2aidl.test.V1_2.SafeUnionBar source = new hidl2aidl.test.V1_2.SafeUnionBar();
- source.a((byte) 8);
- assertThat(hidl2aidl.test.V1_2.SafeUnionBar.hidl_discriminator.a,
- is(source.getDiscriminator()));
- dest = Translate.h2aTranslate(source);
- assertThat(source.a(), is(dest.getA()));
- }
-
- @Test
- public void SafeUnionBarInt64() {
- hidl2aidl.test.SafeUnionBar dest;
- hidl2aidl.test.V1_2.SafeUnionBar source = new hidl2aidl.test.V1_2.SafeUnionBar();
- source.b(25000);
- dest = Translate.h2aTranslate(source);
- assertThat(source.b(), is(dest.getB()));
- }
-
- @Test
- public void SafeUnionBarInnerStructBar() {
- hidl2aidl.test.SafeUnionBar dest;
- hidl2aidl.test.V1_2.SafeUnionBar source = new hidl2aidl.test.V1_2.SafeUnionBar();
- hidl2aidl.test.V1_2.SafeUnionBar.InnerStructBar inner =
- new hidl2aidl.test.V1_2.SafeUnionBar.InnerStructBar();
- inner.x = 8;
- inner.z = 12;
- source.innerStructBar(inner);
- dest = Translate.h2aTranslate(source);
- assertThat(source.innerStructBar().x, is(dest.getInnerStructBar().x));
- assertThat(source.innerStructBar().z, is(dest.getInnerStructBar().z));
- }
-
- @Test
- public void SafeUnionBarOnlyIn11() {
- hidl2aidl.test.SafeUnionBar dest;
- hidl2aidl.test.V1_2.SafeUnionBar source = new hidl2aidl.test.V1_2.SafeUnionBar();
- hidl2aidl.test.V1_1.OnlyIn11 onlyIn11 = new hidl2aidl.test.V1_1.OnlyIn11();
- onlyIn11.str = 12;
- source.c(onlyIn11);
- dest = Translate.h2aTranslate(source);
- assertThat(source.c().str, is(dest.getC().str));
- }
-
- @Test
- public void SafeUnionBarString() {
- hidl2aidl.test.SafeUnionBar dest;
- hidl2aidl.test.V1_2.SafeUnionBar source = new hidl2aidl.test.V1_2.SafeUnionBar();
- source.d("Hello world!");
- dest = Translate.h2aTranslate(source);
- assertThat(source.d(), is(dest.getD()));
- }
-
- @Test
- public void SafeUnionBarFloat() {
- hidl2aidl.test.SafeUnionBar dest;
- hidl2aidl.test.V1_2.SafeUnionBar source = new hidl2aidl.test.V1_2.SafeUnionBar();
- source.e(3.5f);
- dest = Translate.h2aTranslate(source);
- assertThat(source.e(), is(dest.getE()));
- }
-
- @Test
- public void SafeUnionBarDouble() {
- hidl2aidl.test.SafeUnionBar dest;
- hidl2aidl.test.V1_2.SafeUnionBar source = new hidl2aidl.test.V1_2.SafeUnionBar();
- source.f(3e10);
- dest = Translate.h2aTranslate(source);
- assertThat(source.f(), is(dest.getF()));
- }
-
- @Test
- public void SafeUnionBarBitfield() {
- hidl2aidl.test.SafeUnionBar dest;
- hidl2aidl.test.V1_2.SafeUnionBar source = new hidl2aidl.test.V1_2.SafeUnionBar();
- source.g(hidl2aidl.test.V1_2.FooFlag.THIRD);
- dest = Translate.h2aTranslate(source);
- assertThat(source.g(), is(dest.getG()));
- }
-
- @Test
- public void SafeUnionBarEnum() {
- hidl2aidl.test.SafeUnionBar dest;
- hidl2aidl.test.V1_2.SafeUnionBar source = new hidl2aidl.test.V1_2.SafeUnionBar();
- source.h(hidl2aidl.test.V1_1.Value.B);
- dest = Translate.h2aTranslate(source);
- assertThat(source.h(), is(dest.getH()));
- }
-
- @Test
- public void SafeUnionBarChar() {
- hidl2aidl.test.SafeUnionBar dest;
- hidl2aidl.test.V1_2.SafeUnionBar source = new hidl2aidl.test.V1_2.SafeUnionBar();
- source.i((short) 12);
- dest = Translate.h2aTranslate(source);
- assertThat(source.i(), is((short) dest.getI()));
- }
-
- @Test
- public void SafeUnionBarNegativeChar() {
- hidl2aidl.test.SafeUnionBar dest;
- hidl2aidl.test.V1_2.SafeUnionBar source = new hidl2aidl.test.V1_2.SafeUnionBar();
- source.i((short) -1);
- try {
- dest = Translate.h2aTranslate(source);
- fail("Expected an exception to be thrown for out of bounds signed to unsigned translation");
- } catch (RuntimeException e) {
- String message = e.getMessage();
- assertThat("Unsafe conversion between signed and unsigned scalars for field: in.i()",
- is(message));
- }
- }
-
- @Test
- public void ArrayFoo() {
- hidl2aidl.test.ArrayFoo dest;
- hidl2aidl.test.V1_2.ArrayFoo source = new hidl2aidl.test.V1_2.ArrayFoo();
- source.a[0] = 42;
- source.a[0] = 42;
- dest = Translate.h2aTranslate(source);
- assertThat(source.a[0], is(dest.a[0]));
- }
-
- @Test
- public void ArrayFooEmpty() {
- hidl2aidl.test.ArrayFoo dest;
- hidl2aidl.test.V1_2.ArrayFoo source = new hidl2aidl.test.V1_2.ArrayFoo();
- dest = Translate.h2aTranslate(source);
- assertThat(source.a.length, is(dest.a.length));
- }
-
- @Test
- public void ArrayFooEnum() {
- hidl2aidl.test.ArrayFoo dest;
- hidl2aidl.test.V1_2.ArrayFoo source = new hidl2aidl.test.V1_2.ArrayFoo();
- source.c[0] = hidl2aidl.test.Value.A;
- source.c[1] = hidl2aidl.test.Value.B;
- dest = Translate.h2aTranslate(source);
- assertThat(source.c[0], is(dest.c[0]));
- assertThat(source.c[1], is(dest.c[1]));
- }
-
- @Test
- public void ArrayFooString() {
- hidl2aidl.test.ArrayFoo dest;
- hidl2aidl.test.V1_2.ArrayFoo source = new hidl2aidl.test.V1_2.ArrayFoo();
- source.d[0] = "hello";
- source.d[1] = "world";
- dest = Translate.h2aTranslate(source);
- assertThat(source.d[0], is(dest.d[0]));
- assertThat(source.d[1], is(dest.d[1]));
- }
-
- @Test
- public void VectorFoo() {
- hidl2aidl.test.VectorFoo dest;
- hidl2aidl.test.V1_2.VectorFoo source = new hidl2aidl.test.V1_2.VectorFoo();
- source.a.add((byte) 42);
- source.a.add((byte) 8);
- dest = Translate.h2aTranslate(source);
- assertThat(source.a.get(0), is(dest.a[0]));
- assertThat(source.a.get(1), is(dest.a[1]));
- }
-
- @Test
- public void VectorFooEmpty() {
- hidl2aidl.test.VectorFoo dest;
- hidl2aidl.test.V1_2.VectorFoo source = new hidl2aidl.test.V1_2.VectorFoo();
- dest = Translate.h2aTranslate(source);
- assertThat(source.a.size(), is(dest.a.length));
- }
-
- @Test
- public void VectorFooUnsigned() {
- hidl2aidl.test.VectorFoo dest;
- hidl2aidl.test.V1_2.VectorFoo source = new hidl2aidl.test.V1_2.VectorFoo();
- source.b.add(12);
- source.b.add(0xf0000000);
- try {
- dest = Translate.h2aTranslate(source);
- fail("Expected an exception to be thrown for out of bounds unsigned to signed translation");
- } catch (RuntimeException e) {
- String message = e.getMessage();
- assertThat(
- "Unsafe conversion between signed and unsigned scalars for field: in.b.get(i)",
- is(message));
- }
- }
-
- @Test
- public void VectorFooEnum() {
- hidl2aidl.test.VectorFoo dest;
- hidl2aidl.test.V1_2.VectorFoo source = new hidl2aidl.test.V1_2.VectorFoo();
- source.c.add(hidl2aidl.test.Value.A);
- source.c.add(hidl2aidl.test.Value.B);
- dest = Translate.h2aTranslate(source);
- assertThat(source.c.get(0), is(dest.c[0]));
- assertThat(source.c.get(1), is(dest.c[1]));
- }
-
- @Test
- public void VectorFooString() {
- hidl2aidl.test.VectorFoo dest;
- hidl2aidl.test.V1_2.VectorFoo source = new hidl2aidl.test.V1_2.VectorFoo();
- source.d.add("hello");
- source.d.add("world");
- dest = Translate.h2aTranslate(source);
- assertThat(source.d.get(0), is(dest.d[0]));
- assertThat(source.d.get(1), is(dest.d[1]));
- }
-
- @Test
- public void ExtensionArrayFoo() {
- hidl2aidl.test.extension.ArrayFoo dest;
- hidl2aidl.test.extension.V1_2.ArrayFoo source =
- new hidl2aidl.test.extension.V1_2.ArrayFoo();
- source.e[0] = 12;
- source.e[1] = 2;
- dest = hidl2aidl.test.extension.Translate.h2aTranslate(source);
- assertThat(source.e[0], is(dest.e[0]));
- assertThat(source.e[1], is(dest.e[1]));
- }
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/ArrayFoo.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/ArrayFoo.aidl
deleted file mode 100644
index 1dce1a20..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/ArrayFoo.aidl
+++ /dev/null
@@ -1,27 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test;
-@VintfStability
-parcelable ArrayFoo {
- byte[] a;
- int[] b;
- hidl2aidl.test.Value[] c;
- String[] d;
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/FooFlag.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/FooFlag.aidl
deleted file mode 100644
index 46b32b9f..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/FooFlag.aidl
+++ /dev/null
@@ -1,27 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test;
-@Backing(type="int") @VintfStability
-enum FooFlag {
- NONE = 0,
- FIRST = 1,
- SECOND = 2,
- THIRD = 4,
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/IBar.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/IBar.aidl
deleted file mode 100644
index cbd8a371..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/IBar.aidl
+++ /dev/null
@@ -1,26 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test;
-@VintfStability
-interface IBar {
- void extraMethod(in hidl2aidl.test.IBarInner inner);
- String someBar(in String a, in byte b);
- oneway void someFoo(in byte a);
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/IBarInner.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/IBarInner.aidl
deleted file mode 100644
index 78c9d3b2..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/IBarInner.aidl
+++ /dev/null
@@ -1,24 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test;
-@VintfStability
-parcelable IBarInner {
- int a;
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/IFoo.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/IFoo.aidl
deleted file mode 100644
index b990a904..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/IFoo.aidl
+++ /dev/null
@@ -1,34 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test;
-@VintfStability
-interface IFoo {
- void multipleInputs(in String in1, in String in2);
- void multipleInputsAndOutputs(in String in1, in String in2, out hidl2aidl.test.IFooBigStruct out1, out hidl2aidl.test.IFooBigStruct out2);
- void multipleOutputs(out hidl2aidl.test.IFooBigStruct out1, out hidl2aidl.test.IFooBigStruct out2);
- String oneOutput();
- String removedOutput();
- void someBar(in String a, in String b);
- oneway void someFoo(in byte a);
- void useImportedStruct(in hidl2aidl.test.Outer outer);
- hidl2aidl.test.IFooBigStruct useStruct();
- void versionTest_(in String a);
- boolean versionTest_two_(in String a);
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/IFooBigStruct.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/IFooBigStruct.aidl
deleted file mode 100644
index 81a292a6..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/IFooBigStruct.aidl
+++ /dev/null
@@ -1,25 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test;
-@VintfStability
-parcelable IFooBigStruct {
- byte type;
- byte value;
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/NameCollision.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/NameCollision.aidl
deleted file mode 100644
index 32259906..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/NameCollision.aidl
+++ /dev/null
@@ -1,27 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test;
-@VintfStability
-parcelable NameCollision {
- String b;
- byte a;
- String c;
- char d;
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/OnlyIn10.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/OnlyIn10.aidl
deleted file mode 100644
index 0b4b35eb..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/OnlyIn10.aidl
+++ /dev/null
@@ -1,24 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test;
-@VintfStability
-parcelable OnlyIn10 {
- String str;
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/OnlyIn11.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/OnlyIn11.aidl
deleted file mode 100644
index 2efa378a..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/OnlyIn11.aidl
+++ /dev/null
@@ -1,24 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test;
-@VintfStability
-parcelable OnlyIn11 {
- int str;
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/Outer.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/Outer.aidl
deleted file mode 100644
index a3e3eb7e..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/Outer.aidl
+++ /dev/null
@@ -1,25 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test;
-@VintfStability
-parcelable Outer {
- hidl2aidl.test.OuterInner inner;
- int a;
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/OuterInner.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/OuterInner.aidl
deleted file mode 100644
index e23b9dfa..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/OuterInner.aidl
+++ /dev/null
@@ -1,24 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test;
-@VintfStability
-parcelable OuterInner {
- byte a;
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/OverrideMe.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/OverrideMe.aidl
deleted file mode 100644
index 090a2845..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/OverrideMe.aidl
+++ /dev/null
@@ -1,24 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test;
-@VintfStability
-parcelable OverrideMe {
- String a;
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/SafeUnionBar.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/SafeUnionBar.aidl
deleted file mode 100644
index 34b96380..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/SafeUnionBar.aidl
+++ /dev/null
@@ -1,34 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test;
-@VintfStability
-union SafeUnionBar {
- boolean noInit;
- byte a;
- long b;
- hidl2aidl.test.SafeUnionBarInnerStructBar innerStructBar;
- hidl2aidl.test.OnlyIn11 c;
- String d;
- float e;
- double f;
- hidl2aidl.test.FooFlag g;
- hidl2aidl.test.Value h;
- char i;
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/SafeUnionBarInnerStructBar.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/SafeUnionBarInnerStructBar.aidl
deleted file mode 100644
index 3fd291f3..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/SafeUnionBarInnerStructBar.aidl
+++ /dev/null
@@ -1,25 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test;
-@VintfStability
-parcelable SafeUnionBarInnerStructBar {
- byte x;
- byte z;
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/UnionFoo.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/UnionFoo.aidl
deleted file mode 100644
index fdda556b..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/UnionFoo.aidl
+++ /dev/null
@@ -1,26 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test;
-@VintfStability
-union UnionFoo {
- long a;
- byte b;
- hidl2aidl.test.OnlyIn11 c;
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/Value.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/Value.aidl
deleted file mode 100644
index b0f1d4f5..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/Value.aidl
+++ /dev/null
@@ -1,29 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test;
-@Backing(type="int") @VintfStability
-enum Value {
- A = 3,
- B = 7,
- C = 8,
- D = 9,
- E = 27,
- F = 28,
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/VectorFoo.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/VectorFoo.aidl
deleted file mode 100644
index bafe5924..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/VectorFoo.aidl
+++ /dev/null
@@ -1,27 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test;
-@VintfStability
-parcelable VectorFoo {
- byte[] a;
- int[] b;
- hidl2aidl.test.Value[] c;
- String[] d;
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/extension/ArrayFoo.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/extension/ArrayFoo.aidl
deleted file mode 100644
index 4fd7104d..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/extension/ArrayFoo.aidl
+++ /dev/null
@@ -1,25 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test.extension;
-@VintfStability
-parcelable ArrayFoo {
- hidl2aidl.test.ArrayFoo base;
- byte[] e;
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/extension/FooFlag.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/extension/FooFlag.aidl
deleted file mode 100644
index 5ba6ddea..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/extension/FooFlag.aidl
+++ /dev/null
@@ -1,24 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test.extension;
-@Backing(type="int") @VintfStability
-enum FooFlag {
- FOURTH = 8,
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/extension/IFoo.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/extension/IFoo.aidl
deleted file mode 100644
index 2b525ba5..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test/extension/IFoo.aidl
+++ /dev/null
@@ -1,24 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test.extension;
-@VintfStability
-interface IFoo {
- int doCoolThings();
-}
diff --git a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test2/IFoo.aidl b/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test2/IFoo.aidl
deleted file mode 100644
index 7c3fffe7..00000000
--- a/hidl2aidl/test/aidl_api/hidl2aidl_test_gen/current/hidl2aidl/test2/IFoo.aidl
+++ /dev/null
@@ -1,26 +0,0 @@
-// FIXME: license file, or use the -l option to generate the files with the header.
-///////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
-///////////////////////////////////////////////////////////////////////////////
-
-// This file is a snapshot of an AIDL file. Do not edit it manually. There are
-// two cases:
-// 1). this is a frozen version file - do not edit this in any case.
-// 2). this is a 'current' file. If you make a backwards compatible change to
-// the interface (from the latest frozen version), the build system will
-// prompt you to update this file with `m <name>-update-api`.
-//
-// You must not make a backward incompatible change to any AIDL file built
-// with the aidl_interface module type with versions property set. The module
-// type is used to build AIDL files in a way that they can be used across
-// independently updatable components of the system. If a device is shipped
-// with such a backward incompatible change, it has a high risk of breaking
-// later when a module using the interface is updated, e.g., Mainline modules.
-
-package hidl2aidl.test2;
-@VintfStability
-interface IFoo {
- void shouldImportExternalTypes(in hidl2aidl.test.IFoo foo);
- oneway void someFoo(in byte a);
- void useImportedEnum(in hidl2aidl.test.Value value);
-}
diff --git a/hidl2aidl/test/cpp_test_compile.cpp b/hidl2aidl/test/cpp_test_compile.cpp
index 56ad7ce0..98048bb6 100644
--- a/hidl2aidl/test/cpp_test_compile.cpp
+++ b/hidl2aidl/test/cpp_test_compile.cpp
@@ -17,68 +17,54 @@
// This is a compilation test only, to see that types are generated as
// expected.
-#include <hidl2aidl/test/BnBar.h>
-#include <hidl2aidl/test/BnFoo.h>
-#include <hidl2aidl/test/BpBar.h>
-#include <hidl2aidl/test/BpFoo.h>
-#include <hidl2aidl/test/IBar.h>
-#include <hidl2aidl/test/IBarInner.h>
-#include <hidl2aidl/test/IFoo.h>
-#include <hidl2aidl/test/IFooBigStruct.h>
-#include <hidl2aidl/test/NameCollision.h>
-#include <hidl2aidl/test/OnlyIn10.h>
-#include <hidl2aidl/test/OnlyIn11.h>
-#include <hidl2aidl/test/Outer.h>
-#include <hidl2aidl/test/OuterInner.h>
-#include <hidl2aidl/test/OverrideMe.h>
-#include <hidl2aidl/test/Value.h>
-#include <hidl2aidl/test2/BnFoo.h>
-#include <hidl2aidl/test2/BpFoo.h>
-#include <hidl2aidl/test2/IFoo.h>
+#include <hidl2aidl/BnBar.h>
+#include <hidl2aidl/BnFoo.h>
+#include <hidl2aidl/BpBar.h>
+#include <hidl2aidl/BpFoo.h>
+#include <hidl2aidl/IBar.h>
+#include <hidl2aidl/IBarInner.h>
+#include <hidl2aidl/IFoo.h>
+#include <hidl2aidl/IFooBigStruct.h>
+#include <hidl2aidl/OnlyIn10.h>
+#include <hidl2aidl/OnlyIn11.h>
+#include <hidl2aidl/Outer.h>
+#include <hidl2aidl/OuterInner.h>
+#include <hidl2aidl/OverrideMe.h>
+#include <hidl2aidl/Value.h>
+#include <hidl2aidl2/BnFoo.h>
+#include <hidl2aidl2/BpFoo.h>
+#include <hidl2aidl2/IFoo.h>
using android::sp;
using android::String16;
using android::binder::Status;
-void testIFoo(const sp<hidl2aidl::test::IFoo>& foo) {
- Status status1 = foo->someBar(String16(), String16());
+void testIFoo(const sp<hidl2aidl::IFoo>& foo) {
+ Status status1 = foo->someBar(String16());
(void)status1;
String16 f;
Status status2 = foo->oneOutput(&f);
(void)status2;
- hidl2aidl::test::IFooBigStruct big_struct;
- big_struct.type = 2;
- big_struct.value = 3;
- // Test some of the types here as well
- hidl2aidl::test::Outer outer;
- outer.inner.a = 1;
- outer.a = 2;
- hidl2aidl::test::OverrideMe override;
- override.a = String16();
- hidl2aidl::test::NameCollision collision;
- collision.a = 1;
- collision.b = String16();
- collision.c = String16();
}
-void testIBar(const sp<hidl2aidl::test::IBar>& bar) {
+void testIBar(const sp<hidl2aidl::IBar>& bar) {
String16 out;
Status status1 = bar->someBar(String16(), 3, &out);
(void)status1;
- hidl2aidl::test::IBarInner inner;
+ hidl2aidl::IBarInner inner;
inner.a = 3;
Status status2 = bar->extraMethod(inner);
(void)status2;
}
-static_assert(static_cast<int>(hidl2aidl::test::Value::A) == 3);
-static_assert(static_cast<int>(hidl2aidl::test::Value::B) == 7);
-static_assert(static_cast<int>(hidl2aidl::test::Value::C) == 8);
-static_assert(static_cast<int>(hidl2aidl::test::Value::D) == 9);
-static_assert(static_cast<int>(hidl2aidl::test::Value::E) == 27);
-static_assert(static_cast<int>(hidl2aidl::test::Value::F) == 28);
+static_assert(static_cast<int>(hidl2aidl::Value::A) == 3);
+static_assert(static_cast<int>(hidl2aidl::Value::B) == 7);
+static_assert(static_cast<int>(hidl2aidl::Value::C) == 8);
+static_assert(static_cast<int>(hidl2aidl::Value::D) == 9);
+static_assert(static_cast<int>(hidl2aidl::Value::E) == 27);
+static_assert(static_cast<int>(hidl2aidl::Value::F) == 28);
-void testIFoo2(const sp<hidl2aidl::test2::IFoo>& foo) {
+void testIFoo2(const sp<hidl2aidl2::IFoo>& foo) {
Status status = foo->someFoo(3);
(void)status;
}
diff --git a/hidl2aidl/test/extension/1.2/Android.bp b/hidl2aidl/test/extension/1.2/Android.bp
deleted file mode 100644
index 31241324..00000000
--- a/hidl2aidl/test/extension/1.2/Android.bp
+++ /dev/null
@@ -1,28 +0,0 @@
-// This file is autogenerated by hidl-gen -Landroidbp.
-
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
-hidl_interface {
- name: "hidl2aidl.test.extension@1.2",
- root: "hidl2aidl.test",
- system_ext_specific: true,
- srcs: [
- "types.hal",
- "IFoo.hal",
- ],
- interfaces: [
- "android.hidl.base@1.0",
- "android.hidl.safe_union@1.0",
- "hidl2aidl.test@1.0",
- "hidl2aidl.test@1.1",
- "hidl2aidl.test@1.2",
- ],
- gen_java: true,
-}
diff --git a/hidl2aidl/test/extension/1.2/IFoo.hal b/hidl2aidl/test/extension/1.2/IFoo.hal
deleted file mode 100644
index ee5bc733..00000000
--- a/hidl2aidl/test/extension/1.2/IFoo.hal
+++ /dev/null
@@ -1,7 +0,0 @@
-package hidl2aidl.test.extension@1.2;
-
-import hidl2aidl.test@1.2::IFoo;
-
-interface IFoo extends hidl2aidl.test@1.2::IFoo {
- doCoolThings() generates (int32_t status);
-};
diff --git a/hidl2aidl/test/extension/1.2/types.hal b/hidl2aidl/test/extension/1.2/types.hal
deleted file mode 100644
index 22cf7602..00000000
--- a/hidl2aidl/test/extension/1.2/types.hal
+++ /dev/null
@@ -1,13 +0,0 @@
-package hidl2aidl.test.extension@1.2;
-
-import hidl2aidl.test@1.2::FooFlag;
-import hidl2aidl.test@1.2::ArrayFoo;
-
-enum FooFlag : hidl2aidl.test@1.2::FooFlag {
- FOURTH = 0x1 << 3,
-};
-
-struct ArrayFoo {
- hidl2aidl.test@1.2::ArrayFoo base;
- int8_t[12] e;
-};
diff --git a/hidl2aidl/test/ndk_test_compile.cpp b/hidl2aidl/test/ndk_test_compile.cpp
index 5b427c5c..5ddbcbb7 100644
--- a/hidl2aidl/test/ndk_test_compile.cpp
+++ b/hidl2aidl/test/ndk_test_compile.cpp
@@ -17,50 +17,50 @@
// This is a compilation test only, to see that types are generated as
// expected.
-#include <aidl/hidl2aidl/test/BnBar.h>
-#include <aidl/hidl2aidl/test/BnFoo.h>
-#include <aidl/hidl2aidl/test/BpBar.h>
-#include <aidl/hidl2aidl/test/BpFoo.h>
-#include <aidl/hidl2aidl/test/IBar.h>
-#include <aidl/hidl2aidl/test/IBarInner.h>
-#include <aidl/hidl2aidl/test/IFoo.h>
-#include <aidl/hidl2aidl/test/IFooBigStruct.h>
-#include <aidl/hidl2aidl/test/OnlyIn10.h>
-#include <aidl/hidl2aidl/test/OnlyIn11.h>
-#include <aidl/hidl2aidl/test/Outer.h>
-#include <aidl/hidl2aidl/test/OuterInner.h>
-#include <aidl/hidl2aidl/test/OverrideMe.h>
-#include <aidl/hidl2aidl/test/Value.h>
-#include <aidl/hidl2aidl/test2/BnFoo.h>
-#include <aidl/hidl2aidl/test2/BpFoo.h>
-#include <aidl/hidl2aidl/test2/IFoo.h>
+#include <aidl/hidl2aidl/BnBar.h>
+#include <aidl/hidl2aidl/BnFoo.h>
+#include <aidl/hidl2aidl/BpBar.h>
+#include <aidl/hidl2aidl/BpFoo.h>
+#include <aidl/hidl2aidl/IBar.h>
+#include <aidl/hidl2aidl/IBarInner.h>
+#include <aidl/hidl2aidl/IFoo.h>
+#include <aidl/hidl2aidl/IFooBigStruct.h>
+#include <aidl/hidl2aidl/OnlyIn10.h>
+#include <aidl/hidl2aidl/OnlyIn11.h>
+#include <aidl/hidl2aidl/Outer.h>
+#include <aidl/hidl2aidl/OuterInner.h>
+#include <aidl/hidl2aidl/OverrideMe.h>
+#include <aidl/hidl2aidl/Value.h>
+#include <aidl/hidl2aidl2/BnFoo.h>
+#include <aidl/hidl2aidl2/BpFoo.h>
+#include <aidl/hidl2aidl2/IFoo.h>
-void testIFoo(const std::shared_ptr<aidl::hidl2aidl::test::IFoo>& foo) {
- ndk::ScopedAStatus status1 = foo->someBar(std::string(), std::string());
+void testIFoo(const std::shared_ptr<aidl::hidl2aidl::IFoo>& foo) {
+ ndk::ScopedAStatus status1 = foo->someBar(std::string());
(void)status1;
std::string f;
ndk::ScopedAStatus status2 = foo->oneOutput(&f);
(void)status2;
}
-void testIBar(const std::shared_ptr<aidl::hidl2aidl::test::IBar>& bar) {
+void testIBar(const std::shared_ptr<aidl::hidl2aidl::IBar>& bar) {
std::string out;
ndk::ScopedAStatus status1 = bar->someBar(std::string(), 3, &out);
(void)status1;
- aidl::hidl2aidl::test::IBarInner inner;
+ aidl::hidl2aidl::IBarInner inner;
inner.a = 3;
ndk::ScopedAStatus status2 = bar->extraMethod(inner);
(void)status2;
}
-static_assert(static_cast<int>(aidl::hidl2aidl::test::Value::A) == 3);
-static_assert(static_cast<int>(aidl::hidl2aidl::test::Value::B) == 7);
-static_assert(static_cast<int>(aidl::hidl2aidl::test::Value::C) == 8);
-static_assert(static_cast<int>(aidl::hidl2aidl::test::Value::D) == 9);
-static_assert(static_cast<int>(aidl::hidl2aidl::test::Value::E) == 27);
-static_assert(static_cast<int>(aidl::hidl2aidl::test::Value::F) == 28);
+static_assert(static_cast<int>(aidl::hidl2aidl::Value::A) == 3);
+static_assert(static_cast<int>(aidl::hidl2aidl::Value::B) == 7);
+static_assert(static_cast<int>(aidl::hidl2aidl::Value::C) == 8);
+static_assert(static_cast<int>(aidl::hidl2aidl::Value::D) == 9);
+static_assert(static_cast<int>(aidl::hidl2aidl::Value::E) == 27);
+static_assert(static_cast<int>(aidl::hidl2aidl::Value::F) == 28);
-void testIFoo2(const std::shared_ptr<aidl::hidl2aidl::test2::IFoo>& foo) {
+void testIFoo2(const std::shared_ptr<aidl::hidl2aidl2::IFoo>& foo) {
ndk::ScopedAStatus status = foo->someFoo(3);
(void)status;
}
diff --git a/hidl2aidl/test/run_build_file_test.sh b/hidl2aidl/test/run_build_file_test.sh
deleted file mode 100755
index 306da53e..00000000
--- a/hidl2aidl/test/run_build_file_test.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/bash
-
-if [[ -z $ANDROID_BUILD_TOP ]]; then
- echo "ANDROID_BUILD_TOP not defined, lunch?"
- exit 1
-fi
-
-set -ex
-
-$ANDROID_BUILD_TOP/build/soong/soong_ui.bash --make-mode hidl2aidl
-
-hidl2aidl -o $ANDROID_BUILD_TOP/system/tools/hidl/hidl2aidl/test/build_test_delete_me \
- -rhidl2aidl.test:system/tools/hidl/hidl2aidl/test hidl2aidl.test@3.0
-
-$ANDROID_BUILD_TOP/build/soong/soong_ui.bash --make-mode hidl2aidl.test3-update-api
-
-$ANDROID_BUILD_TOP/build/soong/soong_ui.bash --make-mode \
- MODULES-IN-system-tools-hidl-hidl2aidl
diff --git a/hidl2aidl/test/translate_cpp_test.cpp b/hidl2aidl/test/translate_cpp_test.cpp
deleted file mode 100644
index 40f1cda3..00000000
--- a/hidl2aidl/test/translate_cpp_test.cpp
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <hidl2aidl/test/extension/translate-cpp.h>
-#include <hidl2aidl/test/translate-cpp.h>
-
-#include <gtest/gtest.h>
-
-class Hidl2aidlTranslateTest : public ::testing::Test {};
-
-namespace android {
-
-TEST_F(Hidl2aidlTranslateTest, OnlyIn10) {
- hidl2aidl::test::OnlyIn10 dest;
- hidl2aidl::test::V1_0::OnlyIn10 source;
- source.str = "Hello";
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.str, String8(dest.str).c_str());
-}
-
-TEST_F(Hidl2aidlTranslateTest, OnlyIn11) {
- hidl2aidl::test::OnlyIn11 dest;
- hidl2aidl::test::V1_1::OnlyIn11 source;
- source.str = 12;
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.str, dest.str);
-}
-
-TEST_F(Hidl2aidlTranslateTest, OverrideMe) {
- hidl2aidl::test::OverrideMe dest;
- hidl2aidl::test::V1_1::OverrideMe source;
- source.a = "World";
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.a, String8(dest.a).c_str());
-}
-
-TEST_F(Hidl2aidlTranslateTest, Outer) {
- hidl2aidl::test::Outer dest;
- hidl2aidl::test::V1_1::Outer source;
- source.a = 12;
- source.v1_0.inner.a = 16;
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.a, dest.a);
- EXPECT_EQ(source.v1_0.inner.a, dest.inner.a);
-}
-
-TEST_F(Hidl2aidlTranslateTest, OuterInner) {
- hidl2aidl::test::OuterInner dest;
- hidl2aidl::test::V1_0::Outer::Inner source;
- source.a = 12;
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.a, dest.a);
-}
-
-TEST_F(Hidl2aidlTranslateTest, NameCollision) {
- hidl2aidl::test::NameCollision dest;
- hidl2aidl::test::V1_2::NameCollision source;
- source.reference.reference.a = 12;
- source.reference.b = "Fancy";
- source.c = "Car";
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.reference.reference.a, dest.a);
- EXPECT_EQ(source.reference.b, String8(dest.b).c_str());
- EXPECT_EQ(source.c, String8(dest.c).c_str());
-}
-
-TEST_F(Hidl2aidlTranslateTest, IFooBigStruct) {
- hidl2aidl::test::IFooBigStruct dest;
- hidl2aidl::test::V1_1::IFoo::BigStruct source;
- source.type = 12;
- source.value = 16;
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.type, dest.type);
- EXPECT_EQ(source.value, dest.value);
-}
-
-TEST_F(Hidl2aidlTranslateTest, IBarInner) {
- hidl2aidl::test::IBarInner dest;
- hidl2aidl::test::V1_0::IBar::Inner source;
- source.a = 0x70000000;
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(static_cast<int32_t>(source.a), dest.a);
-}
-
-TEST_F(Hidl2aidlTranslateTest, UnsignedToSignedTooLarge) {
- hidl2aidl::test::IBarInner dest;
- hidl2aidl::test::V1_0::IBar::Inner source;
- // source.a is uint32_t, dest.a is int32_t
- source.a = 0xf0000000;
- ASSERT_FALSE(h2a::translate(source, &dest));
- EXPECT_NE(static_cast<int32_t>(source.a), dest.a);
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarByte) {
- hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- source.a(8);
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.a(), dest.get<hidl2aidl::test::SafeUnionBar::a>());
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarInt64) {
- hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- source.b(25000);
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(static_cast<int64_t>(source.b()), dest.get<hidl2aidl::test::SafeUnionBar::b>());
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarInnerStructBar) {
- hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- hidl2aidl::test::V1_2::SafeUnionBar::InnerStructBar inner;
- inner.x = 8;
- inner.z = 12;
- source.innerStructBar(inner);
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.innerStructBar().x,
- dest.get<hidl2aidl::test::SafeUnionBar::innerStructBar>().x);
- EXPECT_EQ(source.innerStructBar().z,
- dest.get<hidl2aidl::test::SafeUnionBar::innerStructBar>().z);
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarOnlyIn11) {
- hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- hidl2aidl::test::V1_1::OnlyIn11 onlyIn11;
- onlyIn11.str = 12;
- source.c(onlyIn11);
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.c().str, dest.get<hidl2aidl::test::SafeUnionBar::c>().str);
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarString) {
- hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- source.d("Hello world!");
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.d(), String8(dest.get<hidl2aidl::test::SafeUnionBar::d>()).c_str());
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarFloat) {
- hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- source.e(3.5f);
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.e(), dest.get<hidl2aidl::test::SafeUnionBar::e>());
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarDouble) {
- hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- source.f(3e10);
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.f(), dest.get<hidl2aidl::test::SafeUnionBar::f>());
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarBitfield) {
- hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- ::android::hardware::hidl_bitfield<::hidl2aidl::test::V1_2::FooFlag> bits(0);
- bits |= hidl2aidl::test::V1_2::FooFlag::THIRD;
- source.g(bits);
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(static_cast<hidl2aidl::test::FooFlag>(source.g()),
- dest.get<hidl2aidl::test::SafeUnionBar::g>());
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarEnum) {
- hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- source.h(hidl2aidl::test::V1_1::Value::B);
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(static_cast<hidl2aidl::test::Value>(source.h()),
- dest.get<hidl2aidl::test::SafeUnionBar::h>());
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarChar16) {
- hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- source.i(12);
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.i(), dest.get<hidl2aidl::test::SafeUnionBar::i>());
-}
-
-TEST_F(Hidl2aidlTranslateTest, ArrayFoo) {
- hidl2aidl::test::ArrayFoo dest;
- hidl2aidl::test::V1_2::ArrayFoo source;
- source.a[0] = 42;
- source.a[1] = 8;
- ASSERT_TRUE(h2a::translate(source, &dest));
- ASSERT_EQ(12u, dest.a.size());
- EXPECT_EQ(source.a[0], dest.a[0]);
- EXPECT_EQ(source.a[1], dest.a[1]);
- EXPECT_EQ(source.a[2], dest.a[2]);
- EXPECT_EQ(source.a[11], dest.a[11]);
-}
-
-TEST_F(Hidl2aidlTranslateTest, ArrayFooEmpty) {
- hidl2aidl::test::ArrayFoo dest;
- hidl2aidl::test::V1_2::ArrayFoo source;
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(12u, dest.a.size());
- EXPECT_EQ(0, dest.a[0]);
-}
-
-TEST_F(Hidl2aidlTranslateTest, ArrayFooEnum) {
- hidl2aidl::test::ArrayFoo dest;
- hidl2aidl::test::V1_2::ArrayFoo source;
- source.c[0] = hidl2aidl::test::V1_1::Value::A;
- source.c[1] = hidl2aidl::test::V1_1::Value::B;
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(static_cast<hidl2aidl::test::Value>(source.c[0]), dest.c[0]);
- EXPECT_EQ(static_cast<hidl2aidl::test::Value>(source.c[1]), dest.c[1]);
-}
-
-TEST_F(Hidl2aidlTranslateTest, ArrayFooString) {
- hidl2aidl::test::ArrayFoo dest;
- hidl2aidl::test::V1_2::ArrayFoo source;
- source.d[0] = "hello";
- source.d[1] = "world";
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.d[0], String8(dest.d[0]).c_str());
- EXPECT_EQ(source.d[1], String8(dest.d[1]).c_str());
-}
-
-TEST_F(Hidl2aidlTranslateTest, VectorFoo) {
- hidl2aidl::test::VectorFoo dest;
- hidl2aidl::test::V1_2::VectorFoo source;
- source.a = {42, 8};
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.a[0], dest.a[0]);
- EXPECT_EQ(source.a[1], dest.a[1]);
-}
-
-TEST_F(Hidl2aidlTranslateTest, VectorFooEmpty) {
- hidl2aidl::test::VectorFoo dest;
- hidl2aidl::test::V1_2::VectorFoo source;
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(0u, dest.a.size());
-}
-
-TEST_F(Hidl2aidlTranslateTest, VectorFooUnsigned) {
- hidl2aidl::test::VectorFoo dest;
- hidl2aidl::test::V1_2::VectorFoo source;
- // source.a is uint32_t, dest.a is int32_t
- source.b = {12, 0xf0000000};
- ASSERT_FALSE(h2a::translate(source, &dest));
-}
-
-TEST_F(Hidl2aidlTranslateTest, VectorFooEnum) {
- hidl2aidl::test::VectorFoo dest;
- hidl2aidl::test::V1_2::VectorFoo source;
- source.c = {hidl2aidl::test::V1_1::Value::A, hidl2aidl::test::V1_1::Value::B};
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(static_cast<hidl2aidl::test::Value>(source.c[0]), dest.c[0]);
- EXPECT_EQ(static_cast<hidl2aidl::test::Value>(source.c[1]), dest.c[1]);
-}
-
-TEST_F(Hidl2aidlTranslateTest, VectorFooString) {
- hidl2aidl::test::VectorFoo dest;
- hidl2aidl::test::V1_2::VectorFoo source;
- source.d = {"hello", "world"};
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.d[0], String8(dest.d[0]).c_str());
- EXPECT_EQ(source.d[1], String8(dest.d[1]).c_str());
-}
-
-TEST_F(Hidl2aidlTranslateTest, ExtensionArrayFoo) {
- hidl2aidl::test::extension::ArrayFoo dest;
- hidl2aidl::test::extension::V1_2::ArrayFoo source;
- source.e[0] = 12;
- source.e[1] = 2;
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.e[0], dest.e[0]);
- EXPECT_EQ(source.e[1], dest.e[1]);
-}
-
-} // namespace android
diff --git a/hidl2aidl/test/translate_ndk_test.cpp b/hidl2aidl/test/translate_ndk_test.cpp
deleted file mode 100644
index ec49deae..00000000
--- a/hidl2aidl/test/translate_ndk_test.cpp
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <hidl2aidl/test/extension/translate-ndk.h>
-#include <hidl2aidl/test/translate-ndk.h>
-
-#include <gtest/gtest.h>
-
-class Hidl2aidlTranslateTest : public ::testing::Test {};
-
-namespace android {
-
-TEST_F(Hidl2aidlTranslateTest, Onlyin10) {
- aidl::hidl2aidl::test::OnlyIn10 dest;
- hidl2aidl::test::V1_0::OnlyIn10 source;
- source.str = "Hello";
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.str, dest.str);
-}
-
-TEST_F(Hidl2aidlTranslateTest, OnlyIn11) {
- aidl::hidl2aidl::test::OnlyIn11 dest;
- hidl2aidl::test::V1_1::OnlyIn11 source;
- source.str = 12;
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.str, dest.str);
-}
-
-TEST_F(Hidl2aidlTranslateTest, OverrideMe) {
- aidl::hidl2aidl::test::OverrideMe dest;
- hidl2aidl::test::V1_1::OverrideMe source;
- source.a = "World";
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.a, dest.a);
-}
-
-TEST_F(Hidl2aidlTranslateTest, Outer) {
- aidl::hidl2aidl::test::Outer dest;
- hidl2aidl::test::V1_1::Outer source;
- source.a = 12;
- source.v1_0.inner.a = 16;
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.a, dest.a);
- EXPECT_EQ(source.v1_0.inner.a, dest.inner.a);
-}
-
-TEST_F(Hidl2aidlTranslateTest, OuterInner) {
- aidl::hidl2aidl::test::OuterInner dest;
- hidl2aidl::test::V1_0::Outer::Inner source;
- source.a = 12;
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.a, dest.a);
-}
-
-TEST_F(Hidl2aidlTranslateTest, NameCollision) {
- aidl::hidl2aidl::test::NameCollision dest;
- hidl2aidl::test::V1_2::NameCollision source;
- source.reference.reference.a = 12;
- source.reference.b = "Fancy";
- source.c = "Car";
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.reference.reference.a, dest.a);
- EXPECT_EQ(source.reference.b, dest.b);
- EXPECT_EQ(source.c, dest.c);
-}
-
-TEST_F(Hidl2aidlTranslateTest, IFooBigStruct) {
- aidl::hidl2aidl::test::IFooBigStruct dest;
- hidl2aidl::test::V1_1::IFoo::BigStruct source;
- source.type = 12;
- source.value = 16;
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.type, dest.type);
- EXPECT_EQ(source.value, dest.value);
-}
-
-TEST_F(Hidl2aidlTranslateTest, IBarInner) {
- aidl::hidl2aidl::test::IBarInner dest;
- hidl2aidl::test::V1_0::IBar::Inner source;
- source.a = 0x70000000;
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(static_cast<int32_t>(source.a), dest.a);
-}
-
-TEST_F(Hidl2aidlTranslateTest, UnsignedToSignedTooLarge) {
- aidl::hidl2aidl::test::IBarInner dest;
- hidl2aidl::test::V1_0::IBar::Inner source;
- // source.a is uint32_t, dest.a is int32_t
- source.a = 0xf0000000;
- ASSERT_FALSE(h2a::translate(source, &dest));
- EXPECT_NE(static_cast<int32_t>(source.a), dest.a);
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarByte) {
- aidl::hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- source.a(8);
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.a(), dest.get<aidl::hidl2aidl::test::SafeUnionBar::a>());
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarInt64) {
- aidl::hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- source.b(25000);
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(static_cast<int64_t>(source.b()), dest.get<aidl::hidl2aidl::test::SafeUnionBar::b>());
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarInnerStructBar) {
- aidl::hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- hidl2aidl::test::V1_2::SafeUnionBar::InnerStructBar inner;
- inner.x = 8;
- inner.z = 12;
- source.innerStructBar(inner);
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.innerStructBar().x,
- dest.get<aidl::hidl2aidl::test::SafeUnionBar::innerStructBar>().x);
- EXPECT_EQ(source.innerStructBar().z,
- dest.get<aidl::hidl2aidl::test::SafeUnionBar::innerStructBar>().z);
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarOnlyIn11) {
- aidl::hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- hidl2aidl::test::V1_1::OnlyIn11 onlyIn11;
- onlyIn11.str = 12;
- source.c(onlyIn11);
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.c().str, dest.get<aidl::hidl2aidl::test::SafeUnionBar::c>().str);
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarString) {
- aidl::hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- source.d("Hello world!");
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.d(), dest.get<aidl::hidl2aidl::test::SafeUnionBar::d>());
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarFloat) {
- aidl::hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- source.e(3.5f);
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.e(), dest.get<aidl::hidl2aidl::test::SafeUnionBar::e>());
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarDouble) {
- aidl::hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- source.f(3e10);
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.f(), dest.get<aidl::hidl2aidl::test::SafeUnionBar::f>());
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarBitfield) {
- aidl::hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- ::android::hardware::hidl_bitfield<::hidl2aidl::test::V1_2::FooFlag> bits(0);
- bits |= hidl2aidl::test::V1_2::FooFlag::THIRD;
- source.g(bits);
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(static_cast<aidl::hidl2aidl::test::FooFlag>(source.g()),
- dest.get<aidl::hidl2aidl::test::SafeUnionBar::g>());
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarEnum) {
- aidl::hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- source.h(hidl2aidl::test::V1_1::Value::B);
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(static_cast<aidl::hidl2aidl::test::Value>(source.h()),
- dest.get<aidl::hidl2aidl::test::SafeUnionBar::h>());
-}
-
-TEST_F(Hidl2aidlTranslateTest, SafeUnionBarChar16) {
- aidl::hidl2aidl::test::SafeUnionBar dest;
- hidl2aidl::test::V1_2::SafeUnionBar source;
- source.i(12);
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.i(), dest.get<aidl::hidl2aidl::test::SafeUnionBar::i>());
-}
-
-TEST_F(Hidl2aidlTranslateTest, ArrayFoo) {
- aidl::hidl2aidl::test::ArrayFoo dest;
- hidl2aidl::test::V1_2::ArrayFoo source;
- source.a[0] = 42;
- source.a[1] = 8;
- ASSERT_TRUE(h2a::translate(source, &dest));
- ASSERT_EQ(12u, dest.a.size());
- EXPECT_EQ(source.a[0], dest.a[0]);
- EXPECT_EQ(source.a[1], dest.a[1]);
- EXPECT_EQ(source.a[2], dest.a[2]);
- EXPECT_EQ(source.a[11], dest.a[11]);
-}
-
-TEST_F(Hidl2aidlTranslateTest, ArrayFooEmpty) {
- aidl::hidl2aidl::test::ArrayFoo dest;
- hidl2aidl::test::V1_2::ArrayFoo source;
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(12u, dest.a.size());
- EXPECT_EQ(0, dest.a[0]);
-}
-
-TEST_F(Hidl2aidlTranslateTest, ArrayFooEnum) {
- aidl::hidl2aidl::test::ArrayFoo dest;
- hidl2aidl::test::V1_2::ArrayFoo source;
- source.c[0] = hidl2aidl::test::V1_1::Value::A;
- source.c[1] = hidl2aidl::test::V1_1::Value::B;
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(static_cast<aidl::hidl2aidl::test::Value>(source.c[0]), dest.c[0]);
- EXPECT_EQ(static_cast<aidl::hidl2aidl::test::Value>(source.c[1]), dest.c[1]);
-}
-
-TEST_F(Hidl2aidlTranslateTest, ArrayFooString) {
- aidl::hidl2aidl::test::ArrayFoo dest;
- hidl2aidl::test::V1_2::ArrayFoo source;
- source.d[0] = "hello";
- source.d[1] = "world";
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.d[0], dest.d[0]);
- EXPECT_EQ(source.d[1], dest.d[1]);
-}
-
-TEST_F(Hidl2aidlTranslateTest, VectorFoo) {
- aidl::hidl2aidl::test::VectorFoo dest;
- hidl2aidl::test::V1_2::VectorFoo source;
- source.a = {42, 8};
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.a[0], dest.a[0]);
- EXPECT_EQ(source.a[1], dest.a[1]);
-}
-
-TEST_F(Hidl2aidlTranslateTest, VectorFooEmpty) {
- aidl::hidl2aidl::test::VectorFoo dest;
- hidl2aidl::test::V1_2::VectorFoo source;
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(0u, dest.a.size());
-}
-
-TEST_F(Hidl2aidlTranslateTest, VectorFooUnsigned) {
- aidl::hidl2aidl::test::VectorFoo dest;
- hidl2aidl::test::V1_2::VectorFoo source;
- // source.a is uint32_t, dest.a is int32_t
- source.b = {12, 0xf0000000};
- ASSERT_FALSE(h2a::translate(source, &dest));
-}
-
-TEST_F(Hidl2aidlTranslateTest, VectorFooEnum) {
- aidl::hidl2aidl::test::VectorFoo dest;
- hidl2aidl::test::V1_2::VectorFoo source;
- source.c = {hidl2aidl::test::V1_1::Value::A, hidl2aidl::test::V1_1::Value::B};
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(static_cast<aidl::hidl2aidl::test::Value>(source.c[0]), dest.c[0]);
- EXPECT_EQ(static_cast<aidl::hidl2aidl::test::Value>(source.c[1]), dest.c[1]);
-}
-
-TEST_F(Hidl2aidlTranslateTest, VectorFooString) {
- aidl::hidl2aidl::test::VectorFoo dest;
- hidl2aidl::test::V1_2::VectorFoo source;
- source.d = {"hello", "world"};
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.d[0], dest.d[0]);
- EXPECT_EQ(source.d[1], dest.d[1]);
-}
-
-TEST_F(Hidl2aidlTranslateTest, ExtensionArrayFoo) {
- aidl::hidl2aidl::test::extension::ArrayFoo dest;
- hidl2aidl::test::extension::V1_2::ArrayFoo source;
- source.e[0] = 12;
- source.e[1] = 2;
- ASSERT_TRUE(h2a::translate(source, &dest));
- EXPECT_EQ(source.e[0], dest.e[0]);
- EXPECT_EQ(source.e[1], dest.e[1]);
-}
-
-} // namespace android
diff --git a/host_utils/Android.bp b/host_utils/Android.bp
index ded575f8..f1c48188 100644
--- a/host_utils/Android.bp
+++ b/host_utils/Android.bp
@@ -12,15 +12,6 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
cc_library {
name: "libhidl-gen-host-utils",
defaults: ["hidl-gen-defaults"],
diff --git a/host_utils/Formatter.cpp b/host_utils/Formatter.cpp
index 5c73c01b..c801cf70 100644
--- a/host_utils/Formatter.cpp
+++ b/host_utils/Formatter.cpp
@@ -34,7 +34,7 @@ Formatter::Formatter(FILE* file, size_t spacesPerIndent)
mCurrentPosition(0) {}
Formatter::~Formatter() {
- if (mFile != stdout && mFile != stdin && mFile != stderr) {
+ if (mFile != stdout) {
fclose(mFile);
}
mFile = nullptr;
diff --git a/lint/Android.bp b/lint/Android.bp
index f91f5c7a..f5202206 100644
--- a/lint/Android.bp
+++ b/lint/Android.bp
@@ -14,15 +14,6 @@
* limitations under the License.
*/
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
cc_library_host_static {
name: "libhidl-lint",
defaults: ["hidl-gen-defaults"],
diff --git a/lint/main.cpp b/lint/main.cpp
index 004d7d62..84d9f9a1 100644
--- a/lint/main.cpp
+++ b/lint/main.cpp
@@ -156,9 +156,8 @@ int main(int argc, char** argv) {
}
if (machineReadable) {
- Json::StreamWriterBuilder factory;
- std::unique_ptr<Json::StreamWriter> const writer(factory.newStreamWriter());
- writer->write(lintJsonArray, &std::cout);
+ Json::StyledStreamWriter writer;
+ writer.write(std::cout, lintJsonArray);
}
return errorOnLints && haveLints;
diff --git a/lint/test/Android.bp b/lint/test/Android.bp
index e482c715..35fa922b 100644
--- a/lint/test/Android.bp
+++ b/lint/test/Android.bp
@@ -14,15 +14,6 @@
* limitations under the License.
*/
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
cc_test_host {
name: "hidl-lint_test",
defaults: ["hidl-gen-defaults"],
@@ -40,8 +31,4 @@ cc_test_host {
"liblog",
],
whole_static_libs: ["libhidl-lint"],
- test_options: {
- // These tests currently require the source tree to run properly.
- unit_test: false,
- },
}
diff --git a/main.cpp b/main.cpp
index 420351db..b25ef700 100644
--- a/main.cpp
+++ b/main.cpp
@@ -498,40 +498,16 @@ bool isCoreAndroidPackage(const FQName& package) {
package.inPackage("android.hardware");
}
-// Keep the list of libs which are used by VNDK core libs and should be part of
-// VNDK libs
-static const std::vector<std::string> vndkLibs = {
- "android.hardware.audio.common@2.0",
- "android.hardware.configstore@1.0",
- "android.hardware.configstore@1.1",
- "android.hardware.graphics.allocator@2.0",
- "android.hardware.graphics.allocator@3.0",
- "android.hardware.graphics.allocator@4.0",
- "android.hardware.graphics.bufferqueue@1.0",
- "android.hardware.graphics.bufferqueue@2.0",
- "android.hardware.media.bufferpool@2.0",
- "android.hardware.media.omx@1.0",
- "android.hardware.media@1.0",
- "android.hardware.memtrack@1.0",
- "android.hardware.soundtrigger@2.0",
- "android.hidl.token@1.0",
- "android.system.suspend@1.0",
-};
-
-bool isVndkCoreLib(const FQName& fqName) {
- return std::find(vndkLibs.begin(), vndkLibs.end(), fqName.string()) != vndkLibs.end();
-}
-
-status_t hasVariantFile(const FQName& fqName, const Coordinator* coordinator,
- const std::string& fileName, bool* isVariant) {
+// TODO(b/69862859): remove special case
+status_t isTestPackage(const FQName& fqName, const Coordinator* coordinator, bool* isTestPackage) {
const auto fileExists = [](const std::string& file) {
struct stat buf;
return stat(file.c_str(), &buf) == 0;
};
std::string path;
- status_t err =
- coordinator->getFilepath(fqName, Coordinator::Location::PACKAGE_ROOT, fileName, &path);
+ status_t err = coordinator->getFilepath(fqName, Coordinator::Location::PACKAGE_ROOT,
+ ".hidl_for_test", &path);
if (err != OK) return err;
const bool exists = fileExists(path);
@@ -540,19 +516,10 @@ status_t hasVariantFile(const FQName& fqName, const Coordinator* coordinator,
coordinator->onFileAccess(path, "r");
}
- *isVariant = exists;
+ *isTestPackage = exists;
return OK;
}
-status_t isSystemExtPackage(const FQName& fqName, const Coordinator* coordinator,
- bool* isSystemExt) {
- return hasVariantFile(fqName, coordinator, ".hidl_for_system_ext", isSystemExt);
-}
-
-status_t isOdmPackage(const FQName& fqName, const Coordinator* coordinator, bool* isOdm) {
- return hasVariantFile(fqName, coordinator, ".hidl_for_odm", isOdm);
-}
-
static status_t generateAdapterMainSource(const FQName& packageFQName,
const Coordinator* coordinator,
const FileGenerator::GetFormatter& getFormatter) {
@@ -652,19 +619,18 @@ static status_t generateAndroidBpForPackage(const FQName& packageFQName,
if (err != OK) return err;
bool genJavaLibrary = needsJavaCode && isJavaCompatible;
- bool isCoreAndroid = isCoreAndroidPackage(packageFQName);
+ bool generateForTest;
+ err = isTestPackage(packageFQName, coordinator, &generateForTest);
+ if (err != OK) return err;
- bool isVndkCore = isVndkCoreLib(packageFQName);
- bool isVndkSp = isSystemProcessSupportedPackage(packageFQName);
+ bool isCoreAndroid = isCoreAndroidPackage(packageFQName);
- bool isSystemExtHidl;
- err = isSystemExtPackage(packageFQName, coordinator, &isSystemExtHidl);
- if (err != OK) return err;
- bool isSystemExt = isSystemExtHidl || !isCoreAndroid;
+ bool isVndk = !generateForTest && isCoreAndroid;
+ bool isVndkSp = isVndk && isSystemProcessSupportedPackage(packageFQName);
- bool isForOdm;
- err = isOdmPackage(packageFQName, coordinator, &isForOdm);
- if (err != OK) return err;
+ // Currently, all platform-provided interfaces are in the VNDK, so if it isn't in the VNDK, it
+ // is device specific and so should be put in the system_ext partition.
+ bool isSystemExt = !isCoreAndroid;
std::string packageRoot;
err = coordinator->getPackageRoot(packageFQName, &packageRoot);
@@ -684,7 +650,7 @@ static status_t generateAndroidBpForPackage(const FQName& packageFQName,
out << "owner: \"" << coordinator->getOwner() << "\",\n";
}
out << "root: \"" << packageRoot << "\",\n";
- if (isVndkCore || isVndkSp) {
+ if (isVndk) {
out << "vndk: ";
out.block([&]() {
out << "enabled: true,\n";
@@ -696,9 +662,6 @@ static status_t generateAndroidBpForPackage(const FQName& packageFQName,
if (isSystemExt) {
out << "system_ext_specific: true,\n";
}
- if (isForOdm) {
- out << "odm_available: true,\n";
- }
(out << "srcs: [\n").indent([&] {
for (const auto& fqName : packageInterfaces) {
out << "\"" << fqName.name() << ".hal\",\n";
@@ -859,52 +822,6 @@ bool validateForSource(const FQName& fqName, const Coordinator* coordinator,
return true;
}
-bool validateForFormat(const FQName& fqName, const Coordinator* coordinator,
- const std::string& format) {
- CHECK_EQ(format, "format");
-
- if (!validateForSource(fqName, coordinator, format)) return false;
-
- std::vector<FQName> packageInterfaces;
-
- if (fqName.isFullyQualified()) {
- packageInterfaces.push_back(fqName);
- } else {
- status_t err = coordinator->appendPackageInterfacesToVector(fqName, &packageInterfaces);
- if (err != OK) return err;
- }
-
- bool destroysInformation = false;
-
- for (const auto& fqName : packageInterfaces) {
- AST* ast = coordinator->parse(fqName);
-
- if (ast->getUnhandledComments().size() > 0) {
- destroysInformation = true;
- for (const auto& i : ast->getUnhandledComments()) {
- std::cerr << "Unrecognized comment at " << i->location() << std::endl;
- Formatter err(stderr);
- err.indent();
- i->emit(err);
- err.unindent();
- err.endl();
- }
- }
- }
-
- if (destroysInformation) {
- std::cerr << "\nhidl-gen does not support comments at these locations, and formatting "
- "the file would destroy them. HIDL doc comments need to be multiline comments "
- "(/*...*/) before specific elements. This will also cause them to be emitted "
- "in output files in the correct locations so that IDE users or people "
- "inspecting generated source can see them in the correct location. Formatting "
- "the file would destroy these comments.\n";
- return false;
- }
-
- return true;
-}
-
FileGenerator::GenerationFunction generateExportHeaderForPackage(bool forJava) {
return [forJava](const FQName& packageFQName, const Coordinator* coordinator,
const FileGenerator::GetFormatter& getFormatter) -> status_t {
@@ -937,11 +854,7 @@ FileGenerator::GenerationFunction generateExportHeaderForPackage(bool forJava) {
}
if (exportedTypes.empty()) {
- fprintf(stderr,
- "ERROR: -Ljava-constants (Android.bp: gen_java_constants) requested for %s, "
- "but no types declare @export.",
- packageFQName.string().c_str());
- return UNKNOWN_ERROR;
+ return OK;
}
Formatter out = getFormatter();
@@ -1401,7 +1314,7 @@ static const std::vector<OutputHandler> kFormats = {
OutputMode::NEEDS_SRC,
Coordinator::Location::PACKAGE_ROOT,
GenerationGranularity::PER_FILE,
- validateForFormat,
+ validateForSource,
{
{
FileGenerator::alwaysGenerate,
@@ -1583,7 +1496,8 @@ int main(int argc, char **argv) {
}
if (!outputFormat->validate(fqName, &coordinator, outputFormat->name())) {
- fprintf(stderr, "ERROR: Validation failed.\n");
+ fprintf(stderr,
+ "ERROR: output handler failed.\n");
exit(1);
}
diff --git a/metadata/Android.bp b/metadata/Android.bp
index 0f4399b2..32b829ab 100644
--- a/metadata/Android.bp
+++ b/metadata/Android.bp
@@ -1,13 +1,4 @@
// build time C++ available list of all HIDL interfaces in the tree
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
cc_library {
name: "libhidlmetadata",
host_supported: true,
@@ -19,36 +10,11 @@ cc_library {
cc_library_headers {
name: "libhidlmetadata_headers",
- product_available: true,
recovery_available: true,
host_supported: true,
export_include_dirs: ["include"],
}
-cc_test_host {
- name: "hidl_metadata_test",
- srcs: ["test.cpp"],
- static_libs: [
- "libhidlmetadata",
- "libgmock",
- ],
-}
-
-prebuilt_hidl_interfaces {
- name: "hidl_metadata_test_interfaces1",
- interfaces: [
- "hidl.metadata.test@1.0::IBar",
- ],
-}
-
-prebuilt_hidl_interfaces {
- name: "hidl_metadata_test_interfaces2",
- interfaces: [
- "hidl.metadata.test@1.0::IBaz",
- "hidl.metadata.test@1.0::IFoo",
- ],
-}
-
// private impl below
cc_binary {
diff --git a/metadata/parser.cpp b/metadata/parser.cpp
index 0d52f897..71613b8d 100644
--- a/metadata/parser.cpp
+++ b/metadata/parser.cpp
@@ -27,13 +27,12 @@ int main(int argc, char** argv) {
const std::string path = argv[1];
Json::Value root;
- Json::CharReaderBuilder builder;
+ Json::Reader reader;
std::ifstream stream(path);
- std::string errorMessage;
- if (!Json::parseFromStream(builder, stream, &root, &errorMessage)) {
+ if (!reader.parse(stream, root)) {
std::cerr << "Failed to read interface inheritance hierarchy file: " << path << std::endl
- << errorMessage << std::endl;
+ << reader.getFormattedErrorMessages() << std::endl;
return EXIT_FAILURE;
}
diff --git a/metadata/test.cpp b/metadata/test.cpp
deleted file mode 100644
index fbd4bb55..00000000
--- a/metadata/test.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <gmock/gmock.h>
-#include <gtest/gtest.h>
-#include <hidl/metadata.h>
-
-#include <optional>
-
-using ::android::HidlInterfaceMetadata;
-using ::testing::ElementsAre;
-
-static std::optional<HidlInterfaceMetadata> metadataForModule(const std::string& name) {
- for (const HidlInterfaceMetadata& info : HidlInterfaceMetadata::all()) {
- if (name == info.name) return info;
- }
- return std::nullopt;
-}
-
-TEST(AidlMetadata, HasTestInstances) {
- const auto& info = metadataForModule("android.hardware.tests.bar@1.0::IBar");
- ASSERT_NE(info, std::nullopt);
- EXPECT_THAT(info->inherited, ElementsAre("android.hardware.tests.foo@1.0::IFoo"));
-}
-
-TEST(AidlMetadata, HasPrebuiltInstances) {
- for (const std::string& iface : {"hidl.metadata.test@1.0::IBar", "hidl.metadata.test@1.0::IBaz",
- "hidl.metadata.test@1.0::IFoo"}) {
- const auto& info = metadataForModule(iface);
- ASSERT_NE(info, std::nullopt) << iface;
- }
-}
diff --git a/scripts/hal-queries.sh b/scripts/hal-queries.sh
index e1009dfd..5192765a 100755
--- a/scripts/hal-queries.sh
+++ b/scripts/hal-queries.sh
@@ -138,23 +138,3 @@ function hidl-doc-generate-sources() {
echo "Done: generated sources are in $outputDir"
}
-# WARNING, must have all branches in question downloaded
-# Example:
-# $ cd $ANDROID_BUILD_TOP/hardware/interfaces
-# $ repo sync -j128 . # must not use -c
-# $ hidl_current_check aosp/oreo-release aosp/oreo-mr1-release aosp/pie-release # etc..
-#
-# This can be used to make sure interfaces are not removed.
-function hidl_current_check() {
- local args=("$@")
- for ((i=0;i<${#args[@]} - 1;++i)); do
- local parent="${args[i]}"
- local child="${args[i+1]}"
- git show-ref -q $parent || { echo "$parent doesn't exist" && continue; }
- echo "$parent .. $child"
- diff <(git show "$parent":current.txt | grep -oP "^[^ ]+ [^ ]+" | sort) \
- <(git show "$child":current.txt | grep -oP "^[^ ]+ [^ ]+" | sort) |
- grep "<"
- done
-}
-
diff --git a/scripts/hidl2aidl-all-interfaces.sh b/scripts/hidl2aidl-all-interfaces.sh
deleted file mode 100755
index c63a45d8..00000000
--- a/scripts/hidl2aidl-all-interfaces.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env bash
-
-# Runs all released packages through the hidl2aidl tool and reports any failures
-# Requires that hidl2aidl is built.
-# 'm hidl2aidl'
-
-
-function hidl2aidl-all-interfaces-main() {
- local ANY_FAIL=0
- local TEST_DIR='/tmp/hidl2aidl_test'
- set -e
- mkdir "$TEST_DIR"
- source "${ANDROID_BUILD_TOP}/system/tools/hidl/scripts/hal-queries.sh"
-
- for i in $(aosp-released-packages);
- do
- hidl2aidl -o "$TEST_DIR" -f "$i" || \
- { echo "FAIL: $i"; ANY_FAIL=1; }
- done
-
- rm -rf "$TEST_DIR"
-
- [ $ANY_FAIL -eq 0 ] && echo 'All passed!'
-}
-
-hidl2aidl-all-interfaces-main
diff --git a/scripts/run-tests.sh b/scripts/run-tests.sh
new file mode 100755
index 00000000..bb6f7d70
--- /dev/null
+++ b/scripts/run-tests.sh
@@ -0,0 +1,114 @@
+#!/bin/bash
+
+# See hal_hidl_gtest.py
+
+THREADS=
+CHECKER=vts_testability_checker
+CHECKER_DEVICE_PATH="/data/local/tmp/${CHECKER}"
+PRINT_COMMANDS=
+
+function run() {
+ if [ "${PRINT_COMMANDS}" = true ] ; then
+ >&2 echo "*** $@"
+ fi
+ $@
+}
+
+function make_modules() {
+ if [ "${THREADS}" != "0" ] ; then
+ run make -j${THREADS} -C ${ANDROID_BUILD_TOP} -f build/core/main.mk $@
+ fi
+}
+
+function push_checker() {
+ run adb push ${OUT}/system/bin/${CHECKER} ${CHECKER_DEVICE_PATH}
+}
+
+function push_test() {
+ local module=$1
+ for test_dir in nativetest nativetest64 ; do
+ local test_file=/data/${test_dir}/${module}/${module}
+ run adb push ${OUT}${test_file} ${test_file}
+ done
+}
+
+function read_checker_output() {
+ python -c 'import json,sys;obj=json.load(sys.stdin);sys.stdout.write("%s\n"%obj["Testable"]);map(lambda i:sys.stdout.write("%s\n"%i),obj["instances"])'
+}
+
+function run_test() {
+ local module=$1
+ local status=0
+
+ for test_dir in nativetest nativetest64 ; do
+ local test_file=/data/${test_dir}/${module}/${module}
+ local interfaces=$(run adb shell ${test_file} --list_registered_services \
+ | sed -n 's/^hal_service: \(.*\)$/\1/p')
+ if [ -z "$interfaces" ]; then
+ run adb shell ${test_file} || status=$?
+ else
+ for interface in ${interfaces} ; do
+ local output=$(run adb shell ${CHECKER_DEVICE_PATH} -c ${interface} | read_checker_output)
+ local testable=$(echo "${output}" | head -n1)
+ local instances=$(echo "${output}" | tail -n+2)
+
+ if [ "${testable}" == "True" ] ; then
+ for instance in ${instances} ; do
+ run adb shell ${test_file} --hal_service_instance="${interface}/${instance}" || status=$?
+ done
+ fi
+ done
+ fi
+ done
+ return ${status}
+}
+
+function usage() {
+ echo "usage: $0 -m <module_name> [-m <module_name>[...]] [-j <jobs>] [-p]"
+ echo " -m <module_name>: name of test (e.g. VtsHalHealthV2_0TargetTest)"
+ echo " -p: print commands"
+ echo " -j <jobs>: # jobs in make. "
+ echo " -j0 skips making any modules."
+ echo " If not present, use infinite number of jobs."
+
+ exit 1
+}
+
+function main() {
+ local modules=
+
+ while getopts "m:j:p" option ; do
+ case "${option}" in
+ m)
+ [ ! -z ${OPTARG} ] || usage
+ modules="${modules} ${OPTARG}"
+ ;;
+ j)
+ THREADS=${OPTARG}
+ ;;
+ p)
+ PRINT_COMMANDS=true
+ ;;
+ *)
+ usage
+ ;;
+ esac
+ done
+
+ set -e
+ make_modules ${CHECKER} ${modules}
+ run adb root
+ push_checker
+ for module in ${modules} ; do
+ push_test ${module}
+ done
+
+ set +e
+ local status=0
+ for module in ${modules} ; do
+ run_test ${module} || status=$?
+ done
+ return ${status}
+}
+
+main $@
diff --git a/test/Android.bp b/test/Android.bp
index 7503037e..1459fa67 100644
--- a/test/Android.bp
+++ b/test/Android.bp
@@ -1,12 +1,3 @@
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
hidl_package_root {
name: "hidl.tests",
}
diff --git a/test/build_variants/1.0/Android.bp b/test/build_variants/1.0/Android.bp
index b448401f..81f7880f 100644
--- a/test/build_variants/1.0/Android.bp
+++ b/test/build_variants/1.0/Android.bp
@@ -1,12 +1,3 @@
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
hidl_interface {
name: "hidl_test_system_ext@1.0",
root: "hidl_test_system_ext",
diff --git a/test/build_variants/2.0/Android.bp b/test/build_variants/2.0/Android.bp
index c9347e9b..ab2cdfc5 100644
--- a/test/build_variants/2.0/Android.bp
+++ b/test/build_variants/2.0/Android.bp
@@ -1,12 +1,3 @@
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
hidl_interface {
name: "hidl_test_product@2.0",
product_specific: true,
diff --git a/test/build_variants/Android.bp b/test/build_variants/Android.bp
index c312d97b..691218e3 100644
--- a/test/build_variants/Android.bp
+++ b/test/build_variants/Android.bp
@@ -1,12 +1,3 @@
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
hidl_package_root {
name: "hidl_test_system_ext",
}
diff --git a/test/cpp_impl_test/Android.bp b/test/cpp_impl_test/Android.bp
index 7901dc58..9b1a2e68 100644
--- a/test/cpp_impl_test/Android.bp
+++ b/test/cpp_impl_test/Android.bp
@@ -1,20 +1,11 @@
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
genrule {
name: "hidl_cpp_impl_test_gen-headers",
tools: [
"hidl-gen",
],
- srcs: [
- ":android.hardware.tests.foo@1.0_hal",
- ":hidl.tests.vendor.android@1.0_hal",
+ required: [
+ "android.hardware.tests.foo@1.0",
+ "hidl.tests.vendor.android@1.0",
],
cmd: "$(location hidl-gen) -o $(genDir) -Lc++-impl-headers android.hardware.tests.foo@1.0 && " +
"$(location hidl-gen) -o $(genDir) -r hidl.tests:system/tools/hidl/test/ " +
@@ -34,9 +25,9 @@ genrule {
tools: [
"hidl-gen",
],
- srcs: [
- ":android.hardware.tests.foo@1.0_hal",
- ":hidl.tests.vendor.android@1.0_hal",
+ required: [
+ "android.hardware.tests.foo@1.0",
+ "hidl.tests.vendor.android@1.0",
],
cmd: "$(location hidl-gen) -o $(genDir) -Lc++-impl-sources android.hardware.tests.foo@1.0 && " +
"$(location hidl-gen) -o $(genDir) -r hidl.tests:system/tools/hidl/test/ " +
diff --git a/test/error_test/Android.bp b/test/error_test/Android.bp
index 03bc45f8..4c8c8991 100644
--- a/test/error_test/Android.bp
+++ b/test/error_test/Android.bp
@@ -1,12 +1,3 @@
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
genrule {
name: "hidl_error_test_gen",
tools: ["hidl-gen"],
@@ -24,5 +15,4 @@ cc_test_host {
name: "hidl_error_test",
cflags: ["-Wall", "-Werror"],
generated_sources: ["hidl_error_test_gen"],
- gtest: false,
}
diff --git a/test/error_test/import_identifier/1.0/IFoo.hal b/test/error_test/import_identifier/1.0/IFoo.hal
deleted file mode 100644
index 82743587..00000000
--- a/test/error_test/import_identifier/1.0/IFoo.hal
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package test.import_identifier@1.0;
-
-// Used to secretly import all types
-import test.import_identifier@1.0::types:Foo;
-
-// since this is only a warning for now
-Syntax error!
-
-interface IFoo {
-};
diff --git a/test/error_test/import_identifier/1.0/required_error b/test/error_test/import_identifier/1.0/required_error
deleted file mode 100644
index 7b1ad8f0..00000000
--- a/test/error_test/import_identifier/1.0/required_error
+++ /dev/null
@@ -1 +0,0 @@
-must import type, but importing value
diff --git a/test/error_test/import_identifier/1.0/types.hal b/test/error_test/import_identifier/1.0/types.hal
deleted file mode 100644
index 0b4cc437..00000000
--- a/test/error_test/import_identifier/1.0/types.hal
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package test.import_identifier@1.0;
-
-struct Foo { uint8_t a; uint8_t b; };
-
diff --git a/test/export_test/Android.bp b/test/export_test/Android.bp
index 7317e1af..5d7beadd 100644
--- a/test/export_test/Android.bp
+++ b/test/export_test/Android.bp
@@ -1,12 +1,3 @@
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
genrule {
name: "hidl_export_test_gen-headers",
tools: [
diff --git a/test/format_test/1.0/Android.bp b/test/format_test/1.0/Android.bp
index ca3e9f3f..a0e0e6ab 100644
--- a/test/format_test/1.0/Android.bp
+++ b/test/format_test/1.0/Android.bp
@@ -1,14 +1,5 @@
// This file is autogenerated by hidl-gen -Landroidbp.
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
hidl_interface {
name: "hidl_format_test_pkg@1.0",
root: "hidl_format_test_pkg",
diff --git a/test/format_test/Android.bp b/test/format_test/Android.bp
index 62b14661..f2e17b2a 100644
--- a/test/format_test/Android.bp
+++ b/test/format_test/Android.bp
@@ -14,15 +14,6 @@
* limitations under the License.
*/
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
genrule {
name: "hidl_format_test_diff",
tools: ["hidl-gen"],
@@ -37,6 +28,7 @@ genrule {
"1.0/IFoo.hal",
"1.0/types.hal",
],
+ required: ["android.hidl.base@1.0"],
out: [
"system/tools/hidl/test/format_test/1.0/Android.bp",
"system/tools/hidl/test/format_test/1.0/IBar.hal",
diff --git a/test/hash_test/Android.bp b/test/hash_test/Android.bp
index b58a058c..5f9f2480 100644
--- a/test/hash_test/Android.bp
+++ b/test/hash_test/Android.bp
@@ -1,55 +1,36 @@
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
genrule {
name: "hidl_hash_test_gen",
tools: [
"hidl-gen",
],
cmd: "$(location hidl-gen) -L check " +
- " -r android.hidl:system/libhidl/transport" +
- " -r test.hash:system/tools/hidl/test/hash_test/correct_hash" +
- " test.hash.hash@1.0" +
- "&&" +
- "!($(location hidl-gen) -F -L check " +
- " -r android.hidl:system/libhidl/transport" +
- " -r test.hash:system/tools/hidl/test/hash_test/missing_hash" +
- " test.hash.hash@1.0 2> /dev/null)" +
- "&&" +
- "!($(location hidl-gen) -L check " +
- " -r android.hidl:system/libhidl/transport" +
- " -r test.hash:system/tools/hidl/test/hash_test/incorrect_hash" +
- " test.hash.hash@1.0 2> /dev/null)" +
- "&&" +
- "$(location hidl-gen) -L hash " +
- " -r android.hidl:system/libhidl/transport" +
- " -r test.hash:system/tools/hidl/test/hash_test/incorrect_hash" +
- " test.hash.hash@1.0 > /dev/null" +
- "&&" +
- "echo 'int main(){return 0;}' > $(genDir)/TODO_b_37575883.cpp",
+ " -r android.hidl:system/libhidl/transport" +
+ " -r test.hash:system/tools/hidl/test/hash_test/good" +
+ " test.hash.hash@1.0" +
+ "&&" +
+ "!($(location hidl-gen) -L check " +
+ " -r android.hidl:system/libhidl/transport" +
+ " -r test.hash:system/tools/hidl/test/hash_test/bad" +
+ " test.hash.hash@1.0 2> /dev/null)" +
+ "&&" +
+ "$(location hidl-gen) -L hash " +
+ " -r android.hidl:system/libhidl/transport" +
+ " -r test.hash:system/tools/hidl/test/hash_test/bad" +
+ " test.hash.hash@1.0 > /dev/null" +
+ "&&" +
+ "echo 'int main(){return 0;}' > $(genDir)/TODO_b_37575883.cpp",
out: ["TODO_b_37575883.cpp"],
srcs: [
- "correct_hash/current.txt",
- "correct_hash/hash/1.0/IHash.hal",
- "incorrect_hash/current.txt",
- "incorrect_hash/hash/1.0/IHash.hal",
- "missing_hash/hash/1.0/IUnhashed.hal",
+ "bad/hash/1.0/IHash.hal",
+ "bad/current.txt",
+ "good/hash/1.0/IHash.hal",
+ "good/current.txt",
],
}
cc_test_host {
name: "hidl_hash_test",
- cflags: [
- "-Wall",
- "-Werror",
- ],
+ cflags: ["-Wall", "-Werror"],
generated_sources: ["hidl_hash_test_gen"],
- gtest: false,
}
diff --git a/test/hash_test/incorrect_hash/current.txt b/test/hash_test/bad/current.txt
index b6e7514e..b6e7514e 100644
--- a/test/hash_test/incorrect_hash/current.txt
+++ b/test/hash_test/bad/current.txt
diff --git a/test/hash_test/incorrect_hash/hash/1.0/IHash.hal b/test/hash_test/bad/hash/1.0/IHash.hal
index 5a8aca3e..5a8aca3e 100644
--- a/test/hash_test/incorrect_hash/hash/1.0/IHash.hal
+++ b/test/hash_test/bad/hash/1.0/IHash.hal
diff --git a/test/hash_test/correct_hash/current.txt b/test/hash_test/good/current.txt
index c99ada4a..ff4b6692 100644
--- a/test/hash_test/correct_hash/current.txt
+++ b/test/hash_test/good/current.txt
@@ -1,3 +1 @@
b19939ecb4f877820df49b684f3164f0a3f9aa18743a3521f3bd04e4a06fed64 test.hash.hash@1.0::IHash # comments are fine too
-
-# explicitly not including IUnhashed
diff --git a/test/hash_test/correct_hash/hash/1.0/IHash.hal b/test/hash_test/good/hash/1.0/IHash.hal
index e5cd532f..e5cd532f 100644
--- a/test/hash_test/correct_hash/hash/1.0/IHash.hal
+++ b/test/hash_test/good/hash/1.0/IHash.hal
diff --git a/test/hash_test/missing_hash/hash/1.0/IUnhashed.hal b/test/hash_test/missing_hash/hash/1.0/IUnhashed.hal
deleted file mode 100644
index d760aeab..00000000
--- a/test/hash_test/missing_hash/hash/1.0/IUnhashed.hal
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package test.hash.hash@1.0;
-
-// okay unless -F is specified
-interface IUnhashed {
-};
diff --git a/test/hidl_test/Android.bp b/test/hidl_test/Android.bp
index fe0fe34f..fcecd6d8 100644
--- a/test/hidl_test/Android.bp
+++ b/test/hidl_test/Android.bp
@@ -1,29 +1,5 @@
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
-python_test_host {
- name: "hidl_test",
- main: "hidl_test.py",
- srcs: ["hidl_test.py"],
- test_config: "hidl_test.xml",
- target_required: [
- "hidl_test_client",
- "hidl_test_servers",
- ],
- test_suites: ["general-tests"],
- test_options: {
- unit_test: false,
- },
-}
-
cc_defaults {
- name: "hidl_test-defaults",
+ name: "hidl_test_client-defaults",
defaults: ["hidl-gen-defaults"],
shared_libs: [
@@ -76,27 +52,16 @@ cc_defaults {
],
group_static_libs: true,
-
- compile_multilib: "both",
- multilib: {
- lib32: {
- suffix: "32",
- },
- lib64: {
- suffix: "64",
- },
- },
- test_suites: ["general-tests"],
}
cc_test {
name: "hidl_test_client",
- defaults: ["hidl_test-defaults"],
+ defaults: ["hidl_test_client-defaults"],
srcs: [
"hidl_test_client.cpp",
"FooCallback.cpp",
- "static_test.cpp",
+ "static_test.cpp"
],
shared_libs: [
@@ -106,7 +71,7 @@ cc_test {
cc_test {
name: "hidl_test_servers",
- defaults: ["hidl_test-defaults"],
+ defaults: ["hidl_test_client-defaults"],
srcs: ["hidl_test_servers.cpp"],
gtest: false,
}
diff --git a/test/hidl_test/Android.mk b/test/hidl_test/Android.mk
new file mode 100644
index 00000000..e949ecd1
--- /dev/null
+++ b/test/hidl_test/Android.mk
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+LOCAL_MODULE := hidl_test_helper
+LOCAL_MODULE_CLASS := NATIVE_TESTS
+LOCAL_SRC_FILES := hidl_test_helper
+
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)/nativetest64
+
+include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := hidl_test
+LOCAL_MODULE_CLASS := NATIVE_TESTS
+LOCAL_SRC_FILES := hidl_test
+
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)/nativetest64
+
+LOCAL_REQUIRED_MODULES := \
+ hidl_test_client \
+ hidl_test_helper \
+ hidl_test_servers
+
+ifneq ($(TARGET_2ND_ARCH),)
+LOCAL_REQUIRED_MODULES += hidl_test_servers$(TARGET_2ND_ARCH_MODULE_SUFFIX)
+LOCAL_REQUIRED_MODULES += hidl_test_client$(TARGET_2ND_ARCH_MODULE_SUFFIX)
+endif
+
+include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := VtsHidlUnitTests
+-include test/vts/tools/build/Android.host_config.mk
diff --git a/test/hidl_test/AndroidTest.xml b/test/hidl_test/AndroidTest.xml
new file mode 100644
index 00000000..66339427
--- /dev/null
+++ b/test/hidl_test/AndroidTest.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<configuration description="Config for VTS HIDL unit tests">
+ <option name="config-descriptor:metadata" key="plan" value="vts-library" />
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="HostDrivenTest.push" />
+ <option name="cleanup" value="true" />
+ <option name="push" value="DATA/nativetest/hidl_test_servers/hidl_test_servers->/data/nativetest/hidl_test_servers/hidl_test_servers" />
+ <option name="push" value="DATA/nativetest64/hidl_test_servers/hidl_test_servers->/data/nativetest64/hidl_test_servers/hidl_test_servers" />
+ <option name="push" value="DATA/nativetest/hidl_test_client/hidl_test_client->/data/nativetest/hidl_test_client/hidl_test_client" />
+ <option name="push" value="DATA/nativetest64/hidl_test_client/hidl_test_client->/data/nativetest64/hidl_test_client/hidl_test_client" />
+ <option name="push" value="DATA/nativetest64/hidl_test_helper->/data/nativetest64/hidl_test_helper" />
+ </target_preparer>
+ <multi_target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="VtsHidlUnitTests" />
+ <option name="binary-test-type" value="binary_test" />
+ <option name="binary-test-source" value="DATA/nativetest64/hidl_test->/data/nativetest64/hidl_test" />
+ <option name="test-timeout" value="1m" />
+ </test>
+</configuration>
diff --git a/test/hidl_test/hidl_test b/test/hidl_test/hidl_test
new file mode 100644
index 00000000..883484d8
--- /dev/null
+++ b/test/hidl_test/hidl_test
@@ -0,0 +1,14 @@
+source /data/nativetest64/hidl_test_helper &&
+
+chmod a+x /data/nativetest/hidl_test_servers/hidl_test_servers &&
+chmod a+x /data/nativetest64/hidl_test_servers/hidl_test_servers &&
+chmod a+x /data/nativetest/hidl_test_client/hidl_test_client &&
+chmod a+x /data/nativetest64/hidl_test_client/hidl_test_client &&
+
+run_all_tests \
+ "/data/nativetest/hidl_test_servers/hidl_test_servers" \
+ "/data/nativetest64/hidl_test_servers/hidl_test_servers" \
+ "/data/nativetest/hidl_test_client/hidl_test_client" \
+ "/data/nativetest64/hidl_test_client/hidl_test_client" \
+ "hidl_test" \
+ "$@"
diff --git a/test/hidl_test/hidl_test.py b/test/hidl_test/hidl_test.py
deleted file mode 100644
index 1a58e5d6..00000000
--- a/test/hidl_test/hidl_test.py
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/env python3
-#
-# Copyright (C) 2020 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import subprocess
-import unittest
-
-def run_cmd(cmd, ignore_error=False):
- print("Running command:", cmd)
- p = subprocess.Popen(cmd, shell=True)
- p.communicate()
- if not ignore_error and p.returncode:
- raise subprocess.CalledProcessError(p.returncode, cmd)
- return p.returncode
-
-class TestHidl(unittest.TestCase):
- pass
-
-def make_test(client, server):
- def test(self):
- try:
- run_cmd("adb shell killall %s >/dev/null 2>&1" % client, ignore_error=True)
- run_cmd("adb shell killall %s >/dev/null 2>&1" % server, ignore_error=True)
- run_cmd("adb shell \"( %s ) </dev/null >/dev/null 2>&1 &\"" % server)
- run_cmd("adb shell %s" % client)
- finally:
- run_cmd("adb shell killall %s >/dev/null 2>&1" % client, ignore_error=True)
- run_cmd("adb shell killall %s >/dev/null 2>&1" % server, ignore_error=True)
- return test
-
-def has_bitness(bitness):
- return 0 == run_cmd("echo '[[ \"$(getprop ro.product.cpu.abilist%s)\" != \"\" ]]' | adb shell sh" % bitness, ignore_error=True)
-
-if __name__ == '__main__':
- clients = []
- servers = []
-
- if has_bitness(32):
- clients += ["/data/nativetest/hidl_test_client/hidl_test_client"]
- servers += ["/data/nativetest/hidl_test_servers/hidl_test_servers"]
-
- if has_bitness(64):
- clients += ["/data/nativetest64/hidl_test_client/hidl_test_client"]
- servers += ["/data/nativetest64/hidl_test_servers/hidl_test_servers"]
-
- assert len(clients) > 0
- assert len(servers) > 0
-
- def short_name(binary):
- if "64" in binary:
- return "64"
- return "32"
-
- for client in clients:
- for server in servers:
- test_name = 'test_%s_to_%s' % (short_name(client), short_name(server))
- test = make_test(client, server)
- setattr(TestHidl, test_name, test)
-
- suite = unittest.TestLoader().loadTestsFromTestCase(TestHidl)
- unittest.TextTestRunner(verbosity=2).run(suite)
diff --git a/test/hidl_test/hidl_test.xml b/test/hidl_test/hidl_test.xml
deleted file mode 100644
index 586adc43..00000000
--- a/test/hidl_test/hidl_test.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2020 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<configuration description="Runs HIDL on-device integration tests.">
- <option name="test-suite-tag" value="apct" />
- <option name="test-suite-tag" value="apct-native" />
-
- <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer"/>
-
- <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
- <!-- We would like to abort, but currently there is not a simple way to specify installation of both bitnesses of targets. -->
- <option name="abort-on-push-failure" value="false"/>
-
- <option name="push" value="hidl_test_client32->/data/nativetest/hidl_test_client/hidl_test_client" />
- <option name="push" value="hidl_test_client64->/data/nativetest64/hidl_test_client/hidl_test_client" />
-
- <option name="push" value="hidl_test_servers32->/data/nativetest/hidl_test_servers/hidl_test_servers" />
- <option name="push" value="hidl_test_servers64->/data/nativetest64/hidl_test_servers/hidl_test_servers" />
-
- <option name="cleanup" value="true" />
- </target_preparer>
-
- <test class="com.android.tradefed.testtype.python.PythonBinaryHostTest" >
- <option name="par-file-name" value="hidl_test" />
- <option name="test-timeout" value="2m" />
- </test>
-</configuration>
-
diff --git a/test/hidl_test/hidl_test_client.cpp b/test/hidl_test/hidl_test_client.cpp
index eff40a54..1993198a 100644
--- a/test/hidl_test/hidl_test_client.cpp
+++ b/test/hidl_test/hidl_test_client.cpp
@@ -33,6 +33,7 @@
#include <android/hardware/tests/inheritance/1.0/IParent.h>
#include <android/hardware/tests/memory/1.0/IMemoryTest.h>
#include <android/hardware/tests/multithread/1.0/IMultithread.h>
+#include <android/hardware/tests/safeunion/1.0/IOtherInterface.h>
#include <android/hardware/tests/safeunion/1.0/ISafeUnion.h>
#include <android/hardware/tests/safeunion/cpp/1.0/ICppSafeUnion.h>
#include <android/hardware/tests/trie/1.0/ITrie.h>
@@ -132,6 +133,7 @@ using ::android::hardware::tests::inheritance::V1_0::IParent;
using ::android::hardware::tests::memory::V1_0::IMemoryTest;
using ::android::hardware::tests::multithread::V1_0::IMultithread;
using ::android::hardware::tests::safeunion::cpp::V1_0::ICppSafeUnion;
+using ::android::hardware::tests::safeunion::V1_0::IOtherInterface;
using ::android::hardware::tests::safeunion::V1_0::ISafeUnion;
using ::android::hardware::tests::trie::V1_0::ITrie;
using ::android::hardware::tests::trie::V1_0::TrieNode;
@@ -309,6 +311,16 @@ private:
int32_t mCookie;
};
+struct OtherInterface : public IOtherInterface {
+ Return<void> concatTwoStrings(const hidl_string& a, const hidl_string& b,
+ concatTwoStrings_cb _hidl_cb) override {
+ hidl_string result = std::string(a) + std::string(b);
+ _hidl_cb(result);
+
+ return Void();
+ }
+};
+
struct ServiceNotification : public IServiceNotification {
std::mutex mutex;
std::condition_variable condition;
@@ -710,7 +722,13 @@ TEST_F(HidlTest, ServiceListManifestByInterfaceTest) {
ASSERT_EQ(1, registered.size());
EXPECT_EQ("default", registered[0]);
}));
-
+ // vendor service (this is required on all devices)
+ EXPECT_OK(
+ manager->listManifestByInterface("android.hardware.configstore@1.0::ISurfaceFlingerConfigs",
+ [](const hidl_vec<hidl_string>& registered) {
+ ASSERT_EQ(1, registered.size());
+ EXPECT_EQ("default", registered[0]);
+ }));
// test service that will never be in a manifest
EXPECT_OK(manager->listManifestByInterface(
IParent::descriptor,
@@ -1636,7 +1654,7 @@ TEST_F(HidlTest, BazStructWithInterfaceTest) {
swi.array = testArray;
swi.oneString = testString;
swi.vectorOfStrings = testStrings;
- swi.iface = baz;
+ swi.dummy = baz;
EXPECT_OK(baz->haveSomeStructWithInterface(swi, [&](const IBaz::StructWithInterface& swiBack) {
EXPECT_EQ(42, swiBack.number);
@@ -1647,7 +1665,9 @@ TEST_F(HidlTest, BazStructWithInterfaceTest) {
EXPECT_EQ(testString, std::string(swiBack.oneString));
EXPECT_EQ(testStrings, swiBack.vectorOfStrings);
- EXPECT_TRUE(interfacesEqual(swi.iface, swiBack.iface));
+ EXPECT_TRUE(interfacesEqual(swi.dummy, swiBack.dummy));
+ EXPECT_OK(swiBack.dummy->someBoolVectorMethod(
+ testVector, [&](const hidl_vec<bool>& result) { EXPECT_EQ(goldenResult, result); }));
}));
}
@@ -1875,7 +1895,7 @@ TEST_F(HidlTest, EmptyTransactionTest) {
sp<IBinder> binder = ::android::hardware::toBinder(bar);
Parcel request, reply;
- EXPECT_EQ(::android::BAD_TYPE, binder->transact(3 /*someBoolMethod*/, request, &reply));
+ EXPECT_EQ(::android::BAD_TYPE, binder->transact(2 /*someBoolMethod*/, request, &reply));
EXPECT_OK(bar->ping()); // still works
}
@@ -1890,7 +1910,7 @@ TEST_F(HidlTest, WrongDescriptorTest) {
Parcel request, reply;
// wrong descriptor
EXPECT_EQ(::android::OK, request.writeInterfaceToken("not a real descriptor"));
- EXPECT_EQ(::android::BAD_TYPE, binder->transact(3 /*someBoolMethod*/, request, &reply));
+ EXPECT_EQ(::android::BAD_TYPE, binder->transact(2 /*someBoolMethod*/, request, &reply));
EXPECT_OK(bar->ping()); // still works
}
@@ -1906,7 +1926,7 @@ TEST_F(HidlTest, TwowayMethodOnewayEnabledTest) {
EXPECT_EQ(::android::OK, request.writeInterfaceToken(IBaz::descriptor));
EXPECT_EQ(::android::OK, request.writeInt64(1234));
// IBaz::doThatAndReturnSomething is two-way but we call it using FLAG_ONEWAY.
- EXPECT_EQ(::android::OK, binder->transact(19 /*doThatAndReturnSomething*/, request, &reply,
+ EXPECT_EQ(::android::OK, binder->transact(18 /*doThatAndReturnSomething*/, request, &reply,
IBinder::FLAG_ONEWAY));
::android::hardware::Status status;
@@ -1938,7 +1958,7 @@ TEST_F(HidlTest, OnewayMethodOnewayDisabledTest) {
// sends an empty reply for two-way transactions if the transaction itself
// did not send a reply.
::android::OK,
- binder->transact(18 /*doThis*/, request, &reply, 0 /* Not FLAG_ONEWAY */));
+ binder->transact(17 /*doThis*/, request, &reply, 0 /* Not FLAG_ONEWAY */));
if (gHidlEnvironment->enableDelayMeasurementTests) {
// IBaz::doThis is oneway, should return instantly.
EXPECT_LT(systemTime() - now, ONEWAY_TOLERANCE_NS);
@@ -2129,7 +2149,7 @@ TEST_F(HidlTest, SafeUnionUninit) {
}
TEST_F(HidlTest, SafeUnionMoveConstructorTest) {
- sp<SimpleChild> otherInterface = new SimpleChild();
+ sp<IOtherInterface> otherInterface = new OtherInterface();
ASSERT_EQ(1, otherInterface->getStrongCount());
InterfaceTypeSafeUnion safeUnion;
@@ -2158,7 +2178,7 @@ TEST_F(HidlTest, SafeUnionCopyAssignmentTest) {
}
TEST_F(HidlTest, SafeUnionMoveAssignmentTest) {
- sp<SimpleChild> otherInterface = new SimpleChild();
+ sp<IOtherInterface> otherInterface = new OtherInterface();
ASSERT_EQ(1, otherInterface->getStrongCount());
InterfaceTypeSafeUnion safeUnion;
@@ -2229,6 +2249,10 @@ TEST_F(HidlTest, SafeUnionInterfaceTest) {
const std::string testStringA = "Hello";
const std::string testStringB = "World";
+ const std::string serviceName = "otherinterface";
+ sp<IOtherInterface> otherInterface = new OtherInterface();
+ EXPECT_EQ(::android::OK, otherInterface->registerAsService(serviceName));
+
EXPECT_OK(
safeunionInterface->newInterfaceTypeSafeUnion([&](const InterfaceTypeSafeUnion& safeUnion) {
EXPECT_EQ(InterfaceTypeSafeUnion::hidl_discriminator::noinit,
@@ -2244,13 +2268,15 @@ TEST_F(HidlTest, SafeUnionInterfaceTest) {
}
EXPECT_OK(safeunionInterface->setInterfaceC(
- safeUnion, manager, [&](const InterfaceTypeSafeUnion& safeUnion) {
- EXPECT_EQ(InterfaceTypeSafeUnion::hidl_discriminator::c,
- safeUnion.getDiscriminator());
-
- using ::android::hardware::interfacesEqual;
- EXPECT_TRUE(interfacesEqual(safeUnion.c(), manager));
- }));
+ safeUnion, otherInterface, [&](const InterfaceTypeSafeUnion& safeUnion) {
+ EXPECT_EQ(InterfaceTypeSafeUnion::hidl_discriminator::c,
+ safeUnion.getDiscriminator());
+
+ EXPECT_OK(safeUnion.c()->concatTwoStrings(
+ testStringA, testStringB, [&](const hidl_string& result) {
+ EXPECT_EQ(testStringA + testStringB, std::string(result));
+ }));
+ }));
}));
EXPECT_OK(safeunionInterface->setInterfaceD(
@@ -2479,7 +2505,7 @@ TEST_F(HidlTest, SafeUnionEqualityTest) {
}
TEST_F(HidlTest, SafeUnionSimpleDestructorTest) {
- sp<SimpleChild> otherInterface = new SimpleChild();
+ sp<IOtherInterface> otherInterface = new OtherInterface();
ASSERT_EQ(1, otherInterface->getStrongCount());
{
@@ -2492,7 +2518,7 @@ TEST_F(HidlTest, SafeUnionSimpleDestructorTest) {
}
TEST_F(HidlTest, SafeUnionSwitchActiveComponentsDestructorTest) {
- sp<SimpleChild> otherInterface = new SimpleChild();
+ sp<IOtherInterface> otherInterface = new OtherInterface();
ASSERT_EQ(1, otherInterface->getStrongCount());
InterfaceTypeSafeUnion safeUnion;
@@ -2636,7 +2662,7 @@ static void usage(const char *me) {
}
int main(int argc, char **argv) {
- android::hardware::details::setTrebleTestingOverride(true);
+ setenv("TREBLE_TESTING_OVERRIDE", "true", true);
const char *me = argv[0];
bool b = false;
diff --git a/test/hidl_test/hidl_test_helper b/test/hidl_test/hidl_test_helper
new file mode 100644
index 00000000..22c416ff
--- /dev/null
+++ b/test/hidl_test/hidl_test_helper
@@ -0,0 +1,140 @@
+function usage() {
+ echo "runs $TEST_NAME"
+ echo "\t -h help"
+ echo "\t -c [CLIENT64_SERVER64 | CLIENT32_SERVER32 | CLIENT64_SERVER32 | CLIENT32_SERVER64] configures whether to run 32-bit or 64-bit versions of the servers and client"
+ echo "\t -x [/ld/library/path32] set the LD_LIBRARY_PATH for servers32 and client32"
+ echo "\t -y [/ld/library/path64] set the LD_LIBRARY_PATH for servers64 and client64"
+}
+
+failed_test_cases=()
+
+function run_test() {
+ if [ $1 -eq 32 ]; then
+ CLIENT_PATH=$CLIENT_PATH32
+ LD_LIB_PATH_CLIENT=$LD_LIB_PATH32
+ else
+ CLIENT_PATH=$CLIENT_PATH64
+ LD_LIB_PATH_CLIENT=$LD_LIB_PATH64
+ fi
+
+ if [ $2 -eq 32 ]; then
+ SERVER_PATH=$SERVER_PATH32
+ LD_LIB_PATH_SERVER=$LD_LIB_PATH32
+ else
+ SERVER_PATH=$SERVER_PATH64
+ LD_LIB_PATH_SERVER=$LD_LIB_PATH64
+ fi
+
+ echo "Running $1-bit client with $2-bit servers"
+ echo "$LD_LIB_PATH_SERVER=$LD_LIB_PATH_SERVER"
+ LD_LIBRARY_PATH=$LD_LIB_PATH_SERVER:$LD_LIBRARY_PATH $SERVER_PATH &
+ SERVER_PID=$!
+ LD_LIBRARY_PATH=$LD_LIB_PATH_CLIENT:$LD_LIBRARY_PATH $CLIENT_PATH
+ if [ $? -ne 0 ]; then
+ failed_test_cases+=("$1-bit client with $2-bit servers")
+ fi
+ kill $SERVER_PID
+}
+
+function check_env() {
+ if [ -z ${TEST_NAME+x} ]; then
+ echo "TEST_NAME is unset";
+ exit 1
+ fi
+
+ if [ -z ${CLIENT_PATH32+x} ]; then
+ echo "CLIENT_PATH32 is unset";
+ exit 1
+ fi
+
+ if [ -z ${CLIENT_PATH64+x} ]; then
+ echo "CLIENT_PATH64 is unset";
+ exit 1
+ fi
+
+ if [ -z ${SERVER_PATH32+x} ]; then
+ echo "SERVER_PATH32 is unset";
+ exit 1
+ fi
+
+ if [ -z ${SERVER_PATH64+x} ]; then
+ echo "SERVER_PATH64 is unset";
+ exit 1
+ fi
+}
+
+#usage: run_all_tests server_path32 server_path64 client_path32 client_path64 test_name [-h/-c config/-x lib32/-y ldlib64]
+function run_all_tests() {
+ SERVER_PATH32=$1
+ SERVER_PATH64=$2
+ CLIENT_PATH32=$3
+ CLIENT_PATH64=$4
+ TEST_NAME=$5
+ check_env
+ shift 5
+
+ while getopts hc:x:y: opt;
+ do
+ case $opt in
+ h)
+ usage
+ exit 0
+ ;;
+ c)
+ case $OPTARG in
+ CLIENT64_SERVER64)
+ run_test 64 64
+ ;;
+ CLIENT32_SERVER32)
+ run_test 32 32
+ ;;
+ CLIENT64_SERVER32)
+ run_test 64 32
+ ;;
+ CLIENT32_SERVER64)
+ run_test 32 64
+ ;;
+ *)
+ echo "Error: unknown config value \"$OPTARG\""
+ exit 1
+ ;;
+ esac
+ exit 0
+ ;;
+ x)
+ LD_LIB_PATH32=$OPTARG
+ ;;
+ y)
+ LD_LIB_PATH64=$OPTARG
+ ;;
+ *)
+ echo "Error: unknown param \"$opt\""
+ usage
+ exit 1
+ ;;
+ esac
+ done
+
+ for i in 32 64
+ do
+ for j in 32 64
+ do
+ run_test $i $j
+ done
+ done
+ count_failed_tests=${#failed_test_cases[@]}
+ echo "*********************************************************"
+ echo " $TEST_NAME Final Summary:\n"
+ if [ $count_failed_tests -gt 0 ]; then
+ echo " $TEST_NAME failed for the following cases:\n\t"
+ for each in "${failed_test_cases[@]}"
+ do
+ echo "\t$each"
+ done
+ else
+ echo " $TEST_NAME passed for all cases!"
+ fi
+ echo "*********************************************************"
+
+ exit ${#failed_test_cases[@]}
+}
diff --git a/test/hidl_test/hidl_test_servers.cpp b/test/hidl_test/hidl_test_servers.cpp
index 96683214..31051995 100644
--- a/test/hidl_test/hidl_test_servers.cpp
+++ b/test/hidl_test/hidl_test_servers.cpp
@@ -89,7 +89,7 @@ void signal_handler(int signal) {
}
int main(int /* argc */, char* /* argv */ []) {
- android::hardware::details::setTrebleTestingOverride(true);
+ setenv("TREBLE_TESTING_OVERRIDE", "true", true);
runOnEachServer<ForkServer>();
diff --git a/test/host_test/Android.bp b/test/host_test/Android.bp
index 15c46c35..f7d1fe07 100644
--- a/test/host_test/Android.bp
+++ b/test/host_test/Android.bp
@@ -12,15 +12,6 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
cc_test_host {
name: "hidl-gen-host_test",
defaults: ["hidl-gen-defaults"],
@@ -35,4 +26,5 @@ cc_test_host {
"liblog",
],
srcs: ["main.cpp"],
+ test_suites: ["device-tests"],
}
diff --git a/test/host_utils_test/Android.bp b/test/host_utils_test/Android.bp
index e585162d..adc20199 100644
--- a/test/host_utils_test/Android.bp
+++ b/test/host_utils_test/Android.bp
@@ -12,15 +12,6 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
cc_test_host {
name: "libhidl-gen-host-utils_test",
defaults: ["hidl-gen-defaults"],
@@ -30,4 +21,5 @@ cc_test_host {
"liblog",
],
srcs: ["main.cpp"],
+ test_suites: ["device-tests"],
}
diff --git a/test/java_impl_test/Android.bp b/test/java_impl_test/Android.bp
index b9d274a9..81b13988 100644
--- a/test/java_impl_test/Android.bp
+++ b/test/java_impl_test/Android.bp
@@ -14,21 +14,14 @@
* limitations under the License.
*/
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
java_genrule {
name: "hidl_java_impl_test_gen",
tools: [
"hidl-gen",
],
- srcs: [":android.hardware.tests.baz@1.0_hal"],
+ required: [
+ "android.hardware.tests.baz-V1.0-java",
+ ],
cmd: "$(location hidl-gen) -o $(genDir) -Ljava-impl android.hardware.tests.baz@1.0",
out: [
"Base.java",
diff --git a/test/java_partial_test/Android.bp b/test/java_partial_test/Android.bp
index 64dfe434..3f856af7 100644
--- a/test/java_partial_test/Android.bp
+++ b/test/java_partial_test/Android.bp
@@ -1,12 +1,3 @@
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
java_genrule {
name: "hidl_partial_java_test_gen",
tools: [
diff --git a/test/java_test/Android.bp b/test/java_test/Android.bp
index 1b3f4957..7bebc747 100644
--- a/test/java_test/Android.bp
+++ b/test/java_test/Android.bp
@@ -1,38 +1,8 @@
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
-python_test_host {
- name: "hidl_test_java",
- main: "hidl_test_java.py",
- srcs: ["hidl_test_java.py"],
- test_config: "hidl_test_java.xml",
- target_required: [
- "hidl_test_java_native",
- "hidl_test_java_java",
- ],
- test_suites: [
- "general-tests",
- "vts",
- ],
- test_options: {
- unit_test: false,
- },
-}
-
cc_test {
name: "hidl_test_java_native",
srcs: ["hidl_test_java_native.cpp"],
- cflags: [
- "-Wall",
- "-Werror",
- ],
+ cflags: ["-Wall", "-Werror"],
// Allow dlsym'ing self for statically linked passthrough implementations
ldflags: ["-rdynamic"],
@@ -64,19 +34,6 @@ cc_test {
],
compile_multilib: "both",
- multilib: {
- lib32: {
- suffix: "32",
- },
- lib64: {
- suffix: "64",
- },
- },
- test_suites: [
- "general-tests",
- "vts",
- ],
- auto_gen_config: false,
}
java_test {
@@ -91,9 +48,4 @@ java_test {
"android.hardware.tests.memory-V2.0-java",
"android.hardware.tests.safeunion-V1.0-java",
],
- test_suites: [
- "general-tests",
- "vts",
- ],
- auto_gen_config: false,
}
diff --git a/test/java_test/Android.mk b/test/java_test/Android.mk
new file mode 100644
index 00000000..7e277a42
--- /dev/null
+++ b/test/java_test/Android.mk
@@ -0,0 +1,18 @@
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := hidl_test_java
+LOCAL_MODULE_CLASS := NATIVE_TESTS
+LOCAL_SRC_FILES := hidl_test_java
+
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)/nativetest64
+
+LOCAL_REQUIRED_MODULES := \
+ hidl_test_java_java \
+ hidl_test_java_native
+
+ifneq ($(TARGET_2ND_ARCH),)
+LOCAL_REQUIRED_MODULES += hidl_test_java_native$(TARGET_2ND_ARCH_MODULE_SUFFIX)
+endif
+
+include $(BUILD_PREBUILT)
diff --git a/test/java_test/hidl_test_java b/test/java_test/hidl_test_java
new file mode 100644
index 00000000..fdcb00fc
--- /dev/null
+++ b/test/java_test/hidl_test_java
@@ -0,0 +1,41 @@
+export CLASSPATH=/data/framework/hidl_test_java_java.jar
+export TREBLE_TESTING_OVERRIDE=true
+
+e=0
+for SIZE in 64 32; do
+ native=/data/nativetest${SIZE/32}/hidl_test_java_native/hidl_test_java_native
+
+ if [ -f $native ]; then
+ echo "Testing $SIZE bit native client/server"
+
+ # Test native server with Java client
+ $native -s &
+ sleep 1
+ NATIVE_PID=$!
+ app_process /data/framework com.android.commands.hidl_test_java.HidlTestJava -c \
+ && echo "Java client => native server PASSED" \
+ || (echo "Java client => native server FAILED" && false) || e=1
+
+ kill $NATIVE_PID 2>/dev/null
+
+ # Test Java server with native client
+ app_process /data/framework com.android.commands.hidl_test_java.HidlTestJava -s &
+ NATIVE_PID=$!
+ $native -c \
+ && echo "native client => Java server PASSED" \
+ || (echo "native client => Java server FAILED" && false) || e=1
+
+ kill $NATIVE_PID 2>/dev/null
+ else
+ echo "FAILED: Not running $native because it doesn't exist."
+ e=1
+ fi
+done
+
+echo
+echo "Summary: $e"
+[ $e -eq 0 ] && echo "All tests PASSED." || echo "Test(s) FAILED."
+
+export TREBLE_TESTING_OVERRIDE=false
+
+exit $e
diff --git a/test/java_test/hidl_test_java.py b/test/java_test/hidl_test_java.py
deleted file mode 100644
index ccafd883..00000000
--- a/test/java_test/hidl_test_java.py
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/usr/bin/env python3
-#
-# Copyright (C) 2020 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-import os
-import subprocess
-import unittest
-import time
-
-def run_cmd(cmd, ignore_error=False):
- print("Running command:", cmd)
- p = subprocess.Popen(cmd, shell=True)
- p.communicate()
- if not ignore_error and p.returncode:
- raise subprocess.CalledProcessError(p.returncode, cmd)
- return p.returncode
-
-class TestHidlJava(unittest.TestCase):
- pass
-
-def cleanup(cmd):
- binary = cmd.split()[0]
- run_cmd("adb shell killall %s >/dev/null 2>&1" % binary, ignore_error=True)
-
-def make_test(client, server):
- def test(self):
- try:
- env = "CLASSPATH=/data/framework/hidl_test_java_java.jar"
-
- cleanup(client)
- cleanup(server)
- run_cmd("adb shell \"( %s %s -s ) </dev/null >/dev/null 2>&1 &\"" % (env, server))
- time.sleep(2)
- run_cmd("adb shell %s %s -c" % (env, client))
- finally:
- cleanup(client)
- cleanup(server)
- return test
-
-def has_bitness(bitness):
- return 0 == run_cmd("echo '[[ \"$(getprop ro.product.cpu.abilist%s)\" != \"\" ]]' | adb shell sh" % bitness, ignore_error=True)
-
-if __name__ == '__main__':
- cmds = ["app_process /data/framework com.android.commands.hidl_test_java.HidlTestJava"]
-
- if has_bitness(32):
- cmds += ["/data/nativetest/hidl_test_java_native/hidl_test_java_native"]
-
- if has_bitness(64):
- cmds += ["/data/nativetest64/hidl_test_java_native/hidl_test_java_native"]
-
- assert len(cmds) >= 2
-
- def short_name(cmd):
- if "app" in cmd:
- return "java"
- if "64" in cmd:
- return "64"
- return "32"
-
- for client in cmds:
- for server in cmds:
- test_name = 'test_%s_to_%s' % (short_name(client), short_name(server))
- test = make_test(client, server)
- setattr(TestHidlJava, test_name, test)
-
- suite = unittest.TestLoader().loadTestsFromTestCase(TestHidlJava)
- unittest.TextTestRunner(verbosity=2).run(suite)
diff --git a/test/java_test/hidl_test_java.xml b/test/java_test/hidl_test_java.xml
deleted file mode 100644
index c2146a65..00000000
--- a/test/java_test/hidl_test_java.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2020 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<configuration description="Runs HIDL Java on-device integration tests.">
- <option name="test-suite-tag" value="apct" />
- <option name="test-suite-tag" value="apct-native" />
-
- <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer"/>
-
- <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
- <!-- We would like to abort, but currently there is not a simple way to specify installation of both bitnesses of targets. -->
- <option name="abort-on-push-failure" value="false"/>
-
- <option name="push" value="hidl_test_java_native32->/data/nativetest/hidl_test_java_native/hidl_test_java_native" />
- <option name="push" value="hidl_test_java_native64->/data/nativetest64/hidl_test_java_native/hidl_test_java_native" />
-
- <option name="push" value="hidl_test_java_java.jar->/data/framework/hidl_test_java_java.jar" />
-
- <option name="cleanup" value="true" />
- </target_preparer>
-
- <test class="com.android.tradefed.testtype.python.PythonBinaryHostTest" >
- <option name="par-file-name" value="hidl_test_java" />
- <option name="test-timeout" value="2m" />
- </test>
-</configuration>
-
diff --git a/test/java_test/hidl_test_java_native.cpp b/test/java_test/hidl_test_java_native.cpp
index 9827f072..4c479f23 100644
--- a/test/java_test/hidl_test_java_native.cpp
+++ b/test/java_test/hidl_test_java_native.cpp
@@ -23,9 +23,9 @@
#include <android/hardware/tests/baz/1.0/IBaz.h>
#include <android/hardware/tests/memory/2.0/IMemoryInterface.h>
#include <android/hardware/tests/memory/2.0/types.h>
+#include <android/hardware/tests/safeunion/1.0/IOtherInterface.h>
#include <android/hardware/tests/safeunion/1.0/ISafeUnion.h>
#include <android/hidl/allocator/1.0/IAllocator.h>
-#include <android/hidl/manager/1.0/IServiceManager.h>
#include <hidlmemory/mapping.h>
#include <hidl/LegacySupport.h>
@@ -44,6 +44,7 @@ using ::android::hardware::tests::baz::V1_0::IBaz;
using ::android::hardware::tests::baz::V1_0::IBazCallback;
using ::android::hardware::tests::memory::V2_0::IMemoryInterface;
using ::android::hardware::tests::memory::V2_0::TwoMemory;
+using ::android::hardware::tests::safeunion::V1_0::IOtherInterface;
using ::android::hardware::tests::safeunion::V1_0::ISafeUnion;
using ::android::hardware::hidl_array;
@@ -82,6 +83,16 @@ Return<void> BazCallback::hey() {
return Void();
}
+struct OtherInterface : public IOtherInterface {
+ Return<void> concatTwoStrings(const hidl_string& a, const hidl_string& b,
+ concatTwoStrings_cb _hidl_cb) override {
+ hidl_string result = std::string(a) + std::string(b);
+ _hidl_cb(result);
+
+ return Void();
+ }
+};
+
struct MemoryInterface : public IMemoryInterface {
MemoryInterface() {
sp<IAllocator> ashmem = IAllocator::getService("ashmem");
@@ -211,6 +222,7 @@ struct HidlEnvironment : public ::testing::Environment {
struct HidlTest : public ::testing::Test {
sp<IBaz> baz;
sp<ISafeUnion> safeunionInterface;
+ sp<IOtherInterface> otherInterface;
void SetUp() override {
using namespace ::android::hardware;
@@ -224,6 +236,11 @@ struct HidlTest : public ::testing::Test {
safeunionInterface = ISafeUnion::getService();
CHECK(safeunionInterface != nullptr);
CHECK(safeunionInterface->isRemote());
+
+ ::android::hardware::details::waitForHwService(IOtherInterface::descriptor, "default");
+ otherInterface = IOtherInterface::getService();
+ CHECK(otherInterface != nullptr);
+ CHECK(otherInterface->isRemote());
}
void TearDown() override {
@@ -278,12 +295,6 @@ TEST_F(HidlTest, BazSomeOtherBaseMethodTest) {
}
TEST_F(HidlTest, SomeOtherBaseMethodInvalidString) {
- Return<bool> isJava = baz->isJava();
- ASSERT_TRUE(isJava.isOk());
- if (!isJava) {
- GTEST_SKIP() << "Test only applies to Java";
- }
-
IBase::Foo foo {
.y = {
.s = "\xff",
@@ -758,7 +769,7 @@ TEST_F(HidlTest, TwowayMethodOnewayEnabledTest) {
EXPECT_EQ(::android::OK, request.writeInterfaceToken(IBaz::descriptor));
EXPECT_EQ(::android::OK, request.writeInt64(1234));
// IBaz::doThatAndReturnSomething is two-way but we call it using FLAG_ONEWAY.
- EXPECT_EQ(::android::OK, binder->transact(19 /*doThatAndReturnSomething*/, request, &reply,
+ EXPECT_EQ(::android::OK, binder->transact(18 /*doThatAndReturnSomething*/, request, &reply,
IBinder::FLAG_ONEWAY));
::android::hardware::Status status;
@@ -769,9 +780,6 @@ TEST_F(HidlTest, TwowayMethodOnewayEnabledTest) {
}
TEST_F(HidlTest, OnewayMethodOnewayDisabledTest) {
- Return<bool> isJava = baz->isJava();
- ASSERT_TRUE(isJava.isOk());
-
using ::android::hardware::IBinder;
using ::android::hardware::Parcel;
@@ -785,10 +793,8 @@ TEST_F(HidlTest, OnewayMethodOnewayDisabledTest) {
// Expect UNKNOWN_ERROR because the JNI class JHwBinder always sets
// the reply to UNKNOWN_ERROR for two-way transactions if the
// transaction itself did not send a reply.
- //
- // C++ does not specifically check this error case.
- (isJava ? ::android::UNKNOWN_ERROR : 0),
- binder->transact(18 /*doThis*/, request, &reply, 0 /* Not FLAG_ONEWAY */));
+ ::android::UNKNOWN_ERROR,
+ binder->transact(17 /*doThis*/, request, &reply, 0 /* Not FLAG_ONEWAY */));
EXPECT_OK(baz->ping()); // still works
}
@@ -960,14 +966,17 @@ TEST_F(HidlTest, SafeUnionInterfaceTest) {
}));
}));
- using android::hardware::defaultServiceManager;
- using android::hardware::interfacesEqual;
-
+ // Same-process interface calls are not supported in Java, so we use
+ // a safe_union instance bound to this (client) process instead of
+ // safeunionInterface to exercise this test-case. Ref: b/110957763.
InterfaceTypeSafeUnion safeUnion;
- safeUnion.c(defaultServiceManager());
+ safeUnion.c(otherInterface);
EXPECT_EQ(InterfaceTypeSafeUnion::hidl_discriminator::c, safeUnion.getDiscriminator());
- EXPECT_TRUE(interfacesEqual(safeUnion.c(), defaultServiceManager()));
+ EXPECT_OK(safeUnion.c()->concatTwoStrings(
+ hidl_string(testStringA), hidl_string(testStringB), [&](const hidl_string& result) {
+ EXPECT_EQ(testStringA + testStringB, std::string(result));
+ }));
native_handle_delete(h);
}
@@ -1194,12 +1203,6 @@ void expectRangeEqual(const T* t, uint8_t byte) {
}
TEST_F(HidlTest, UninitTest) {
- Return<bool> isJava = baz->isJava();
- ASSERT_TRUE(isJava.isOk());
- if (!isJava) {
- GTEST_SKIP() << "Test only applies to Java";
- }
-
IBase::Foo foo;
foo.x = 1;
foo.y = {0, ""};
@@ -1223,8 +1226,9 @@ TEST_F(HidlTest, UninitTest) {
}
int main(int argc, char **argv) {
+ setenv("TREBLE_TESTING_OVERRIDE", "true", true);
+
using namespace android::hardware;
- details::setTrebleTestingOverride(true);
const char *me = argv[0];
@@ -1278,6 +1282,10 @@ int main(int argc, char **argv) {
status = registerPassthroughServiceImplementation<ISafeUnion>();
CHECK(status == ::android::OK) << "ISafeUnion didn't register";
+ sp<IOtherInterface> otherInterface = new OtherInterface();
+ status = otherInterface->registerAsService();
+ CHECK(status == ::android::OK) << "IOtherInterface didn't register";
+
sp<IMemoryInterface> memoryInterface = new MemoryInterface();
status = memoryInterface->registerAsService();
CHECK(status == ::android::OK) << "IMemoryInterface didn't register";
diff --git a/test/java_test/src/com/android/commands/hidl_test_java/HidlTestJava.java b/test/java_test/src/com/android/commands/hidl_test_java/HidlTestJava.java
index a0311fed..db6cd5aa 100644
--- a/test/java_test/src/com/android/commands/hidl_test_java/HidlTestJava.java
+++ b/test/java_test/src/com/android/commands/hidl_test_java/HidlTestJava.java
@@ -20,34 +20,35 @@ import static android.system.OsConstants.MAP_SHARED;
import static android.system.OsConstants.PROT_READ;
import static android.system.OsConstants.PROT_WRITE;
+import android.hidl.manager.V1_0.IServiceManager;
import android.hardware.tests.baz.V1_0.IBase;
import android.hardware.tests.baz.V1_0.IBaz;
+import android.hardware.tests.baz.V1_0.IQuux;
import android.hardware.tests.baz.V1_0.IBaz.MyHandle;
import android.hardware.tests.baz.V1_0.IBaz.NestedStruct;
import android.hardware.tests.baz.V1_0.IBazCallback;
-import android.hardware.tests.baz.V1_0.IQuux;
import android.hardware.tests.memory.V2_0.IMemoryInterface;
import android.hardware.tests.memory.V2_0.TwoMemory;
+import android.hardware.tests.safeunion.V1_0.IOtherInterface;
import android.hardware.tests.safeunion.V1_0.ISafeUnion;
import android.hardware.tests.safeunion.V1_0.ISafeUnion.HandleTypeSafeUnion;
import android.hardware.tests.safeunion.V1_0.ISafeUnion.InterfaceTypeSafeUnion;
import android.hardware.tests.safeunion.V1_0.ISafeUnion.LargeSafeUnion;
import android.hardware.tests.safeunion.V1_0.ISafeUnion.SmallSafeUnion;
-import android.hidl.manager.V1_0.IServiceManager;
-import android.os.DeadObjectException;
import android.os.HidlMemory;
import android.os.HidlMemoryUtil;
-import android.os.HidlSupport;
import android.os.HwBinder;
import android.os.HwParcel;
import android.os.IBinder;
import android.os.IHwBinder;
import android.os.NativeHandle;
import android.os.RemoteException;
+import android.os.HidlSupport;
import android.os.SharedMemory;
import android.system.ErrnoException;
import android.system.Os;
import android.util.Log;
+
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
@@ -75,8 +76,6 @@ public final class HidlTestJava {
}
public int run(String[] args) throws RemoteException, IOException, ErrnoException {
- HwBinder.setTrebleTestingOverride(true);
-
if (args[0].equals("-c")) {
client();
} else if (args[0].equals("-s")) {
@@ -368,6 +367,8 @@ public final class HidlTestJava {
String testStringA = "Hello";
String testStringB = "World";
+ IOtherInterface otherInterface = IOtherInterface.getService();
+
ArrayList<NativeHandle> testHandlesVector = new ArrayList<>();
for (int i = 0; i < 128; i++) {
testHandlesVector.add(new NativeHandle());
@@ -378,10 +379,11 @@ public final class HidlTestJava {
ExpectTrue(safeUnion.getDiscriminator() == InterfaceTypeSafeUnion.hidl_discriminator.b);
ExpectDeepEq(testArray, safeUnion.b());
- IServiceManager anInterface = IServiceManager.getService();
- safeUnion.c(anInterface);
+ safeUnion.c(otherInterface);
ExpectTrue(safeUnion.getDiscriminator() == InterfaceTypeSafeUnion.hidl_discriminator.c);
- ExpectTrue(HidlSupport.interfacesEqual(anInterface, safeUnion.c()));
+ ExpectTrue(HidlSupport.interfacesEqual(otherInterface, safeUnion.c()));
+ String result = safeUnion.c().concatTwoStrings(testStringA, testStringB);
+ Expect(result, testStringA + testStringB);
safeUnion = safeunionInterface.setInterfaceD(safeUnion, testStringA);
ExpectTrue(safeUnion.getDiscriminator() == InterfaceTypeSafeUnion.hidl_discriminator.d);
@@ -599,18 +601,6 @@ public final class HidlTestJava {
}
{
- // Test proper exceptions are thrown
- try {
- // not in manifest, so won't wait
- IBase proxy = IBase.getService("this-doesn't-exist", true /*retry*/);
- // this should never run
- ExpectTrue(false);
- } catch (Exception e) {
- ExpectTrue(e instanceof NoSuchElementException);
- }
- }
-
- {
// Test access through base interface binder.
IBase baseProxy = IBase.getService();
baseProxy.someBaseMethod();
@@ -651,7 +641,7 @@ public final class HidlTestJava {
request.writeInterfaceToken(IBaz.kInterfaceName);
request.writeInt64(1234);
// IBaz::doThatAndReturnSomething is not oneway but we call it using FLAG_ONEWAY.
- binder.transact(19 /*doThatAndReturnSomething*/, request, reply, IBinder.FLAG_ONEWAY);
+ binder.transact(18 /*doThatAndReturnSomething*/, request, reply, IBinder.FLAG_ONEWAY);
try {
reply.verifySuccess();
@@ -673,16 +663,11 @@ public final class HidlTestJava {
request.writeInterfaceToken(IBaz.kInterfaceName);
request.writeFloat(1.0f);
// IBaz::doThis is oneway but we call it without using FLAG_ONEWAY.
- // This does not raise an exception in C++ because
+ // This does not raise an exception because
// IPCThreadState::executeCommand for BR_TRANSACTION sends an empty
// reply for two-way transactions if the transaction itself did not
// send a reply.
- try {
- binder.transact(18 /*doThis*/, request, reply, 0 /* Not FLAG_ONEWAY */);
- ExpectTrue(!proxy.isJava());
- } catch (RemoteException e) {
- ExpectTrue(proxy.isJava());
- }
+ binder.transact(17 /*doThis*/, request, reply, 0 /* Not FLAG_ONEWAY */);
proxy.ping();
}
@@ -941,7 +926,7 @@ public final class HidlTestJava {
proxy.callMe(cb);
ExpectTrue(cb.wasCalled());
- ExpectTrue(proxy.useAnEnum(IBaz.SomeEnum.goober) == IBaz.SomeEnum.quux);
+ ExpectTrue(proxy.useAnEnum(IBaz.SomeEnum.goober) == -64);
{
String[] stringArray = new String[3];
@@ -1005,12 +990,9 @@ public final class HidlTestJava {
ExpectTrue(!t1.equals(t2));
}
- // server currently only implements this in C++
- if (!proxy.isJava()) {
- ArrayList<NestedStruct> structs = proxy.getNestedStructs();
- ExpectTrue(structs.size() == 5);
- ExpectTrue(structs.get(1).matrices.size() == 6);
- }
+ ArrayList<NestedStruct> structs = proxy.getNestedStructs();
+ ExpectTrue(structs.size() == 5);
+ ExpectTrue(structs.get(1).matrices.size() == 6);
{
IBaz.Everything e = new IBaz.Everything();
@@ -1214,21 +1196,17 @@ public final class HidlTestJava {
IBaz baz = IBaz.getService();
ExpectTrue(baz != null);
IBaz.StructWithInterface swi = new IBaz.StructWithInterface();
- swi.iface = IServiceManager.getService();
+ swi.dummy = baz;
swi.number = 12345678;
IBaz.StructWithInterface swi_back = baz.haveSomeStructWithInterface(swi);
ExpectTrue(swi_back != null);
- ExpectTrue(swi_back.iface != null);
- ExpectTrue(HidlSupport.interfacesEqual(swi.iface, swi_back.iface));
+ ExpectTrue(swi_back.dummy != null);
+ ExpectTrue(HidlSupport.interfacesEqual(baz, swi_back.dummy));
ExpectTrue(swi_back.number == 12345678);
}
runClientSafeUnionTests();
-
- // currently no Java implementation of this
- if (!proxy.isJava()) {
- runClientMemoryTests();
- }
+ runClientMemoryTests();
// --- DEATH RECIPIENT TESTING ---
// This must always be done last, since it will kill the native server process
@@ -1247,7 +1225,7 @@ public final class HidlTestJava {
ExpectTrue(proxy.unlinkToDeath(recipient2));
try {
proxy.dieNow();
- } catch (DeadObjectException e) {
+ } catch (RemoteException e) {
// Expected
}
ExpectTrue(recipient1.waitUntilServiceDied(2000 /*timeoutMillis*/));
@@ -1258,11 +1236,6 @@ public final class HidlTestJava {
class Baz extends IBaz.Stub {
// from IBase
- public boolean isJava() {
- Log.d(TAG, "Baz isJava");
- return true;
- }
-
public void someBaseMethod() {
Log.d(TAG, "Baz someBaseMethod");
}
@@ -1481,7 +1454,9 @@ public final class HidlTestJava {
}
}
- public void dieNow() { System.exit(0); }
+ public void dieNow() {
+ // Not tested in Java
+ }
public byte useAnEnum(byte zzz) {
Log.d(TAG, "useAnEnum " + zzz);
@@ -1669,7 +1644,7 @@ public final class HidlTestJava {
@Override
public InterfaceTypeSafeUnion setInterfaceC(
- InterfaceTypeSafeUnion safeUnion, android.hidl.base.V1_0.IBase c) {
+ InterfaceTypeSafeUnion safeUnion, IOtherInterface c) {
Log.d(TAG, "SERVER: setInterfaceC(" + c + ")");
safeUnion.c(c);
@@ -1743,6 +1718,13 @@ public final class HidlTestJava {
}
}
+ class OtherInterface extends IOtherInterface.Stub {
+ @Override
+ public String concatTwoStrings(String a, String b) {
+ return a.concat(b);
+ }
+ }
+
private void server() throws RemoteException {
HwBinder.configureRpcThreadpool(1, true);
@@ -1759,6 +1741,9 @@ public final class HidlTestJava {
SafeUnion safeunionInterface = new SafeUnion();
safeunionInterface.registerAsService("default");
+ OtherInterface otherInterface = new OtherInterface();
+ otherInterface.registerAsService("default");
+
HwBinder.joinRpcThreadpool();
}
}
diff --git a/test/lazy_test/Android.bp b/test/lazy_test/Android.bp
index 418f84ad..a2c67cb7 100644
--- a/test/lazy_test/Android.bp
+++ b/test/lazy_test/Android.bp
@@ -1,19 +1,9 @@
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
cc_test {
name: "hidl_lazy_test",
defaults: ["hidl-gen-defaults"],
srcs: ["hidl_lazy_test.cpp"],
shared_libs: [
- "android.hardware.tests.lazy@1.1",
"libbase",
"libhidl-gen-utils",
"libhidlbase",
@@ -35,7 +25,7 @@ cc_binary {
srcs: ["hidl_lazy_test_server.cpp"],
shared_libs: [
- "android.hardware.tests.lazy@1.1",
+ "android.hardware.tests.lazy@1.0",
"libbase",
"libhidlbase",
"libutils",
diff --git a/test/lazy_test/hidl_lazy_test.cpp b/test/lazy_test/hidl_lazy_test.cpp
index 0a1aba92..9becc354 100644
--- a/test/lazy_test/hidl_lazy_test.cpp
+++ b/test/lazy_test/hidl_lazy_test.cpp
@@ -23,7 +23,6 @@
#include <unistd.h>
-#include <android/hardware/tests/lazy/1.1/ILazy.h>
#include <android/hidl/manager/1.2/IServiceManager.h>
#include <gtest/gtest.h>
#include <hidl-util/FqInstance.h>
@@ -37,15 +36,14 @@ using ::android::sp;
using ::android::hardware::hidl_string;
using ::android::hardware::hidl_vec;
using ::android::hardware::IPCThreadState;
-using ::android::hardware::tests::lazy::V1_1::ILazy;
using ::android::hidl::base::V1_0::IBase;
using ::android::hidl::manager::V1_2::IServiceManager;
-static std::vector<FqInstance> gInstances;
+static FqInstance gInstance;
-sp<IBase> getHal(const FqInstance& instance) {
- return ::android::hardware::details::getRawServiceInternal(instance.getFqName().string(),
- instance.getInstance(),
+sp<IBase> getHal() {
+ return ::android::hardware::details::getRawServiceInternal(gInstance.getFqName().string(),
+ gInstance.getInstance(),
true /*retry*/, false /*getStub*/);
}
@@ -57,13 +55,10 @@ class HidlLazyTest : public ::testing::Test {
manager = IServiceManager::getService();
ASSERT_NE(manager, nullptr);
- for (const auto& instance : gInstances) {
- ASSERT_FALSE(isServiceRunning(instance))
- << "Service '" << instance.string()
- << "' is already running. Please ensure this "
- << "service is implemented as a lazy HAL, then kill all "
- << "clients of this service and try again.";
- }
+ ASSERT_FALSE(isServiceRunning())
+ << "Service '" << gInstance.string() << "' is already running. Please ensure this "
+ << "service is implemented as a lazy HAL, then kill all "
+ << "clients of this service and try again.";
}
static constexpr size_t SHUTDOWN_WAIT_TIME = 10;
@@ -72,24 +67,22 @@ class HidlLazyTest : public ::testing::Test {
<< "service has shut down." << std::endl;
IPCThreadState::self()->flushCommands();
sleep(SHUTDOWN_WAIT_TIME);
- for (const auto& instance : gInstances) {
- ASSERT_FALSE(isServiceRunning(instance))
- << "Service failed to shutdown " << instance.string();
- }
+ ASSERT_FALSE(isServiceRunning()) << "Service failed to shutdown.";
}
- bool isServiceRunning(const FqInstance& instance) {
+ bool isServiceRunning() {
bool isRunning = false;
- EXPECT_TRUE(manager->listByInterface(instance.getFqName().string(),
- [&](const hidl_vec<hidl_string>& instanceNames) {
- for (const hidl_string& name : instanceNames) {
- if (name == instance.getInstance()) {
- isRunning = true;
- break;
- }
+ EXPECT_TRUE(
+ manager->listByInterface(gInstance.getFqName().string(),
+ [&isRunning](const hidl_vec<hidl_string>& instanceNames) {
+ for (const hidl_string& name : instanceNames) {
+ if (name == gInstance.getInstance()) {
+ isRunning = true;
+ break;
}
- })
- .isOk());
+ }
+ })
+ .isOk());
return isRunning;
}
};
@@ -98,11 +91,9 @@ static constexpr size_t NUM_IMMEDIATE_GET_UNGETS = 100;
TEST_F(HidlLazyTest, GetUnget) {
for (size_t i = 0; i < NUM_IMMEDIATE_GET_UNGETS; i++) {
IPCThreadState::self()->flushCommands();
- for (const auto& instance : gInstances) {
- sp<IBase> hal = getHal(instance);
- ASSERT_NE(hal.get(), nullptr);
- EXPECT_TRUE(hal->ping().isOk());
- }
+ sp<IBase> hal = getHal();
+ ASSERT_NE(hal.get(), nullptr);
+ EXPECT_TRUE(hal->ping().isOk());
}
}
@@ -114,17 +105,16 @@ static std::vector<size_t> waitTimes(size_t numTimes, size_t maxWait) {
return times;
}
-static void testWithTimes(const std::vector<size_t>& waitTimes, const FqInstance& instance) {
+static void testWithTimes(const std::vector<size_t>& waitTimes) {
std::cout << "Note runtime expected from sleeps: "
<< std::accumulate(waitTimes.begin(), waitTimes.end(), 0) << " second(s)."
<< std::endl;
for (size_t sleepTime : waitTimes) {
IPCThreadState::self()->flushCommands();
- std::cout << "Thread for " << instance.string() << " waiting " << sleepTime
- << " while not holding HAL." << std::endl;
+ std::cout << "Thread waiting " << sleepTime << " while not holding HAL." << std::endl;
sleep(sleepTime);
- sp<IBase> hal = getHal(instance);
+ sp<IBase> hal = getHal();
ASSERT_NE(hal.get(), nullptr);
ASSERT_TRUE(hal->ping().isOk());
}
@@ -142,8 +132,7 @@ TEST_F(HidlLazyTest, GetWithWaitConcurrent) {
std::vector<std::thread> threads(NUM_CONCURRENT_THREADS);
for (size_t i = 0; i < threads.size(); i++) {
- const FqInstance& instance = gInstances[i % gInstances.size()];
- threads[i] = std::thread(testWithTimes, threadWaitTimes[i], instance);
+ threads[i] = std::thread(testWithTimes, threadWaitTimes[i]);
}
for (auto& thread : threads) {
@@ -151,43 +140,25 @@ TEST_F(HidlLazyTest, GetWithWaitConcurrent) {
}
}
-TEST_F(HidlLazyTest, ActiveServicesCallbackTest) {
- sp<ILazy> lazy;
-
- for (const auto& instance : gInstances) {
- sp<IBase> hal = getHal(instance);
- EXPECT_NE(hal, nullptr);
- lazy = ILazy::castFrom(hal);
- if (lazy) break;
- }
- if (!lazy) GTEST_SKIP() << "Services under test do not include ILazy";
-
- ASSERT_TRUE(lazy->setCustomActiveServicesCallback().isOk());
-}
-
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
srand(time(nullptr));
- std::vector<std::string> fqInstances;
+ std::string fqInstance;
if (argc == 1) {
- fqInstances.push_back("android.hardware.tests.lazy@1.0::ILazy/default1");
- fqInstances.push_back("android.hardware.tests.lazy@1.0::ILazy/default2");
+ fqInstance = "android.hardware.tests.lazy@1.0::ILazy/default";
+ } else if (argc == 2) {
+ fqInstance = argv[1];
} else {
- for (size_t arg = 1; arg < argc; arg++) {
- fqInstances.push_back(argv[arg]);
- }
+ std::cerr << "Usage: lazy_test fqinstance" << std::endl;
+ return 1;
}
- for (const std::string& instance : fqInstances) {
- FqInstance fqInstance;
- if (!fqInstance.setTo(instance)) {
- std::cerr << "Invalid fqinstance: " << instance << std::endl;
- return 1;
- }
- gInstances.push_back(fqInstance);
+ if (!gInstance.setTo(fqInstance)) {
+ std::cerr << "Invalid fqinstance: " << fqInstance << std::endl;
+ return 1;
}
return RUN_ALL_TESTS();
diff --git a/test/lazy_test/hidl_lazy_test_server.cpp b/test/lazy_test/hidl_lazy_test_server.cpp
index 50f8b0fd..f1b381c2 100644
--- a/test/lazy_test/hidl_lazy_test_server.cpp
+++ b/test/lazy_test/hidl_lazy_test_server.cpp
@@ -15,7 +15,7 @@
*/
#include <android-base/logging.h>
-#include <android/hardware/tests/lazy/1.1/ILazy.h>
+#include <android/hardware/tests/lazy/1.0/ILazy.h>
#include <hidl/HidlLazyUtils.h>
#include <hidl/HidlTransportSupport.h>
@@ -23,46 +23,13 @@ using android::OK;
using android::hardware::configureRpcThreadpool;
using android::hardware::joinRpcThreadpool;
using android::hardware::LazyServiceRegistrar;
-using android::hardware::tests::lazy::V1_1::ILazy;
+using android::hardware::tests::lazy::V1_0::ILazy;
-class Lazy : public ILazy {
- public:
- ::android::hardware::Return<void> setCustomActiveServicesCallback();
-};
-
-::android::hardware::Return<void> Lazy::setCustomActiveServicesCallback() {
- auto lazyRegistrar = android::hardware::LazyServiceRegistrar::getInstance();
- lazyRegistrar.setActiveServicesCallback([lazyRegistrar](bool hasClients) mutable -> bool {
- if (hasClients) {
- return false;
- }
-
- // Unregister all services
- if (!lazyRegistrar.tryUnregister()) {
- // Prevent shutdown (test will fail)
- return true;
- }
-
- // Re-register all services
- lazyRegistrar.reRegister();
-
- // Unregister again before shutdown
- if (!lazyRegistrar.tryUnregister()) {
- // Prevent shutdown (test will fail)
- return true;
- }
-
- exit(EXIT_SUCCESS);
- // Unreachable
- });
-
- return ::android::hardware::Status::ok();
-}
+class Lazy : public ILazy {};
int main() {
configureRpcThreadpool(1, true /*willJoin*/);
- CHECK(OK == LazyServiceRegistrar::getInstance().registerService(new Lazy, "default1"));
- CHECK(OK == LazyServiceRegistrar::getInstance().registerService(new Lazy, "default2"));
+ CHECK(OK == LazyServiceRegistrar::getInstance().registerService(new Lazy, "default"));
joinRpcThreadpool();
return EXIT_FAILURE; // should not reach
}
diff --git a/test/lazy_test/hidl_lazy_test_server.rc b/test/lazy_test/hidl_lazy_test_server.rc
index 54300f80..00a52375 100644
--- a/test/lazy_test/hidl_lazy_test_server.rc
+++ b/test/lazy_test/hidl_lazy_test_server.rc
@@ -1,8 +1,5 @@
service hidl_lazy_test_server /system_ext/bin/hidl_lazy_test_server
- interface android.hardware.tests.lazy@1.0::ILazy default1
- interface android.hardware.tests.lazy@1.0::ILazy default2
- interface android.hardware.tests.lazy@1.1::ILazy default1
- interface android.hardware.tests.lazy@1.1::ILazy default2
+ interface android.hardware.tests.lazy@1.0::ILazy default
user nobody
group nobody
oneshot
diff --git a/test/lazy_test/hidl_lazy_test_server.xml b/test/lazy_test/hidl_lazy_test_server.xml
index 0a88ed42..e5e071e4 100644
--- a/test/lazy_test/hidl_lazy_test_server.xml
+++ b/test/lazy_test/hidl_lazy_test_server.xml
@@ -2,7 +2,6 @@
<hal format="hidl">
<name>android.hardware.tests.lazy</name>
<transport>hwbinder</transport>
- <fqname>@1.1::ILazy/default1</fqname>
- <fqname>@1.1::ILazy/default2</fqname>
+ <fqname>@1.0::ILazy/default</fqname>
</hal>
</manifest>
diff --git a/test/run_all_device_tests.sh b/test/run_all_device_tests.sh
new file mode 100755
index 00000000..4d8f0b32
--- /dev/null
+++ b/test/run_all_device_tests.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+
+function run() {
+ local FAILED_TESTS=()
+
+ # Tests directly relevant to HIDL infrustructure but aren't
+ # located in system/tools/hidl
+ local RELATED_RUNTIME_TESTS=(\
+ libhidl_test \
+ )
+
+ local RUN_TIME_TESTS=(\
+ libhidl-gen-utils_test \
+ )
+ RUN_TIME_TESTS+=(${RELATED_RUNTIME_TESTS[@]})
+
+ local SCRIPT_TESTS=(\
+ hidl_test\
+ hidl_test_java\
+ fmq_test\
+ )
+
+ $ANDROID_BUILD_TOP/build/soong/soong_ui.bash --make-mode -j \
+ ${RUN_TIME_TESTS[*]} ${SCRIPT_TESTS[*]} || exit 1
+
+ # TODO(b/129507417): build with supported configurations
+ mkdir -p $ANDROID_PRODUCT_OUT/data/framework/hidl_test_java.jar || exit 1
+ cp $ANDROID_PRODUCT_OUT/testcases/hidl_test_java_java/*/hidl_test_java_java.jar \
+ $ANDROID_PRODUCT_OUT/data/framework/hidl_test_java_java.jar || exit 1
+
+ adb sync data || exit 1
+
+ local BITNESS=("nativetest" "nativetest64")
+
+ for test in ${RUN_TIME_TESTS[@]}; do
+ for bits in ${BITNESS[@]}; do
+ echo $bits $test
+ adb shell /data/$bits/$test/$test ||
+ FAILED_TESTS+=("$bits:$test")
+ done
+ done
+
+ for test in ${SCRIPT_TESTS[@]}; do
+ echo $test
+ adb shell /data/nativetest64/$test ||
+ FAILED_TESTS+=("$test")
+ done
+
+ echo
+ echo ===== ALL DEVICE TESTS SUMMARY =====
+ echo
+ if [ ${#FAILED_TESTS[@]} -gt 0 ]; then
+ for failed in ${FAILED_TESTS[@]}; do
+ echo "FAILED TEST: $failed"
+ done
+ exit 1
+ else
+ echo "SUCCESS"
+ fi
+}
+
+run \ No newline at end of file
diff --git a/test/run_tradefed_incompatible_tests.sh b/test/run_all_host_tests.sh
index e21985af..6542d6f0 100755
--- a/test/run_tradefed_incompatible_tests.sh
+++ b/test/run_all_host_tests.sh
@@ -3,14 +3,27 @@
function run() {
local FAILED_TESTS=()
- # the linter test requires having the source tree available in order
- # to run, so it isn't using TEST_MAPPING/tradefed/etc
+ local COMPILE_TIME_TESTS=(\
+ hidl_hash_test \
+ hidl2aidl_test \
+ hidl_error_test \
+ hidl_export_test \
+ hidl_format_test \
+ hidl_cpp_impl_test \
+ hidl_java_impl_test \
+ hidl_system_api_test \
+ android.hardware.tests.foo@1.0-vts.driver \
+ android.hardware.tests.foo@1.0-vts.profiler)
+
local RUN_TIME_TESTS=(\
+ libhidl-gen-utils_test \
+ libhidl-gen-host-utils_test \
+ hidl-gen-host_test \
hidl-lint_test \
)
$ANDROID_BUILD_TOP/build/soong/soong_ui.bash --make-mode -j \
- ${RUN_TIME_TESTS[*]} || return
+ ${COMPILE_TIME_TESTS[*]} ${RUN_TIME_TESTS[*]} || return
local BITNESS=("nativetest" "nativetest64")
diff --git a/test/system_api_test/Android.bp b/test/system_api_test/Android.bp
index 95163e6c..fff313af 100644
--- a/test/system_api_test/Android.bp
+++ b/test/system_api_test/Android.bp
@@ -13,15 +13,6 @@
// limitations under the License.
// hidl-generated libs should only depend on @SystemApi
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
java_library {
name: "hidl_system_api_test",
sdk_version: "system_current",
diff --git a/test/utils_test/Android.bp b/test/utils_test/Android.bp
index 8232bc8c..d1aa2a4c 100644
--- a/test/utils_test/Android.bp
+++ b/test/utils_test/Android.bp
@@ -12,21 +12,11 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
cc_test {
name: "libhidl-gen-utils_test",
defaults: ["hidl-gen-defaults"],
host_supported: true,
shared_libs: ["libhidl-gen-utils"],
- static_libs: ["libgmock"],
srcs: ["main.cpp"],
test_suites: ["general-tests"],
}
diff --git a/test/utils_test/main.cpp b/test/utils_test/main.cpp
index 41185c22..0d88d263 100644
--- a/test/utils_test/main.cpp
+++ b/test/utils_test/main.cpp
@@ -18,14 +18,11 @@
#include <hidl-util/FqInstance.h>
-#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <vector>
using ::android::FqInstance;
using ::android::FQName;
-using ::testing::Optional;
-using ::testing::Property;
static const std::vector<std::string> kValidFqNames = {
"android.hardware.foo@1.0::IFoo.Type",
@@ -194,21 +191,6 @@ TEST(LibHidlGenUtilsTest, FqDefaultVersion) {
EXPECT_EQ((std::make_pair<size_t, size_t>(1u, 2u)), i.getVersion());
}
-TEST(LibHidlGenUtilsTest, FqInstanceFrom) {
- EXPECT_THAT(FqInstance::from("android.hardware.foo", 1, 0, "IFoo", "default"),
- Optional(Property(&FqInstance::string, "android.hardware.foo@1.0::IFoo/default")));
- EXPECT_THAT(FqInstance::from("android.hardware.foo", 1, 0, "IFoo"),
- Optional(Property(&FqInstance::string, "android.hardware.foo@1.0::IFoo")));
- EXPECT_THAT(FqInstance::from("android.hardware.foo", 1, 0),
- Optional(Property(&FqInstance::string, "android.hardware.foo@1.0")));
- EXPECT_THAT(FqInstance::from(1, 0, "IFoo", "default"),
- Optional(Property(&FqInstance::string, "@1.0::IFoo/default")));
- EXPECT_THAT(FqInstance::from(1, 0, "IFoo"),
- Optional(Property(&FqInstance::string, "@1.0::IFoo")));
- EXPECT_THAT(FqInstance::from("IFoo", "default"),
- Optional(Property(&FqInstance::string, "IFoo/default")));
-}
-
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
diff --git a/test/vendor/1.0/Android.bp b/test/vendor/1.0/Android.bp
index cdb613ae..c02197e2 100644
--- a/test/vendor/1.0/Android.bp
+++ b/test/vendor/1.0/Android.bp
@@ -1,12 +1,3 @@
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
hidl_interface {
name: "hidl.tests.vendor@1.0",
owner: "some-owner-name",
diff --git a/test/vendor/1.0/IVendor.hal b/test/vendor/1.0/IVendor.hal
index a9e6050f..c963d3f8 100644
--- a/test/vendor/1.0/IVendor.hal
+++ b/test/vendor/1.0/IVendor.hal
@@ -36,11 +36,4 @@ interface IVendor extends IBaz {
// overriding virtual functions in parent class
// due to namespace resolution.
registerForNotifications();
-
- // Testing namespace reference with safe union generation
- safe_union ReturnError {
- IVendor problem;
- uint32_t error;
- };
- returnInterfaceOrError() generates (ReturnError result);
};
diff --git a/test/vendor/1.1/Android.bp b/test/vendor/1.1/Android.bp
index 54f0379e..5c019033 100644
--- a/test/vendor/1.1/Android.bp
+++ b/test/vendor/1.1/Android.bp
@@ -1,14 +1,5 @@
// This file is autogenerated by hidl-gen -Landroidbp.
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
hidl_interface {
name: "hidl.tests.vendor@1.1",
owner: "some-owner-name",
diff --git a/test/vendor/android/1.0/Android.bp b/test/vendor/android/1.0/Android.bp
index ad21afa1..1627b786 100644
--- a/test/vendor/android/1.0/Android.bp
+++ b/test/vendor/android/1.0/Android.bp
@@ -1,14 +1,5 @@
// This file is autogenerated by hidl-gen -Landroidbp.
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
hidl_interface {
name: "hidl.tests.vendor.android@1.0",
owner: "some-owner-name",
diff --git a/test/version_test/Android.bp b/test/version_test/Android.bp
index f5796576..3629b8ab 100644
--- a/test/version_test/Android.bp
+++ b/test/version_test/Android.bp
@@ -1,12 +1,3 @@
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
genrule {
name: "hidl_hash_version_gen",
tools: [
@@ -84,5 +75,4 @@ cc_test_host {
name: "hidl_version_test",
cflags: ["-Wall", "-Werror"],
generated_sources: ["hidl_hash_version_gen"],
- gtest: false,
}
diff --git a/utils/Android.bp b/utils/Android.bp
index a0ba8b92..e9fd0c3a 100644
--- a/utils/Android.bp
+++ b/utils/Android.bp
@@ -12,19 +12,9 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "system_tools_hidl_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["system_tools_hidl_license"],
-}
-
cc_library {
name: "libhidl-gen-utils",
host_supported: true,
- product_available: true,
recovery_available: true,
defaults: ["hidl-gen-defaults"],
srcs: [
diff --git a/utils/FQName.cpp b/utils/FQName.cpp
index 28d681ca..93b4f305 100644
--- a/utils/FQName.cpp
+++ b/utils/FQName.cpp
@@ -52,6 +52,14 @@ bool FQName::setTo(const std::string& package, size_t majorVer, size_t minorVer,
return true;
}
+FQName::FQName(const FQName& other)
+ : mIsIdentifier(other.mIsIdentifier),
+ mPackage(other.mPackage),
+ mMajor(other.mMajor),
+ mMinor(other.mMinor),
+ mName(other.mName),
+ mValueName(other.mValueName) {}
+
bool FQName::isIdentifier() const {
return mIsIdentifier;
}
diff --git a/utils/include/hidl-util/FQName.h b/utils/include/hidl-util/FQName.h
index 4f49b43e..df12cb5a 100644
--- a/utils/include/hidl-util/FQName.h
+++ b/utils/include/hidl-util/FQName.h
@@ -31,6 +31,8 @@ struct FQName {
FQName(const std::string& package, const std::string& version, const std::string& name = "",
const std::string& valueName = "");
+ FQName(const FQName& other);
+
bool isIdentifier() const;
// Returns false if string isn't a valid FQName object.
diff --git a/utils/include/hidl-util/FqInstance.h b/utils/include/hidl-util/FqInstance.h
index 35d7a938..486845ff 100644
--- a/utils/include/hidl-util/FqInstance.h
+++ b/utils/include/hidl-util/FqInstance.h
@@ -18,7 +18,6 @@
#define ANDROID_FQINSTANCE_H_
-#include <optional>
#include <string>
#include <utility>
@@ -70,6 +69,7 @@ class FqInstance {
// IFoo.Type:MY_ENUM_VALUE
//
// If no "/instance", hasInstance() will return false afterwards.
+ // TODO(b/73774955): deprecate this and use std::optional.
__attribute__((warn_unused_result)) bool setTo(const std::string& s);
// Convenience method when an FQName and instance are already available.
@@ -95,15 +95,6 @@ class FqInstance {
__attribute__((warn_unused_result)) bool setTo(const std::string& interface,
const std::string& instance);
- // Same as creating an FqInstance then call setTo. See setTo for all valid signatures.
- // If setTo returns false, this function returns nullopt.
- template <typename... Args>
- static std::optional<FqInstance> from(Args&&... args) {
- FqInstance fqInstance;
- if (fqInstance.setTo(std::forward<Args>(args)...)) return fqInstance;
- return std::nullopt;
- }
-
// undefined behavior if:
// - Default constructor is called without setTo();
// - setTo is called but returned false.