Cleanup FQName usage.
Bug: 32559427
Test: hidl_test
Change-Id: Ie5e234c102f8ad76ab24db9bce1630e2227562f6
diff --git a/AST.cpp b/AST.cpp
index 309e06f..dcf7495 100644
--- a/AST.cpp
+++ b/AST.cpp
@@ -447,13 +447,11 @@
// dependencies. If not, then it must have been defined in types.hal.
//
// In the case of just specifying Folder, the resolved type is
- // android.hardware.tests.foo@1.0::IFoo.Folder, and the same logic as
+ // android.hardware.tests.foo@1.0::Folder, and the same logic as
// above applies.
if (!resolvedType->isInterface()) {
- FQName ifc(resolvedName.package(),
- resolvedName.version(),
- resolvedName.names().at(0));
+ FQName ifc = resolvedName.getTopLevelType();
for (const auto &importedAST : mImportedASTs) {
FQName matchingName;
Type *match = importedAST->findDefinedType(ifc, &matchingName);
@@ -465,8 +463,7 @@
if (!resolvedType->isInterface()) {
// Non-interface types are declared in the associated types header.
- FQName typesName(
- resolvedName.package(), resolvedName.version(), "types");
+ FQName typesName = resolvedName.getTypesForPackage();
mImportedNames.insert(typesName);
} else {
@@ -500,7 +497,7 @@
void AST::getImportedPackages(std::set<FQName> *importSet) const {
for (const auto &fqName : mImportedNames) {
- FQName packageName(fqName.package(), fqName.version(), "");
+ FQName packageName = fqName.getPackageAndVersion();
if (packageName == mPackage) {
// We only care about external imports, not our own package.
diff --git a/Coordinator.cpp b/Coordinator.cpp
index 5ff5381..f2bab30 100644
--- a/Coordinator.cpp
+++ b/Coordinator.cpp
@@ -62,7 +62,7 @@
if (fqName.name() != "types") {
// Any interface file implicitly imports its package's types.hal.
- FQName typesName(fqName.package(), fqName.version(), "types");
+ FQName typesName = fqName.getTypesForPackage();
typesAST = parse(typesName, parsedASTs);
// fall through.
diff --git a/FQName.cpp b/FQName.cpp
index 99e9f9a..254a5a4 100644
--- a/FQName.cpp
+++ b/FQName.cpp
@@ -72,6 +72,11 @@
mName(name),
mValueName(valueName) {
setVersion(version);
+
+ // Check if this is actually a valid fqName
+ FQName other;
+ other.setTo(this->string());
+ CHECK(other.mValid && (*this) == other);
}
FQName::FQName(const FQName& other)
@@ -339,7 +344,11 @@
return FQName(package(), version(), "types");
}
-const FQName FQName::getTopLevelType() const {
+FQName FQName::getPackageAndVersion() const {
+ return FQName(package(), version(), "");
+}
+
+FQName FQName::getTopLevelType() const {
auto idx = mName.find('.');
if (idx == std::string::npos) {
diff --git a/FQName.h b/FQName.h
index de47bc3..28c14ff 100644
--- a/FQName.h
+++ b/FQName.h
@@ -150,12 +150,16 @@
// -> android.hardware.foo@1.0::types
FQName getTypesForPackage() const;
+ // android.hardware.foo@1.0::Abc.Type:VALUE
+ // -> android.hardware.foo@1.0
+ FQName getPackageAndVersion() const;
+
// the following comments all assume that the FQName
// is android.hardware.foo@1.0::IBar.Baz.Bam
// returns highest type in the hidl namespace, i.e.
// android.hardware.foo@1.0::IBar
- const FQName getTopLevelType() const;
+ FQName getTopLevelType() const;
// returns an unambiguous fully qualified name which can be
// baked into a token, i.e.
@@ -205,8 +209,8 @@
void setVersion(const std::string &v);
};
-static const FQName gIBaseFqName{"android.hidl.base@1.0::IBase"};
-static const FQName gIBasePackageFqName{gIBaseFqName.package(), gIBaseFqName.version(), ""};
+static const FQName gIBaseFqName = FQName{"android.hidl.base@1.0::IBase"};
+static const FQName gIBasePackageFqName = FQName{"android.hidl.base@1.0"};
} // namespace android
diff --git a/main.cpp b/main.cpp
index 06d7053..ed5eecd 100644
--- a/main.cpp
+++ b/main.cpp
@@ -66,7 +66,7 @@
limitToType = fqName.name().substr(strlen("types."));
- FQName typesName(fqName.package(), fqName.version(), "types");
+ FQName typesName = fqName.getTypesForPackage();
ast = coordinator->parse(typesName);
} else {
ast = coordinator->parse(fqName);