AAPT2: Rename to match new style
Use Google3 naming style to match new
projects' and open source google projects' style.
Preferred to do this in a massive CL so as to avoid
style inconsistencies that plague legacy code bases.
This is a relatively NEW code base, may as well keep
it up to date.
Test: name/style refactor - existing tests pass
Change-Id: Ie80ecb78d46ec53efdfca2336bb57d96cbb7fb87
diff --git a/tools/aapt2/link/AutoVersioner.cpp b/tools/aapt2/link/AutoVersioner.cpp
index 5ba9819..77471ea 100644
--- a/tools/aapt2/link/AutoVersioner.cpp
+++ b/tools/aapt2/link/AutoVersioner.cpp
@@ -14,34 +14,36 @@
* limitations under the License.
*/
+#include "link/Linkers.h"
+
+#include <algorithm>
+
+#include "android-base/logging.h"
+
#include "ConfigDescription.h"
#include "ResourceTable.h"
#include "SdkConstants.h"
#include "ValueVisitor.h"
-#include "link/Linkers.h"
-
-#include <algorithm>
-#include <cassert>
namespace aapt {
-bool shouldGenerateVersionedResource(const ResourceEntry* entry,
+bool ShouldGenerateVersionedResource(const ResourceEntry* entry,
const ConfigDescription& config,
- const int sdkVersionToGenerate) {
+ const int sdk_version_to_generate) {
// We assume the caller is trying to generate a version greater than the
// current configuration.
- assert(sdkVersionToGenerate > config.sdkVersion);
+ CHECK(sdk_version_to_generate > config.sdkVersion);
- const auto endIter = entry->values.end();
+ const auto end_iter = entry->values.end();
auto iter = entry->values.begin();
- for (; iter != endIter; ++iter) {
+ for (; iter != end_iter; ++iter) {
if ((*iter)->config == config) {
break;
}
}
// The source config came from this list, so it should be here.
- assert(iter != entry->values.end());
+ CHECK(iter != entry->values.end());
++iter;
// The next configuration either only varies in sdkVersion, or it is
@@ -53,12 +55,12 @@
// than other
// qualifiers, so we need to iterate through the entire list to be sure there
// are no higher sdk level versions of this resource.
- ConfigDescription tempConfig(config);
- for (; iter != endIter; ++iter) {
- tempConfig.sdkVersion = (*iter)->config.sdkVersion;
- if (tempConfig == (*iter)->config) {
+ ConfigDescription temp_config(config);
+ for (; iter != end_iter; ++iter) {
+ temp_config.sdkVersion = (*iter)->config.sdkVersion;
+ if (temp_config == (*iter)->config) {
// The two configs are the same, check the sdk version.
- return sdkVersionToGenerate < (*iter)->config.sdkVersion;
+ return sdk_version_to_generate < (*iter)->config.sdkVersion;
}
}
@@ -66,7 +68,7 @@
return true;
}
-bool AutoVersioner::consume(IAaptContext* context, ResourceTable* table) {
+bool AutoVersioner::Consume(IAaptContext* context, ResourceTable* table) {
for (auto& package : table->packages) {
for (auto& type : package->types) {
if (type->type != ResourceType::kStyle) {
@@ -75,36 +77,37 @@
for (auto& entry : type->entries) {
for (size_t i = 0; i < entry->values.size(); i++) {
- ResourceConfigValue* configValue = entry->values[i].get();
- if (configValue->config.sdkVersion >= SDK_LOLLIPOP_MR1) {
+ ResourceConfigValue* config_value = entry->values[i].get();
+ if (config_value->config.sdkVersion >= SDK_LOLLIPOP_MR1) {
// If this configuration is only used on L-MR1 then we don't need
// to do anything since we use private attributes since that
// version.
continue;
}
- if (Style* style = valueCast<Style>(configValue->value.get())) {
- Maybe<size_t> minSdkStripped;
+ if (Style* style = ValueCast<Style>(config_value->value.get())) {
+ Maybe<size_t> min_sdk_stripped;
std::vector<Style::Entry> stripped;
auto iter = style->entries.begin();
while (iter != style->entries.end()) {
- assert(iter->key.id && "IDs must be assigned and linked");
+ CHECK(bool(iter->key.id)) << "IDs must be assigned and linked";
// Find the SDK level that is higher than the configuration
// allows.
- const size_t sdkLevel =
- findAttributeSdkLevel(iter->key.id.value());
- if (sdkLevel >
- std::max<size_t>(configValue->config.sdkVersion, 1)) {
+ const size_t sdk_level =
+ FindAttributeSdkLevel(iter->key.id.value());
+ if (sdk_level >
+ std::max<size_t>(config_value->config.sdkVersion, 1)) {
// Record that we are about to strip this.
stripped.emplace_back(std::move(*iter));
// We use the smallest SDK level to generate the new style.
- if (minSdkStripped) {
- minSdkStripped = std::min(minSdkStripped.value(), sdkLevel);
+ if (min_sdk_stripped) {
+ min_sdk_stripped =
+ std::min(min_sdk_stripped.value(), sdk_level);
} else {
- minSdkStripped = sdkLevel;
+ min_sdk_stripped = sdk_level;
}
// Erase this from this style.
@@ -114,31 +117,31 @@
++iter;
}
- if (minSdkStripped && !stripped.empty()) {
+ if (min_sdk_stripped && !stripped.empty()) {
// We found attributes from a higher SDK level. Check that
// there is no other defined resource for the version we want to
// generate.
- if (shouldGenerateVersionedResource(entry.get(),
- configValue->config,
- minSdkStripped.value())) {
+ if (ShouldGenerateVersionedResource(entry.get(),
+ config_value->config,
+ min_sdk_stripped.value())) {
// Let's create a new Style for this versioned resource.
- ConfigDescription newConfig(configValue->config);
- newConfig.sdkVersion = minSdkStripped.value();
+ ConfigDescription new_config(config_value->config);
+ new_config.sdkVersion = min_sdk_stripped.value();
- std::unique_ptr<Style> newStyle(
- style->clone(&table->stringPool));
- newStyle->setComment(style->getComment());
- newStyle->setSource(style->getSource());
+ std::unique_ptr<Style> new_style(
+ style->Clone(&table->string_pool));
+ new_style->SetComment(style->GetComment());
+ new_style->SetSource(style->GetSource());
// Move the previously stripped attributes into this style.
- newStyle->entries.insert(
- newStyle->entries.end(),
+ new_style->entries.insert(
+ new_style->entries.end(),
std::make_move_iterator(stripped.begin()),
std::make_move_iterator(stripped.end()));
// Insert the new Resource into the correct place.
- entry->findOrCreateValue(newConfig, {})->value =
- std::move(newStyle);
+ entry->FindOrCreateValue(new_config, {})->value =
+ std::move(new_style);
}
}
}
diff --git a/tools/aapt2/link/AutoVersioner_test.cpp b/tools/aapt2/link/AutoVersioner_test.cpp
index 04bf9cd..755af0a 100644
--- a/tools/aapt2/link/AutoVersioner_test.cpp
+++ b/tools/aapt2/link/AutoVersioner_test.cpp
@@ -14,121 +14,124 @@
* limitations under the License.
*/
-#include "ConfigDescription.h"
#include "link/Linkers.h"
+
+#include "ConfigDescription.h"
#include "test/Test.h"
namespace aapt {
TEST(AutoVersionerTest, GenerateVersionedResources) {
- const ConfigDescription defaultConfig = {};
- const ConfigDescription landConfig = test::parseConfigOrDie("land");
- const ConfigDescription sw600dpLandConfig =
- test::parseConfigOrDie("sw600dp-land");
+ const ConfigDescription land_config = test::ParseConfigOrDie("land");
+ const ConfigDescription sw600dp_land_config =
+ test::ParseConfigOrDie("sw600dp-land");
ResourceEntry entry("foo");
+ entry.values.push_back(util::make_unique<ResourceConfigValue>(
+ ConfigDescription::DefaultConfig(), ""));
entry.values.push_back(
- util::make_unique<ResourceConfigValue>(defaultConfig, ""));
+ util::make_unique<ResourceConfigValue>(land_config, ""));
entry.values.push_back(
- util::make_unique<ResourceConfigValue>(landConfig, ""));
- entry.values.push_back(
- util::make_unique<ResourceConfigValue>(sw600dpLandConfig, ""));
+ util::make_unique<ResourceConfigValue>(sw600dp_land_config, ""));
- EXPECT_TRUE(shouldGenerateVersionedResource(&entry, defaultConfig, 17));
- EXPECT_TRUE(shouldGenerateVersionedResource(&entry, landConfig, 17));
+ EXPECT_TRUE(ShouldGenerateVersionedResource(
+ &entry, ConfigDescription::DefaultConfig(), 17));
+ EXPECT_TRUE(ShouldGenerateVersionedResource(&entry, land_config, 17));
}
TEST(AutoVersionerTest, GenerateVersionedResourceWhenHigherVersionExists) {
- const ConfigDescription defaultConfig = {};
- const ConfigDescription sw600dpV13Config =
- test::parseConfigOrDie("sw600dp-v13");
- const ConfigDescription v21Config = test::parseConfigOrDie("v21");
+ const ConfigDescription sw600dp_v13_config =
+ test::ParseConfigOrDie("sw600dp-v13");
+ const ConfigDescription v21_config = test::ParseConfigOrDie("v21");
ResourceEntry entry("foo");
+ entry.values.push_back(util::make_unique<ResourceConfigValue>(
+ ConfigDescription::DefaultConfig(), ""));
entry.values.push_back(
- util::make_unique<ResourceConfigValue>(defaultConfig, ""));
+ util::make_unique<ResourceConfigValue>(sw600dp_v13_config, ""));
entry.values.push_back(
- util::make_unique<ResourceConfigValue>(sw600dpV13Config, ""));
- entry.values.push_back(util::make_unique<ResourceConfigValue>(v21Config, ""));
+ util::make_unique<ResourceConfigValue>(v21_config, ""));
- EXPECT_TRUE(shouldGenerateVersionedResource(&entry, defaultConfig, 17));
- EXPECT_FALSE(shouldGenerateVersionedResource(&entry, defaultConfig, 22));
+ EXPECT_TRUE(ShouldGenerateVersionedResource(
+ &entry, ConfigDescription::DefaultConfig(), 17));
+ EXPECT_FALSE(ShouldGenerateVersionedResource(
+ &entry, ConfigDescription::DefaultConfig(), 22));
}
TEST(AutoVersionerTest, VersionStylesForTable) {
std::unique_ptr<ResourceTable> table =
test::ResourceTableBuilder()
- .setPackageId("app", 0x7f)
- .addValue(
- "app:style/Foo", test::parseConfigOrDie("v4"),
+ .SetPackageId("app", 0x7f)
+ .AddValue(
+ "app:style/Foo", test::ParseConfigOrDie("v4"),
ResourceId(0x7f020000),
test::StyleBuilder()
- .addItem("android:attr/onClick", ResourceId(0x0101026f),
+ .AddItem("android:attr/onClick", ResourceId(0x0101026f),
util::make_unique<Id>())
- .addItem("android:attr/paddingStart", ResourceId(0x010103b3),
+ .AddItem("android:attr/paddingStart", ResourceId(0x010103b3),
util::make_unique<Id>())
- .addItem("android:attr/requiresSmallestWidthDp",
+ .AddItem("android:attr/requiresSmallestWidthDp",
ResourceId(0x01010364), util::make_unique<Id>())
- .addItem("android:attr/colorAccent", ResourceId(0x01010435),
+ .AddItem("android:attr/colorAccent", ResourceId(0x01010435),
util::make_unique<Id>())
- .build())
- .addValue(
- "app:style/Foo", test::parseConfigOrDie("v21"),
+ .Build())
+ .AddValue(
+ "app:style/Foo", test::ParseConfigOrDie("v21"),
ResourceId(0x7f020000),
test::StyleBuilder()
- .addItem("android:attr/paddingEnd", ResourceId(0x010103b4),
+ .AddItem("android:attr/paddingEnd", ResourceId(0x010103b4),
util::make_unique<Id>())
- .build())
- .build();
+ .Build())
+ .Build();
std::unique_ptr<IAaptContext> context = test::ContextBuilder()
- .setCompilationPackage("app")
- .setPackageId(0x7f)
- .build();
+ .SetCompilationPackage("app")
+ .SetPackageId(0x7f)
+ .Build();
AutoVersioner versioner;
- ASSERT_TRUE(versioner.consume(context.get(), table.get()));
+ ASSERT_TRUE(versioner.Consume(context.get(), table.get()));
- Style* style = test::getValueForConfig<Style>(table.get(), "app:style/Foo",
- test::parseConfigOrDie("v4"));
+ Style* style = test::GetValueForConfig<Style>(table.get(), "app:style/Foo",
+ test::ParseConfigOrDie("v4"));
ASSERT_NE(style, nullptr);
ASSERT_EQ(style->entries.size(), 1u);
AAPT_ASSERT_TRUE(style->entries.front().key.name);
EXPECT_EQ(style->entries.front().key.name.value(),
- test::parseNameOrDie("android:attr/onClick"));
+ test::ParseNameOrDie("android:attr/onClick"));
- style = test::getValueForConfig<Style>(table.get(), "app:style/Foo",
- test::parseConfigOrDie("v13"));
+ style = test::GetValueForConfig<Style>(table.get(), "app:style/Foo",
+ test::ParseConfigOrDie("v13"));
ASSERT_NE(style, nullptr);
ASSERT_EQ(style->entries.size(), 2u);
AAPT_ASSERT_TRUE(style->entries[0].key.name);
EXPECT_EQ(style->entries[0].key.name.value(),
- test::parseNameOrDie("android:attr/onClick"));
+ test::ParseNameOrDie("android:attr/onClick"));
AAPT_ASSERT_TRUE(style->entries[1].key.name);
EXPECT_EQ(style->entries[1].key.name.value(),
- test::parseNameOrDie("android:attr/requiresSmallestWidthDp"));
+ test::ParseNameOrDie("android:attr/requiresSmallestWidthDp"));
- style = test::getValueForConfig<Style>(table.get(), "app:style/Foo",
- test::parseConfigOrDie("v17"));
+ style = test::GetValueForConfig<Style>(table.get(), "app:style/Foo",
+ test::ParseConfigOrDie("v17"));
ASSERT_NE(style, nullptr);
ASSERT_EQ(style->entries.size(), 3u);
AAPT_ASSERT_TRUE(style->entries[0].key.name);
EXPECT_EQ(style->entries[0].key.name.value(),
- test::parseNameOrDie("android:attr/onClick"));
+ test::ParseNameOrDie("android:attr/onClick"));
AAPT_ASSERT_TRUE(style->entries[1].key.name);
EXPECT_EQ(style->entries[1].key.name.value(),
- test::parseNameOrDie("android:attr/requiresSmallestWidthDp"));
+ test::ParseNameOrDie("android:attr/requiresSmallestWidthDp"));
AAPT_ASSERT_TRUE(style->entries[2].key.name);
EXPECT_EQ(style->entries[2].key.name.value(),
- test::parseNameOrDie("android:attr/paddingStart"));
+ test::ParseNameOrDie("android:attr/paddingStart"));
- style = test::getValueForConfig<Style>(table.get(), "app:style/Foo",
- test::parseConfigOrDie("v21"));
+ style = test::GetValueForConfig<Style>(table.get(), "app:style/Foo",
+ test::ParseConfigOrDie("v21"));
ASSERT_NE(style, nullptr);
ASSERT_EQ(style->entries.size(), 1u);
AAPT_ASSERT_TRUE(style->entries.front().key.name);
EXPECT_EQ(style->entries.front().key.name.value(),
- test::parseNameOrDie("android:attr/paddingEnd"));
+ test::ParseNameOrDie("android:attr/paddingEnd"));
}
} // namespace aapt
diff --git a/tools/aapt2/link/Link.cpp b/tools/aapt2/link/Link.cpp
index 6dd34e3..717978ea 100644
--- a/tools/aapt2/link/Link.cpp
+++ b/tools/aapt2/link/Link.cpp
@@ -14,6 +14,17 @@
* limitations under the License.
*/
+#include <sys/stat.h>
+
+#include <fstream>
+#include <queue>
+#include <unordered_map>
+#include <vector>
+
+#include "android-base/errors.h"
+#include "android-base/file.h"
+#include "google/protobuf/io/coded_stream.h"
+
#include "AppInfo.h"
#include "Debug.h"
#include "Flags.h"
@@ -32,7 +43,6 @@
#include "java/ProguardRules.h"
#include "link/Linkers.h"
#include "link/ManifestFixer.h"
-#include "link/ProductFilter.h"
#include "link/ReferenceLinker.h"
#include "link/TableMerger.h"
#include "process/IResourceTableConsumer.h"
@@ -44,179 +54,179 @@
#include "util/StringPiece.h"
#include "xml/XmlDom.h"
-#include <android-base/file.h>
-#include <google/protobuf/io/coded_stream.h>
-
-#include <sys/stat.h>
-#include <fstream>
-#include <queue>
-#include <unordered_map>
-#include <vector>
-
-using google::protobuf::io::CopyingOutputStreamAdaptor;
+using ::google::protobuf::io::CopyingOutputStreamAdaptor;
namespace aapt {
struct LinkOptions {
- std::string outputPath;
- std::string manifestPath;
- std::vector<std::string> includePaths;
- std::vector<std::string> overlayFiles;
+ std::string output_path;
+ std::string manifest_path;
+ std::vector<std::string> include_paths;
+ std::vector<std::string> overlay_files;
+ bool output_to_directory = false;
+ bool auto_add_overlay = false;
// Java/Proguard options.
- Maybe<std::string> generateJavaClassPath;
- Maybe<std::string> customJavaPackage;
- std::set<std::string> extraJavaPackages;
- Maybe<std::string> generateProguardRulesPath;
- Maybe<std::string> generateMainDexProguardRulesPath;
+ Maybe<std::string> generate_java_class_path;
+ Maybe<std::string> custom_java_package;
+ std::set<std::string> extra_java_packages;
+ Maybe<std::string> generate_proguard_rules_path;
+ Maybe<std::string> generate_main_dex_proguard_rules_path;
+ bool generate_non_final_ids = false;
+ std::vector<std::string> javadoc_annotations;
+ Maybe<std::string> private_symbols;
- bool noAutoVersion = false;
- bool noVersionVectors = false;
- bool noResourceDeduping = false;
- bool staticLib = false;
- bool noStaticLibPackages = false;
- bool generateNonFinalIds = false;
- std::vector<std::string> javadocAnnotations;
- bool outputToDirectory = false;
- bool noXmlNamespaces = false;
- bool autoAddOverlay = false;
- bool doNotCompressAnything = false;
- std::unordered_set<std::string> extensionsToNotCompress;
- Maybe<std::string> privateSymbols;
- ManifestFixerOptions manifestFixerOptions;
+ // Optimizations/features.
+ bool no_auto_version = false;
+ bool no_version_vectors = false;
+ bool no_resource_deduping = false;
+ bool no_xml_namespaces = false;
+ bool do_not_compress_anything = false;
+ std::unordered_set<std::string> extensions_to_not_compress;
+
+ // Static lib options.
+ bool static_lib = false;
+ bool no_static_lib_packages = false;
+
+ // AndroidManifest.xml massaging options.
+ ManifestFixerOptions manifest_fixer_options;
+
+ // Products to use/filter on.
std::unordered_set<std::string> products;
// Split APK options.
- TableSplitterOptions tableSplitterOptions;
- std::vector<SplitConstraints> splitConstraints;
- std::vector<std::string> splitPaths;
+ TableSplitterOptions table_splitter_options;
+ std::vector<SplitConstraints> split_constraints;
+ std::vector<std::string> split_paths;
// Stable ID options.
- std::unordered_map<ResourceName, ResourceId> stableIdMap;
- Maybe<std::string> resourceIdMapPath;
+ std::unordered_map<ResourceName, ResourceId> stable_id_map;
+ Maybe<std::string> resource_id_map_path;
};
class LinkContext : public IAaptContext {
public:
- LinkContext() : mNameMangler({}) {}
+ LinkContext() : name_mangler_({}) {}
- IDiagnostics* getDiagnostics() override { return &mDiagnostics; }
+ IDiagnostics* GetDiagnostics() override { return &diagnostics_; }
- NameMangler* getNameMangler() override { return &mNameMangler; }
+ NameMangler* GetNameMangler() override { return &name_mangler_; }
- void setNameManglerPolicy(const NameManglerPolicy& policy) {
- mNameMangler = NameMangler(policy);
+ void SetNameManglerPolicy(const NameManglerPolicy& policy) {
+ name_mangler_ = NameMangler(policy);
}
- const std::string& getCompilationPackage() override {
- return mCompilationPackage;
+ const std::string& GetCompilationPackage() override {
+ return compilation_package_;
}
- void setCompilationPackage(const StringPiece& packageName) {
- mCompilationPackage = packageName.toString();
+ void SetCompilationPackage(const StringPiece& package_name) {
+ compilation_package_ = package_name.ToString();
}
- uint8_t getPackageId() override { return mPackageId; }
+ uint8_t GetPackageId() override { return package_id_; }
- void setPackageId(uint8_t id) { mPackageId = id; }
+ void SetPackageId(uint8_t id) { package_id_ = id; }
- SymbolTable* getExternalSymbols() override { return &mSymbols; }
+ SymbolTable* GetExternalSymbols() override { return &symbols_; }
- bool verbose() override { return mVerbose; }
+ bool IsVerbose() override { return verbose_; }
- void setVerbose(bool val) { mVerbose = val; }
+ void SetVerbose(bool val) { verbose_ = val; }
- int getMinSdkVersion() override { return mMinSdkVersion; }
+ int GetMinSdkVersion() override { return min_sdk_version_; }
- void setMinSdkVersion(int minSdk) { mMinSdkVersion = minSdk; }
+ void SetMinSdkVersion(int minSdk) { min_sdk_version_ = minSdk; }
private:
- StdErrDiagnostics mDiagnostics;
- NameMangler mNameMangler;
- std::string mCompilationPackage;
- uint8_t mPackageId = 0x0;
- SymbolTable mSymbols;
- bool mVerbose = false;
- int mMinSdkVersion = 0;
+ DISALLOW_COPY_AND_ASSIGN(LinkContext);
+
+ StdErrDiagnostics diagnostics_;
+ NameMangler name_mangler_;
+ std::string compilation_package_;
+ uint8_t package_id_ = 0x0;
+ SymbolTable symbols_;
+ bool verbose_ = false;
+ int min_sdk_version_ = 0;
};
-static bool copyFileToArchive(io::IFile* file, const std::string& outPath,
- uint32_t compressionFlags, IArchiveWriter* writer,
- IAaptContext* context) {
- std::unique_ptr<io::IData> data = file->openAsData();
+static bool CopyFileToArchive(io::IFile* file, const std::string& out_path,
+ uint32_t compression_flags,
+ IArchiveWriter* writer, IAaptContext* context) {
+ std::unique_ptr<io::IData> data = file->OpenAsData();
if (!data) {
- context->getDiagnostics()->error(DiagMessage(file->getSource())
+ context->GetDiagnostics()->Error(DiagMessage(file->GetSource())
<< "failed to open file");
return false;
}
const uint8_t* buffer = reinterpret_cast<const uint8_t*>(data->data());
- const size_t bufferSize = data->size();
+ const size_t buffer_size = data->size();
- if (context->verbose()) {
- context->getDiagnostics()->note(DiagMessage() << "writing " << outPath
+ if (context->IsVerbose()) {
+ context->GetDiagnostics()->Note(DiagMessage() << "writing " << out_path
<< " to archive");
}
- if (writer->startEntry(outPath, compressionFlags)) {
- if (writer->writeEntry(buffer, bufferSize)) {
- if (writer->finishEntry()) {
+ if (writer->StartEntry(out_path, compression_flags)) {
+ if (writer->WriteEntry(buffer, buffer_size)) {
+ if (writer->FinishEntry()) {
return true;
}
}
}
- context->getDiagnostics()->error(DiagMessage() << "failed to write file "
- << outPath);
+ context->GetDiagnostics()->Error(DiagMessage() << "failed to write file "
+ << out_path);
return false;
}
-static bool flattenXml(xml::XmlResource* xmlRes, const StringPiece& path,
- Maybe<size_t> maxSdkLevel, bool keepRawValues,
+static bool FlattenXml(xml::XmlResource* xml_res, const StringPiece& path,
+ Maybe<size_t> max_sdk_level, bool keep_raw_values,
IArchiveWriter* writer, IAaptContext* context) {
BigBuffer buffer(1024);
XmlFlattenerOptions options = {};
- options.keepRawValues = keepRawValues;
- options.maxSdkLevel = maxSdkLevel;
+ options.keep_raw_values = keep_raw_values;
+ options.max_sdk_level = max_sdk_level;
XmlFlattener flattener(&buffer, options);
- if (!flattener.consume(context, xmlRes)) {
+ if (!flattener.Consume(context, xml_res)) {
return false;
}
- if (context->verbose()) {
+ if (context->IsVerbose()) {
DiagMessage msg;
msg << "writing " << path << " to archive";
- if (maxSdkLevel) {
- msg << " maxSdkLevel=" << maxSdkLevel.value()
- << " keepRawValues=" << keepRawValues;
+ if (max_sdk_level) {
+ msg << " maxSdkLevel=" << max_sdk_level.value()
+ << " keepRawValues=" << keep_raw_values;
}
- context->getDiagnostics()->note(msg);
+ context->GetDiagnostics()->Note(msg);
}
- if (writer->startEntry(path, ArchiveEntry::kCompress)) {
- if (writer->writeEntry(buffer)) {
- if (writer->finishEntry()) {
+ if (writer->StartEntry(path, ArchiveEntry::kCompress)) {
+ if (writer->WriteEntry(buffer)) {
+ if (writer->FinishEntry()) {
return true;
}
}
}
- context->getDiagnostics()->error(DiagMessage() << "failed to write " << path
+ context->GetDiagnostics()->Error(DiagMessage() << "failed to write " << path
<< " to archive");
return false;
}
-static std::unique_ptr<ResourceTable> loadTableFromPb(const Source& source,
+static std::unique_ptr<ResourceTable> LoadTableFromPb(const Source& source,
const void* data,
size_t len,
IDiagnostics* diag) {
- pb::ResourceTable pbTable;
- if (!pbTable.ParseFromArray(data, len)) {
- diag->error(DiagMessage(source) << "invalid compiled table");
+ pb::ResourceTable pb_table;
+ if (!pb_table.ParseFromArray(data, len)) {
+ diag->Error(DiagMessage(source) << "invalid compiled table");
return {};
}
std::unique_ptr<ResourceTable> table =
- deserializeTableFromPb(pbTable, source, diag);
+ DeserializeTableFromPb(pb_table, source, diag);
if (!table) {
return {};
}
@@ -226,33 +236,33 @@
/**
* Inflates an XML file from the source path.
*/
-static std::unique_ptr<xml::XmlResource> loadXml(const std::string& path,
+static std::unique_ptr<xml::XmlResource> LoadXml(const std::string& path,
IDiagnostics* diag) {
std::ifstream fin(path, std::ifstream::binary);
if (!fin) {
- diag->error(DiagMessage(path) << strerror(errno));
+ diag->Error(DiagMessage(path) << strerror(errno));
return {};
}
- return xml::inflate(&fin, diag, Source(path));
+ return xml::Inflate(&fin, diag, Source(path));
}
struct ResourceFileFlattenerOptions {
- bool noAutoVersion = false;
- bool noVersionVectors = false;
- bool noXmlNamespaces = false;
- bool keepRawValues = false;
- bool doNotCompressAnything = false;
- bool updateProguardSpec = false;
- std::unordered_set<std::string> extensionsToNotCompress;
+ bool no_auto_version = false;
+ bool no_version_vectors = false;
+ bool no_xml_namespaces = false;
+ bool keep_raw_values = false;
+ bool do_not_compress_anything = false;
+ bool update_proguard_spec = false;
+ std::unordered_set<std::string> extensions_to_not_compress;
};
class ResourceFileFlattener {
public:
ResourceFileFlattener(const ResourceFileFlattenerOptions& options,
- IAaptContext* context, proguard::KeepSet* keepSet)
- : mOptions(options), mContext(context), mKeepSet(keepSet) {}
+ IAaptContext* context, proguard::KeepSet* keep_set)
+ : options_(options), context_(context), keep_set_(keep_set) {}
- bool flatten(ResourceTable* table, IArchiveWriter* archiveWriter);
+ bool Flatten(ResourceTable* table, IArchiveWriter* archive_writer);
private:
struct FileOperation {
@@ -262,118 +272,119 @@
const ResourceEntry* entry;
// The file to copy as-is.
- io::IFile* fileToCopy;
+ io::IFile* file_to_copy;
// The XML to process and flatten.
- std::unique_ptr<xml::XmlResource> xmlToFlatten;
+ std::unique_ptr<xml::XmlResource> xml_to_flatten;
// The destination to write this file to.
- std::string dstPath;
- bool skipVersion = false;
+ std::string dst_path;
+ bool skip_version = false;
};
- uint32_t getCompressionFlags(const StringPiece& str);
+ uint32_t GetCompressionFlags(const StringPiece& str);
- bool linkAndVersionXmlFile(ResourceTable* table, FileOperation* fileOp,
- std::queue<FileOperation>* outFileOpQueue);
+ bool LinkAndVersionXmlFile(ResourceTable* table, FileOperation* file_op,
+ std::queue<FileOperation>* out_file_op_queue);
- ResourceFileFlattenerOptions mOptions;
- IAaptContext* mContext;
- proguard::KeepSet* mKeepSet;
+ ResourceFileFlattenerOptions options_;
+ IAaptContext* context_;
+ proguard::KeepSet* keep_set_;
};
-uint32_t ResourceFileFlattener::getCompressionFlags(const StringPiece& str) {
- if (mOptions.doNotCompressAnything) {
+uint32_t ResourceFileFlattener::GetCompressionFlags(const StringPiece& str) {
+ if (options_.do_not_compress_anything) {
return 0;
}
- for (const std::string& extension : mOptions.extensionsToNotCompress) {
- if (util::stringEndsWith(str, extension)) {
+ for (const std::string& extension : options_.extensions_to_not_compress) {
+ if (util::EndsWith(str, extension)) {
return 0;
}
}
return ArchiveEntry::kCompress;
}
-bool ResourceFileFlattener::linkAndVersionXmlFile(
- ResourceTable* table, FileOperation* fileOp,
- std::queue<FileOperation>* outFileOpQueue) {
- xml::XmlResource* doc = fileOp->xmlToFlatten.get();
+bool ResourceFileFlattener::LinkAndVersionXmlFile(
+ ResourceTable* table, FileOperation* file_op,
+ std::queue<FileOperation>* out_file_op_queue) {
+ xml::XmlResource* doc = file_op->xml_to_flatten.get();
const Source& src = doc->file.source;
- if (mContext->verbose()) {
- mContext->getDiagnostics()->note(DiagMessage() << "linking " << src.path);
+ if (context_->IsVerbose()) {
+ context_->GetDiagnostics()->Note(DiagMessage() << "linking " << src.path);
}
- XmlReferenceLinker xmlLinker;
- if (!xmlLinker.consume(mContext, doc)) {
+ XmlReferenceLinker xml_linker;
+ if (!xml_linker.Consume(context_, doc)) {
return false;
}
- if (mOptions.updateProguardSpec &&
- !proguard::collectProguardRules(src, doc, mKeepSet)) {
+ if (options_.update_proguard_spec &&
+ !proguard::CollectProguardRules(src, doc, keep_set_)) {
return false;
}
- if (mOptions.noXmlNamespaces) {
- XmlNamespaceRemover namespaceRemover;
- if (!namespaceRemover.consume(mContext, doc)) {
+ if (options_.no_xml_namespaces) {
+ XmlNamespaceRemover namespace_remover;
+ if (!namespace_remover.Consume(context_, doc)) {
return false;
}
}
- if (!mOptions.noAutoVersion) {
- if (mOptions.noVersionVectors) {
+ if (!options_.no_auto_version) {
+ if (options_.no_version_vectors) {
// Skip this if it is a vector or animated-vector.
- xml::Element* el = xml::findRootElement(doc);
- if (el && el->namespaceUri.empty()) {
+ xml::Element* el = xml::FindRootElement(doc);
+ if (el && el->namespace_uri.empty()) {
if (el->name == "vector" || el->name == "animated-vector") {
// We are NOT going to version this file.
- fileOp->skipVersion = true;
+ file_op->skip_version = true;
return true;
}
}
}
- const ConfigDescription& config = fileOp->config;
+ const ConfigDescription& config = file_op->config;
// Find the first SDK level used that is higher than this defined config and
// not superseded by a lower or equal SDK level resource.
- const int minSdkVersion = mContext->getMinSdkVersion();
- for (int sdkLevel : xmlLinker.getSdkLevels()) {
- if (sdkLevel > minSdkVersion && sdkLevel > config.sdkVersion) {
- if (!shouldGenerateVersionedResource(fileOp->entry, config, sdkLevel)) {
+ const int min_sdk_version = context_->GetMinSdkVersion();
+ for (int sdk_level : xml_linker.sdk_levels()) {
+ if (sdk_level > min_sdk_version && sdk_level > config.sdkVersion) {
+ if (!ShouldGenerateVersionedResource(file_op->entry, config,
+ sdk_level)) {
// If we shouldn't generate a versioned resource, stop checking.
break;
}
- ResourceFile versionedFileDesc = doc->file;
- versionedFileDesc.config.sdkVersion = (uint16_t)sdkLevel;
+ ResourceFile versioned_file_desc = doc->file;
+ versioned_file_desc.config.sdkVersion = (uint16_t)sdk_level;
- FileOperation newFileOp;
- newFileOp.xmlToFlatten = util::make_unique<xml::XmlResource>(
- versionedFileDesc, doc->root->clone());
- newFileOp.config = versionedFileDesc.config;
- newFileOp.entry = fileOp->entry;
- newFileOp.dstPath = ResourceUtils::buildResourceFileName(
- versionedFileDesc, mContext->getNameMangler());
+ FileOperation new_file_op;
+ new_file_op.xml_to_flatten = util::make_unique<xml::XmlResource>(
+ versioned_file_desc, doc->root->Clone());
+ new_file_op.config = versioned_file_desc.config;
+ new_file_op.entry = file_op->entry;
+ new_file_op.dst_path = ResourceUtils::BuildResourceFileName(
+ versioned_file_desc, context_->GetNameMangler());
- if (mContext->verbose()) {
- mContext->getDiagnostics()->note(
- DiagMessage(versionedFileDesc.source)
+ if (context_->IsVerbose()) {
+ context_->GetDiagnostics()->Note(
+ DiagMessage(versioned_file_desc.source)
<< "auto-versioning resource from config '" << config << "' -> '"
- << versionedFileDesc.config << "'");
+ << versioned_file_desc.config << "'");
}
- bool added = table->addFileReferenceAllowMangled(
- versionedFileDesc.name, versionedFileDesc.config,
- versionedFileDesc.source, newFileOp.dstPath, nullptr,
- mContext->getDiagnostics());
+ bool added = table->AddFileReferenceAllowMangled(
+ versioned_file_desc.name, versioned_file_desc.config,
+ versioned_file_desc.source, new_file_op.dst_path, nullptr,
+ context_->GetDiagnostics());
if (!added) {
return false;
}
- outFileOpQueue->push(std::move(newFileOp));
+ out_file_op_queue->push(std::move(new_file_op));
break;
}
}
@@ -386,100 +397,96 @@
* will
* corrupt the iteration order.
*/
-bool ResourceFileFlattener::flatten(ResourceTable* table,
- IArchiveWriter* archiveWriter) {
+bool ResourceFileFlattener::Flatten(ResourceTable* table,
+ IArchiveWriter* archive_writer) {
bool error = false;
std::map<std::pair<ConfigDescription, StringPiece>, FileOperation>
- configSortedFiles;
+ config_sorted_files;
for (auto& pkg : table->packages) {
for (auto& type : pkg->types) {
// Sort by config and name, so that we get better locality in the zip
// file.
- configSortedFiles.clear();
- std::queue<FileOperation> fileOperations;
+ config_sorted_files.clear();
+ std::queue<FileOperation> file_operations;
// Populate the queue with all files in the ResourceTable.
for (auto& entry : type->entries) {
- for (auto& configValue : entry->values) {
- FileReference* fileRef =
- valueCast<FileReference>(configValue->value.get());
- if (!fileRef) {
+ for (auto& config_value : entry->values) {
+ FileReference* file_ref =
+ ValueCast<FileReference>(config_value->value.get());
+ if (!file_ref) {
continue;
}
- io::IFile* file = fileRef->file;
+ io::IFile* file = file_ref->file;
if (!file) {
- mContext->getDiagnostics()->error(DiagMessage(fileRef->getSource())
+ context_->GetDiagnostics()->Error(DiagMessage(file_ref->GetSource())
<< "file not found");
return false;
}
- FileOperation fileOp;
- fileOp.entry = entry.get();
- fileOp.dstPath = *fileRef->path;
- fileOp.config = configValue->config;
+ FileOperation file_op;
+ file_op.entry = entry.get();
+ file_op.dst_path = *file_ref->path;
+ file_op.config = config_value->config;
- const StringPiece srcPath = file->getSource().path;
+ const StringPiece src_path = file->GetSource().path;
if (type->type != ResourceType::kRaw &&
- (util::stringEndsWith(srcPath, ".xml.flat") ||
- util::stringEndsWith(srcPath, ".xml"))) {
- std::unique_ptr<io::IData> data = file->openAsData();
+ (util::EndsWith(src_path, ".xml.flat") ||
+ util::EndsWith(src_path, ".xml"))) {
+ std::unique_ptr<io::IData> data = file->OpenAsData();
if (!data) {
- mContext->getDiagnostics()->error(DiagMessage(file->getSource())
+ context_->GetDiagnostics()->Error(DiagMessage(file->GetSource())
<< "failed to open file");
return false;
}
- fileOp.xmlToFlatten =
- xml::inflate(data->data(), data->size(),
- mContext->getDiagnostics(), file->getSource());
+ file_op.xml_to_flatten =
+ xml::Inflate(data->data(), data->size(),
+ context_->GetDiagnostics(), file->GetSource());
- if (!fileOp.xmlToFlatten) {
+ if (!file_op.xml_to_flatten) {
return false;
}
- fileOp.xmlToFlatten->file.config = configValue->config;
- fileOp.xmlToFlatten->file.source = fileRef->getSource();
- fileOp.xmlToFlatten->file.name =
+ file_op.xml_to_flatten->file.config = config_value->config;
+ file_op.xml_to_flatten->file.source = file_ref->GetSource();
+ file_op.xml_to_flatten->file.name =
ResourceName(pkg->name, type->type, entry->name);
// Enqueue the XML files to be processed.
- fileOperations.push(std::move(fileOp));
+ file_operations.push(std::move(file_op));
} else {
- fileOp.fileToCopy = file;
+ file_op.file_to_copy = file;
// NOTE(adamlesinski): Explicitly construct a StringPiece here, or
- // else
- // we end up copying the string in the std::make_pair() method, then
- // creating a StringPiece from the copy, which would cause us to end
- // up
- // referencing garbage in the map.
- const StringPiece entryName(entry->name);
- configSortedFiles[std::make_pair(configValue->config, entryName)] =
- std::move(fileOp);
+ // else we end up copying the string in the std::make_pair() method,
+ // then creating a StringPiece from the copy, which would cause us
+ // to end up referencing garbage in the map.
+ const StringPiece entry_name(entry->name);
+ config_sorted_files[std::make_pair(
+ config_value->config, entry_name)] = std::move(file_op);
}
}
}
// Now process the XML queue
- for (; !fileOperations.empty(); fileOperations.pop()) {
- FileOperation& fileOp = fileOperations.front();
+ for (; !file_operations.empty(); file_operations.pop()) {
+ FileOperation& file_op = file_operations.front();
- if (!linkAndVersionXmlFile(table, &fileOp, &fileOperations)) {
+ if (!LinkAndVersionXmlFile(table, &file_op, &file_operations)) {
error = true;
continue;
}
// NOTE(adamlesinski): Explicitly construct a StringPiece here, or else
// we end up copying the string in the std::make_pair() method, then
- // creating
- // a StringPiece from the copy, which would cause us to end up
- // referencing
- // garbage in the map.
- const StringPiece entryName(fileOp.entry->name);
- configSortedFiles[std::make_pair(fileOp.config, entryName)] =
- std::move(fileOp);
+ // creating a StringPiece from the copy, which would cause us to end up
+ // referencing garbage in the map.
+ const StringPiece entry_name(file_op.entry->name);
+ config_sorted_files[std::make_pair(file_op.config, entry_name)] =
+ std::move(file_op);
}
if (error) {
@@ -487,28 +494,28 @@
}
// Now flatten the sorted values.
- for (auto& mapEntry : configSortedFiles) {
- const ConfigDescription& config = mapEntry.first.first;
- const FileOperation& fileOp = mapEntry.second;
+ for (auto& map_entry : config_sorted_files) {
+ const ConfigDescription& config = map_entry.first.first;
+ const FileOperation& file_op = map_entry.second;
- if (fileOp.xmlToFlatten) {
- Maybe<size_t> maxSdkLevel;
- if (!mOptions.noAutoVersion && !fileOp.skipVersion) {
- maxSdkLevel =
+ if (file_op.xml_to_flatten) {
+ Maybe<size_t> max_sdk_level;
+ if (!options_.no_auto_version && !file_op.skip_version) {
+ max_sdk_level =
std::max<size_t>(std::max<size_t>(config.sdkVersion, 1u),
- mContext->getMinSdkVersion());
+ context_->GetMinSdkVersion());
}
- bool result =
- flattenXml(fileOp.xmlToFlatten.get(), fileOp.dstPath, maxSdkLevel,
- mOptions.keepRawValues, archiveWriter, mContext);
+ bool result = FlattenXml(
+ file_op.xml_to_flatten.get(), file_op.dst_path, max_sdk_level,
+ options_.keep_raw_values, archive_writer, context_);
if (!result) {
error = true;
}
} else {
- bool result = copyFileToArchive(fileOp.fileToCopy, fileOp.dstPath,
- getCompressionFlags(fileOp.dstPath),
- archiveWriter, mContext);
+ bool result = CopyFileToArchive(
+ file_op.file_to_copy, file_op.dst_path,
+ GetCompressionFlags(file_op.dst_path), archive_writer, context_);
if (!result) {
error = true;
}
@@ -519,136 +526,136 @@
return !error;
}
-static bool writeStableIdMapToPath(
+static bool WriteStableIdMapToPath(
IDiagnostics* diag,
- const std::unordered_map<ResourceName, ResourceId>& idMap,
- const std::string& idMapPath) {
- std::ofstream fout(idMapPath, std::ofstream::binary);
+ const std::unordered_map<ResourceName, ResourceId>& id_map,
+ const std::string& id_map_path) {
+ std::ofstream fout(id_map_path, std::ofstream::binary);
if (!fout) {
- diag->error(DiagMessage(idMapPath) << strerror(errno));
+ diag->Error(DiagMessage(id_map_path) << strerror(errno));
return false;
}
- for (const auto& entry : idMap) {
+ for (const auto& entry : id_map) {
const ResourceName& name = entry.first;
const ResourceId& id = entry.second;
fout << name << " = " << id << "\n";
}
if (!fout) {
- diag->error(DiagMessage(idMapPath) << "failed writing to file: "
- << strerror(errno));
+ diag->Error(DiagMessage(id_map_path)
+ << "failed writing to file: "
+ << android::base::SystemErrorCodeToString(errno));
return false;
}
return true;
}
-static bool loadStableIdMap(
+static bool LoadStableIdMap(
IDiagnostics* diag, const std::string& path,
- std::unordered_map<ResourceName, ResourceId>* outIdMap) {
+ std::unordered_map<ResourceName, ResourceId>* out_id_map) {
std::string content;
if (!android::base::ReadFileToString(path, &content)) {
- diag->error(DiagMessage(path) << "failed reading stable ID file");
+ diag->Error(DiagMessage(path) << "failed reading stable ID file");
return false;
}
- outIdMap->clear();
- size_t lineNo = 0;
- for (StringPiece line : util::tokenize(content, '\n')) {
- lineNo++;
- line = util::trimWhitespace(line);
+ out_id_map->clear();
+ size_t line_no = 0;
+ for (StringPiece line : util::Tokenize(content, '\n')) {
+ line_no++;
+ line = util::TrimWhitespace(line);
if (line.empty()) {
continue;
}
auto iter = std::find(line.begin(), line.end(), '=');
if (iter == line.end()) {
- diag->error(DiagMessage(Source(path, lineNo)) << "missing '='");
+ diag->Error(DiagMessage(Source(path, line_no)) << "missing '='");
return false;
}
ResourceNameRef name;
- StringPiece resNameStr =
- util::trimWhitespace(line.substr(0, std::distance(line.begin(), iter)));
- if (!ResourceUtils::parseResourceName(resNameStr, &name)) {
- diag->error(DiagMessage(Source(path, lineNo)) << "invalid resource name '"
- << resNameStr << "'");
+ StringPiece res_name_str =
+ util::TrimWhitespace(line.substr(0, std::distance(line.begin(), iter)));
+ if (!ResourceUtils::ParseResourceName(res_name_str, &name)) {
+ diag->Error(DiagMessage(Source(path, line_no))
+ << "invalid resource name '" << res_name_str << "'");
return false;
}
- const size_t resIdStartIdx = std::distance(line.begin(), iter) + 1;
- const size_t resIdStrLen = line.size() - resIdStartIdx;
- StringPiece resIdStr =
- util::trimWhitespace(line.substr(resIdStartIdx, resIdStrLen));
+ const size_t res_id_start_idx = std::distance(line.begin(), iter) + 1;
+ const size_t res_id_str_len = line.size() - res_id_start_idx;
+ StringPiece res_id_str =
+ util::TrimWhitespace(line.substr(res_id_start_idx, res_id_str_len));
- Maybe<ResourceId> maybeId = ResourceUtils::parseResourceId(resIdStr);
- if (!maybeId) {
- diag->error(DiagMessage(Source(path, lineNo)) << "invalid resource ID '"
- << resIdStr << "'");
+ Maybe<ResourceId> maybe_id = ResourceUtils::ParseResourceId(res_id_str);
+ if (!maybe_id) {
+ diag->Error(DiagMessage(Source(path, line_no)) << "invalid resource ID '"
+ << res_id_str << "'");
return false;
}
- (*outIdMap)[name.toResourceName()] = maybeId.value();
+ (*out_id_map)[name.ToResourceName()] = maybe_id.value();
}
return true;
}
-static bool parseSplitParameter(const StringPiece& arg, IDiagnostics* diag,
- std::string* outPath,
- SplitConstraints* outSplit) {
- std::vector<std::string> parts = util::split(arg, ':');
+static bool ParseSplitParameter(const StringPiece& arg, IDiagnostics* diag,
+ std::string* out_path,
+ SplitConstraints* out_split) {
+ std::vector<std::string> parts = util::Split(arg, ':');
if (parts.size() != 2) {
- diag->error(DiagMessage() << "invalid split parameter '" << arg << "'");
- diag->note(
+ diag->Error(DiagMessage() << "invalid split parameter '" << arg << "'");
+ diag->Note(
DiagMessage()
<< "should be --split path/to/output.apk:<config>[,<config>...]");
return false;
}
- *outPath = parts[0];
+ *out_path = parts[0];
std::vector<ConfigDescription> configs;
- for (const StringPiece& configStr : util::tokenize(parts[1], ',')) {
+ for (const StringPiece& config_str : util::Tokenize(parts[1], ',')) {
configs.push_back({});
- if (!ConfigDescription::parse(configStr, &configs.back())) {
- diag->error(DiagMessage() << "invalid config '" << configStr
+ if (!ConfigDescription::Parse(config_str, &configs.back())) {
+ diag->Error(DiagMessage() << "invalid config '" << config_str
<< "' in split parameter '" << arg << "'");
return false;
}
}
- outSplit->configs.insert(configs.begin(), configs.end());
+ out_split->configs.insert(configs.begin(), configs.end());
return true;
}
class LinkCommand {
public:
LinkCommand(LinkContext* context, const LinkOptions& options)
- : mOptions(options),
- mContext(context),
- mFinalTable(),
- mFileCollection(util::make_unique<io::FileCollection>()) {}
+ : options_(options),
+ context_(context),
+ final_table_(),
+ file_collection_(util::make_unique<io::FileCollection>()) {}
/**
* Creates a SymbolTable that loads symbols from the various APKs and caches
- * the
- * results for faster lookup.
+ * the results for faster lookup.
*/
- bool loadSymbolsFromIncludePaths() {
- std::unique_ptr<AssetManagerSymbolSource> assetSource =
+ bool LoadSymbolsFromIncludePaths() {
+ std::unique_ptr<AssetManagerSymbolSource> asset_source =
util::make_unique<AssetManagerSymbolSource>();
- for (const std::string& path : mOptions.includePaths) {
- if (mContext->verbose()) {
- mContext->getDiagnostics()->note(DiagMessage(path)
+ for (const std::string& path : options_.include_paths) {
+ if (context_->IsVerbose()) {
+ context_->GetDiagnostics()->Note(DiagMessage(path)
<< "loading include path");
}
// First try to load the file as a static lib.
- std::string errorStr;
- std::unique_ptr<ResourceTable> staticInclude =
- loadStaticLibrary(path, &errorStr);
- if (staticInclude) {
- if (!mOptions.staticLib) {
+ std::string error_str;
+ std::unique_ptr<ResourceTable> static_include =
+ LoadStaticLibrary(path, &error_str);
+ if (static_include) {
+ if (!options_.static_lib) {
// Can't include static libraries when not building a static library.
- mContext->getDiagnostics()->error(
+ context_->GetDiagnostics()->Error(
DiagMessage(path)
<< "can't include static library when building app");
return false;
@@ -657,92 +664,92 @@
// If we are using --no-static-lib-packages, we need to rename the
// package of this
// table to our compilation package.
- if (mOptions.noStaticLibPackages) {
+ if (options_.no_static_lib_packages) {
if (ResourceTablePackage* pkg =
- staticInclude->findPackageById(0x7f)) {
- pkg->name = mContext->getCompilationPackage();
+ static_include->FindPackageById(0x7f)) {
+ pkg->name = context_->GetCompilationPackage();
}
}
- mContext->getExternalSymbols()->appendSource(
- util::make_unique<ResourceTableSymbolSource>(staticInclude.get()));
+ context_->GetExternalSymbols()->AppendSource(
+ util::make_unique<ResourceTableSymbolSource>(static_include.get()));
- mStaticTableIncludes.push_back(std::move(staticInclude));
+ static_table_includes_.push_back(std::move(static_include));
- } else if (!errorStr.empty()) {
+ } else if (!error_str.empty()) {
// We had an error with reading, so fail.
- mContext->getDiagnostics()->error(DiagMessage(path) << errorStr);
+ context_->GetDiagnostics()->Error(DiagMessage(path) << error_str);
return false;
}
- if (!assetSource->addAssetPath(path)) {
- mContext->getDiagnostics()->error(DiagMessage(path)
+ if (!asset_source->AddAssetPath(path)) {
+ context_->GetDiagnostics()->Error(DiagMessage(path)
<< "failed to load include path");
return false;
}
}
- mContext->getExternalSymbols()->appendSource(std::move(assetSource));
+ context_->GetExternalSymbols()->AppendSource(std::move(asset_source));
return true;
}
- Maybe<AppInfo> extractAppInfoFromManifest(xml::XmlResource* xmlRes,
+ Maybe<AppInfo> ExtractAppInfoFromManifest(xml::XmlResource* xml_res,
IDiagnostics* diag) {
// Make sure the first element is <manifest> with package attribute.
- if (xml::Element* manifestEl = xml::findRootElement(xmlRes->root.get())) {
- AppInfo appInfo;
+ if (xml::Element* manifest_el = xml::FindRootElement(xml_res->root.get())) {
+ AppInfo app_info;
- if (!manifestEl->namespaceUri.empty() || manifestEl->name != "manifest") {
- diag->error(DiagMessage(xmlRes->file.source)
+ if (!manifest_el->namespace_uri.empty() ||
+ manifest_el->name != "manifest") {
+ diag->Error(DiagMessage(xml_res->file.source)
<< "root tag must be <manifest>");
return {};
}
- xml::Attribute* packageAttr = manifestEl->findAttribute({}, "package");
- if (!packageAttr) {
- diag->error(DiagMessage(xmlRes->file.source)
+ xml::Attribute* package_attr = manifest_el->FindAttribute({}, "package");
+ if (!package_attr) {
+ diag->Error(DiagMessage(xml_res->file.source)
<< "<manifest> must have a 'package' attribute");
return {};
}
- appInfo.package = packageAttr->value;
+ app_info.package = package_attr->value;
- if (xml::Attribute* versionCodeAttr =
- manifestEl->findAttribute(xml::kSchemaAndroid, "versionCode")) {
- Maybe<uint32_t> maybeCode =
- ResourceUtils::parseInt(versionCodeAttr->value);
- if (!maybeCode) {
- diag->error(
- DiagMessage(xmlRes->file.source.withLine(manifestEl->lineNumber))
- << "invalid android:versionCode '" << versionCodeAttr->value
- << "'");
+ if (xml::Attribute* version_code_attr =
+ manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCode")) {
+ Maybe<uint32_t> maybe_code =
+ ResourceUtils::ParseInt(version_code_attr->value);
+ if (!maybe_code) {
+ diag->Error(DiagMessage(xml_res->file.source.WithLine(
+ manifest_el->line_number))
+ << "invalid android:versionCode '"
+ << version_code_attr->value << "'");
return {};
}
- appInfo.versionCode = maybeCode.value();
+ app_info.version_code = maybe_code.value();
}
- if (xml::Attribute* revisionCodeAttr =
- manifestEl->findAttribute(xml::kSchemaAndroid, "revisionCode")) {
- Maybe<uint32_t> maybeCode =
- ResourceUtils::parseInt(revisionCodeAttr->value);
- if (!maybeCode) {
- diag->error(
- DiagMessage(xmlRes->file.source.withLine(manifestEl->lineNumber))
- << "invalid android:revisionCode '" << revisionCodeAttr->value
- << "'");
+ if (xml::Attribute* revision_code_attr =
+ manifest_el->FindAttribute(xml::kSchemaAndroid, "revisionCode")) {
+ Maybe<uint32_t> maybe_code =
+ ResourceUtils::ParseInt(revision_code_attr->value);
+ if (!maybe_code) {
+ diag->Error(DiagMessage(xml_res->file.source.WithLine(
+ manifest_el->line_number))
+ << "invalid android:revisionCode '"
+ << revision_code_attr->value << "'");
return {};
}
- appInfo.revisionCode = maybeCode.value();
+ app_info.revision_code = maybe_code.value();
}
- if (xml::Element* usesSdkEl = manifestEl->findChild({}, "uses-sdk")) {
- if (xml::Attribute* minSdk = usesSdkEl->findAttribute(
+ if (xml::Element* uses_sdk_el = manifest_el->FindChild({}, "uses-sdk")) {
+ if (xml::Attribute* min_sdk = uses_sdk_el->FindAttribute(
xml::kSchemaAndroid, "minSdkVersion")) {
- appInfo.minSdkVersion = minSdk->value;
+ app_info.min_sdk_version = min_sdk->value;
}
}
-
- return appInfo;
+ return app_info;
}
return {};
}
@@ -751,38 +758,36 @@
* Precondition: ResourceTable doesn't have any IDs assigned yet, nor is it
* linked.
* Postcondition: ResourceTable has only one package left. All others are
- * stripped, or there
- * is an error and false is returned.
+ * stripped, or there is an error and false is returned.
*/
- bool verifyNoExternalPackages() {
- auto isExtPackageFunc =
+ bool VerifyNoExternalPackages() {
+ auto is_ext_package_func =
[&](const std::unique_ptr<ResourceTablePackage>& pkg) -> bool {
- return mContext->getCompilationPackage() != pkg->name || !pkg->id ||
- pkg->id.value() != mContext->getPackageId();
+ return context_->GetCompilationPackage() != pkg->name || !pkg->id ||
+ pkg->id.value() != context_->GetPackageId();
};
bool error = false;
- for (const auto& package : mFinalTable.packages) {
- if (isExtPackageFunc(package)) {
+ for (const auto& package : final_table_.packages) {
+ if (is_ext_package_func(package)) {
// We have a package that is not related to the one we're building!
for (const auto& type : package->types) {
for (const auto& entry : type->entries) {
- ResourceNameRef resName(package->name, type->type, entry->name);
+ ResourceNameRef res_name(package->name, type->type, entry->name);
- for (const auto& configValue : entry->values) {
+ for (const auto& config_value : entry->values) {
// Special case the occurrence of an ID that is being generated
- // for the
- // 'android' package. This is due to legacy reasons.
- if (valueCast<Id>(configValue->value.get()) &&
+ // for the 'android' package. This is due to legacy reasons.
+ if (ValueCast<Id>(config_value->value.get()) &&
package->name == "android") {
- mContext->getDiagnostics()->warn(
- DiagMessage(configValue->value->getSource())
- << "generated id '" << resName << "' for external package '"
- << package->name << "'");
+ context_->GetDiagnostics()->Warn(
+ DiagMessage(config_value->value->GetSource())
+ << "generated id '" << res_name
+ << "' for external package '" << package->name << "'");
} else {
- mContext->getDiagnostics()->error(
- DiagMessage(configValue->value->getSource())
- << "defined resource '" << resName
+ context_->GetDiagnostics()->Error(
+ DiagMessage(config_value->value->GetSource())
+ << "defined resource '" << res_name
<< "' for external package '" << package->name << "'");
error = true;
}
@@ -792,21 +797,21 @@
}
}
- auto newEndIter =
- std::remove_if(mFinalTable.packages.begin(), mFinalTable.packages.end(),
- isExtPackageFunc);
- mFinalTable.packages.erase(newEndIter, mFinalTable.packages.end());
+ auto new_end_iter =
+ std::remove_if(final_table_.packages.begin(),
+ final_table_.packages.end(), is_ext_package_func);
+ final_table_.packages.erase(new_end_iter, final_table_.packages.end());
return !error;
}
/**
* Returns true if no IDs have been set, false otherwise.
*/
- bool verifyNoIdsSet() {
- for (const auto& package : mFinalTable.packages) {
+ bool VerifyNoIdsSet() {
+ for (const auto& package : final_table_.packages) {
for (const auto& type : package->types) {
if (type->id) {
- mContext->getDiagnostics()->error(
+ context_->GetDiagnostics()->Error(
DiagMessage() << "type " << type->type << " has ID " << std::hex
<< (int)type->id.value() << std::dec
<< " assigned");
@@ -815,9 +820,9 @@
for (const auto& entry : type->entries) {
if (entry->id) {
- ResourceNameRef resName(package->name, type->type, entry->name);
- mContext->getDiagnostics()->error(
- DiagMessage() << "entry " << resName << " has ID " << std::hex
+ ResourceNameRef res_name(package->name, type->type, entry->name);
+ context_->GetDiagnostics()->Error(
+ DiagMessage() << "entry " << res_name << " has ID " << std::hex
<< (int)entry->id.value() << std::dec
<< " assigned");
return false;
@@ -828,265 +833,261 @@
return true;
}
- std::unique_ptr<IArchiveWriter> makeArchiveWriter(const StringPiece& out) {
- if (mOptions.outputToDirectory) {
- return createDirectoryArchiveWriter(mContext->getDiagnostics(), out);
+ std::unique_ptr<IArchiveWriter> MakeArchiveWriter(const StringPiece& out) {
+ if (options_.output_to_directory) {
+ return CreateDirectoryArchiveWriter(context_->GetDiagnostics(), out);
} else {
- return createZipFileArchiveWriter(mContext->getDiagnostics(), out);
+ return CreateZipFileArchiveWriter(context_->GetDiagnostics(), out);
}
}
- bool flattenTable(ResourceTable* table, IArchiveWriter* writer) {
+ bool FlattenTable(ResourceTable* table, IArchiveWriter* writer) {
BigBuffer buffer(1024);
TableFlattener flattener(&buffer);
- if (!flattener.consume(mContext, table)) {
+ if (!flattener.Consume(context_, table)) {
return false;
}
- if (writer->startEntry("resources.arsc", ArchiveEntry::kAlign)) {
- if (writer->writeEntry(buffer)) {
- if (writer->finishEntry()) {
+ if (writer->StartEntry("resources.arsc", ArchiveEntry::kAlign)) {
+ if (writer->WriteEntry(buffer)) {
+ if (writer->FinishEntry()) {
return true;
}
}
}
- mContext->getDiagnostics()->error(
+ context_->GetDiagnostics()->Error(
DiagMessage() << "failed to write resources.arsc to archive");
return false;
}
- bool flattenTableToPb(ResourceTable* table, IArchiveWriter* writer) {
+ bool FlattenTableToPb(ResourceTable* table, IArchiveWriter* writer) {
// Create the file/zip entry.
- if (!writer->startEntry("resources.arsc.flat", 0)) {
- mContext->getDiagnostics()->error(DiagMessage() << "failed to open");
+ if (!writer->StartEntry("resources.arsc.flat", 0)) {
+ context_->GetDiagnostics()->Error(DiagMessage() << "failed to open");
return false;
}
// Make sure CopyingOutputStreamAdaptor is deleted before we call
- // writer->finishEntry().
+ // writer->FinishEntry().
{
// Wrap our IArchiveWriter with an adaptor that implements the
- // ZeroCopyOutputStream
- // interface.
+ // ZeroCopyOutputStream interface.
CopyingOutputStreamAdaptor adaptor(writer);
- std::unique_ptr<pb::ResourceTable> pbTable = serializeTableToPb(table);
- if (!pbTable->SerializeToZeroCopyStream(&adaptor)) {
- mContext->getDiagnostics()->error(DiagMessage() << "failed to write");
+ std::unique_ptr<pb::ResourceTable> pb_table = SerializeTableToPb(table);
+ if (!pb_table->SerializeToZeroCopyStream(&adaptor)) {
+ context_->GetDiagnostics()->Error(DiagMessage() << "failed to write");
return false;
}
}
- if (!writer->finishEntry()) {
- mContext->getDiagnostics()->error(DiagMessage()
+ if (!writer->FinishEntry()) {
+ context_->GetDiagnostics()->Error(DiagMessage()
<< "failed to finish entry");
return false;
}
return true;
}
- bool writeJavaFile(ResourceTable* table,
- const StringPiece& packageNameToGenerate,
- const StringPiece& outPackage,
- const JavaClassGeneratorOptions& javaOptions) {
- if (!mOptions.generateJavaClassPath) {
+ bool WriteJavaFile(ResourceTable* table,
+ const StringPiece& package_name_to_generate,
+ const StringPiece& out_package,
+ const JavaClassGeneratorOptions& java_options) {
+ if (!options_.generate_java_class_path) {
return true;
}
- std::string outPath = mOptions.generateJavaClassPath.value();
- file::appendPath(&outPath, file::packageToPath(outPackage));
- if (!file::mkdirs(outPath)) {
- mContext->getDiagnostics()->error(
- DiagMessage() << "failed to create directory '" << outPath << "'");
+ std::string out_path = options_.generate_java_class_path.value();
+ file::AppendPath(&out_path, file::PackageToPath(out_package));
+ if (!file::mkdirs(out_path)) {
+ context_->GetDiagnostics()->Error(
+ DiagMessage() << "failed to create directory '" << out_path << "'");
return false;
}
- file::appendPath(&outPath, "R.java");
+ file::AppendPath(&out_path, "R.java");
- std::ofstream fout(outPath, std::ofstream::binary);
+ std::ofstream fout(out_path, std::ofstream::binary);
if (!fout) {
- mContext->getDiagnostics()->error(DiagMessage()
- << "failed writing to '" << outPath
- << "': " << strerror(errno));
+ context_->GetDiagnostics()->Error(
+ DiagMessage() << "failed writing to '" << out_path << "': "
+ << android::base::SystemErrorCodeToString(errno));
return false;
}
- JavaClassGenerator generator(mContext, table, javaOptions);
- if (!generator.generate(packageNameToGenerate, outPackage, &fout)) {
- mContext->getDiagnostics()->error(DiagMessage(outPath)
+ JavaClassGenerator generator(context_, table, java_options);
+ if (!generator.Generate(package_name_to_generate, out_package, &fout)) {
+ context_->GetDiagnostics()->Error(DiagMessage(out_path)
<< generator.getError());
return false;
}
if (!fout) {
- mContext->getDiagnostics()->error(DiagMessage()
- << "failed writing to '" << outPath
- << "': " << strerror(errno));
+ context_->GetDiagnostics()->Error(
+ DiagMessage() << "failed writing to '" << out_path << "': "
+ << android::base::SystemErrorCodeToString(errno));
}
return true;
}
- bool writeManifestJavaFile(xml::XmlResource* manifestXml) {
- if (!mOptions.generateJavaClassPath) {
+ bool WriteManifestJavaFile(xml::XmlResource* manifest_xml) {
+ if (!options_.generate_java_class_path) {
return true;
}
- std::unique_ptr<ClassDefinition> manifestClass =
- generateManifestClass(mContext->getDiagnostics(), manifestXml);
+ std::unique_ptr<ClassDefinition> manifest_class =
+ GenerateManifestClass(context_->GetDiagnostics(), manifest_xml);
- if (!manifestClass) {
+ if (!manifest_class) {
// Something bad happened, but we already logged it, so exit.
return false;
}
- if (manifestClass->empty()) {
+ if (manifest_class->empty()) {
// Empty Manifest class, no need to generate it.
return true;
}
// Add any JavaDoc annotations to the generated class.
- for (const std::string& annotation : mOptions.javadocAnnotations) {
- std::string properAnnotation = "@";
- properAnnotation += annotation;
- manifestClass->getCommentBuilder()->appendComment(properAnnotation);
+ for (const std::string& annotation : options_.javadoc_annotations) {
+ std::string proper_annotation = "@";
+ proper_annotation += annotation;
+ manifest_class->GetCommentBuilder()->AppendComment(proper_annotation);
}
- const std::string& packageUtf8 = mContext->getCompilationPackage();
+ const std::string& package_utf8 = context_->GetCompilationPackage();
- std::string outPath = mOptions.generateJavaClassPath.value();
- file::appendPath(&outPath, file::packageToPath(packageUtf8));
+ std::string out_path = options_.generate_java_class_path.value();
+ file::AppendPath(&out_path, file::PackageToPath(package_utf8));
- if (!file::mkdirs(outPath)) {
- mContext->getDiagnostics()->error(
- DiagMessage() << "failed to create directory '" << outPath << "'");
+ if (!file::mkdirs(out_path)) {
+ context_->GetDiagnostics()->Error(
+ DiagMessage() << "failed to create directory '" << out_path << "'");
return false;
}
- file::appendPath(&outPath, "Manifest.java");
+ file::AppendPath(&out_path, "Manifest.java");
- std::ofstream fout(outPath, std::ofstream::binary);
+ std::ofstream fout(out_path, std::ofstream::binary);
if (!fout) {
- mContext->getDiagnostics()->error(DiagMessage()
- << "failed writing to '" << outPath
- << "': " << strerror(errno));
+ context_->GetDiagnostics()->Error(
+ DiagMessage() << "failed writing to '" << out_path << "': "
+ << android::base::SystemErrorCodeToString(errno));
return false;
}
- if (!ClassDefinition::writeJavaFile(manifestClass.get(), packageUtf8, true,
- &fout)) {
- mContext->getDiagnostics()->error(DiagMessage()
- << "failed writing to '" << outPath
- << "': " << strerror(errno));
+ if (!ClassDefinition::WriteJavaFile(manifest_class.get(), package_utf8,
+ true, &fout)) {
+ context_->GetDiagnostics()->Error(
+ DiagMessage() << "failed writing to '" << out_path << "': "
+ << android::base::SystemErrorCodeToString(errno));
return false;
}
return true;
}
- bool writeProguardFile(const Maybe<std::string>& out,
- const proguard::KeepSet& keepSet) {
+ bool WriteProguardFile(const Maybe<std::string>& out,
+ const proguard::KeepSet& keep_set) {
if (!out) {
return true;
}
- const std::string& outPath = out.value();
- std::ofstream fout(outPath, std::ofstream::binary);
+ const std::string& out_path = out.value();
+ std::ofstream fout(out_path, std::ofstream::binary);
if (!fout) {
- mContext->getDiagnostics()->error(DiagMessage()
- << "failed to open '" << outPath
- << "': " << strerror(errno));
+ context_->GetDiagnostics()->Error(
+ DiagMessage() << "failed to open '" << out_path << "': "
+ << android::base::SystemErrorCodeToString(errno));
return false;
}
- proguard::writeKeepSet(&fout, keepSet);
+ proguard::WriteKeepSet(&fout, keep_set);
if (!fout) {
- mContext->getDiagnostics()->error(DiagMessage()
- << "failed writing to '" << outPath
- << "': " << strerror(errno));
+ context_->GetDiagnostics()->Error(
+ DiagMessage() << "failed writing to '" << out_path << "': "
+ << android::base::SystemErrorCodeToString(errno));
return false;
}
return true;
}
- std::unique_ptr<ResourceTable> loadStaticLibrary(const std::string& input,
- std::string* outError) {
+ std::unique_ptr<ResourceTable> LoadStaticLibrary(const std::string& input,
+ std::string* out_error) {
std::unique_ptr<io::ZipFileCollection> collection =
- io::ZipFileCollection::create(input, outError);
+ io::ZipFileCollection::Create(input, out_error);
if (!collection) {
return {};
}
- return loadTablePbFromCollection(collection.get());
+ return LoadTablePbFromCollection(collection.get());
}
- std::unique_ptr<ResourceTable> loadTablePbFromCollection(
+ std::unique_ptr<ResourceTable> LoadTablePbFromCollection(
io::IFileCollection* collection) {
- io::IFile* file = collection->findFile("resources.arsc.flat");
+ io::IFile* file = collection->FindFile("resources.arsc.flat");
if (!file) {
return {};
}
- std::unique_ptr<io::IData> data = file->openAsData();
- return loadTableFromPb(file->getSource(), data->data(), data->size(),
- mContext->getDiagnostics());
+ std::unique_ptr<io::IData> data = file->OpenAsData();
+ return LoadTableFromPb(file->GetSource(), data->data(), data->size(),
+ context_->GetDiagnostics());
}
- bool mergeStaticLibrary(const std::string& input, bool override) {
- if (mContext->verbose()) {
- mContext->getDiagnostics()->note(DiagMessage()
+ bool MergeStaticLibrary(const std::string& input, bool override) {
+ if (context_->IsVerbose()) {
+ context_->GetDiagnostics()->Note(DiagMessage()
<< "merging static library " << input);
}
- std::string errorStr;
+ std::string error_str;
std::unique_ptr<io::ZipFileCollection> collection =
- io::ZipFileCollection::create(input, &errorStr);
+ io::ZipFileCollection::Create(input, &error_str);
if (!collection) {
- mContext->getDiagnostics()->error(DiagMessage(input) << errorStr);
+ context_->GetDiagnostics()->Error(DiagMessage(input) << error_str);
return false;
}
std::unique_ptr<ResourceTable> table =
- loadTablePbFromCollection(collection.get());
+ LoadTablePbFromCollection(collection.get());
if (!table) {
- mContext->getDiagnostics()->error(DiagMessage(input)
+ context_->GetDiagnostics()->Error(DiagMessage(input)
<< "invalid static library");
return false;
}
- ResourceTablePackage* pkg = table->findPackageById(0x7f);
+ ResourceTablePackage* pkg = table->FindPackageById(0x7f);
if (!pkg) {
- mContext->getDiagnostics()->error(DiagMessage(input)
+ context_->GetDiagnostics()->Error(DiagMessage(input)
<< "static library has no package");
return false;
}
bool result;
- if (mOptions.noStaticLibPackages) {
+ if (options_.no_static_lib_packages) {
// Merge all resources as if they were in the compilation package. This is
- // the old
- // behaviour of aapt.
+ // the old behavior of aapt.
// Add the package to the set of --extra-packages so we emit an R.java for
- // each
- // library package.
+ // each library package.
if (!pkg->name.empty()) {
- mOptions.extraJavaPackages.insert(pkg->name);
+ options_.extra_java_packages.insert(pkg->name);
}
pkg->name = "";
if (override) {
- result = mTableMerger->mergeOverlay(Source(input), table.get(),
- collection.get());
+ result = table_merger_->MergeOverlay(Source(input), table.get(),
+ collection.get());
} else {
result =
- mTableMerger->merge(Source(input), table.get(), collection.get());
+ table_merger_->Merge(Source(input), table.get(), collection.get());
}
} else {
// This is the proper way to merge libraries, where the package name is
- // preserved
- // and resource names are mangled.
- result = mTableMerger->mergeAndMangle(Source(input), pkg->name,
- table.get(), collection.get());
+ // preserved and resource names are mangled.
+ result = table_merger_->MergeAndMangle(Source(input), pkg->name,
+ table.get(), collection.get());
}
if (!result) {
@@ -1094,52 +1095,52 @@
}
// Make sure to move the collection into the set of IFileCollections.
- mCollections.push_back(std::move(collection));
+ collections_.push_back(std::move(collection));
return true;
}
- bool mergeResourceTable(io::IFile* file, bool override) {
- if (mContext->verbose()) {
- mContext->getDiagnostics()->note(
- DiagMessage() << "merging resource table " << file->getSource());
+ bool MergeResourceTable(io::IFile* file, bool override) {
+ if (context_->IsVerbose()) {
+ context_->GetDiagnostics()->Note(
+ DiagMessage() << "merging resource table " << file->GetSource());
}
- std::unique_ptr<io::IData> data = file->openAsData();
+ std::unique_ptr<io::IData> data = file->OpenAsData();
if (!data) {
- mContext->getDiagnostics()->error(DiagMessage(file->getSource())
+ context_->GetDiagnostics()->Error(DiagMessage(file->GetSource())
<< "failed to open file");
return false;
}
std::unique_ptr<ResourceTable> table =
- loadTableFromPb(file->getSource(), data->data(), data->size(),
- mContext->getDiagnostics());
+ LoadTableFromPb(file->GetSource(), data->data(), data->size(),
+ context_->GetDiagnostics());
if (!table) {
return false;
}
bool result = false;
if (override) {
- result = mTableMerger->mergeOverlay(file->getSource(), table.get());
+ result = table_merger_->MergeOverlay(file->GetSource(), table.get());
} else {
- result = mTableMerger->merge(file->getSource(), table.get());
+ result = table_merger_->Merge(file->GetSource(), table.get());
}
return result;
}
- bool mergeCompiledFile(io::IFile* file, ResourceFile* fileDesc,
+ bool MergeCompiledFile(io::IFile* file, ResourceFile* file_desc,
bool override) {
- if (mContext->verbose()) {
- mContext->getDiagnostics()->note(
- DiagMessage() << "merging '" << fileDesc->name
- << "' from compiled file " << file->getSource());
+ if (context_->IsVerbose()) {
+ context_->GetDiagnostics()->Note(
+ DiagMessage() << "merging '" << file_desc->name
+ << "' from compiled file " << file->GetSource());
}
bool result = false;
if (override) {
- result = mTableMerger->mergeFileOverlay(*fileDesc, file);
+ result = table_merger_->MergeFileOverlay(*file_desc, file);
} else {
- result = mTableMerger->mergeFile(*fileDesc, file);
+ result = table_merger_->MergeFile(*file_desc, file);
}
if (!result) {
@@ -1147,24 +1148,24 @@
}
// Add the exports of this file to the table.
- for (SourcedResourceName& exportedSymbol : fileDesc->exportedSymbols) {
- if (exportedSymbol.name.package.empty()) {
- exportedSymbol.name.package = mContext->getCompilationPackage();
+ for (SourcedResourceName& exported_symbol : file_desc->exported_symbols) {
+ if (exported_symbol.name.package.empty()) {
+ exported_symbol.name.package = context_->GetCompilationPackage();
}
- ResourceNameRef resName = exportedSymbol.name;
+ ResourceNameRef res_name = exported_symbol.name;
- Maybe<ResourceName> mangledName =
- mContext->getNameMangler()->mangleName(exportedSymbol.name);
- if (mangledName) {
- resName = mangledName.value();
+ Maybe<ResourceName> mangled_name =
+ context_->GetNameMangler()->MangleName(exported_symbol.name);
+ if (mangled_name) {
+ res_name = mangled_name.value();
}
std::unique_ptr<Id> id = util::make_unique<Id>();
- id->setSource(fileDesc->source.withLine(exportedSymbol.line));
- bool result = mFinalTable.addResourceAllowMangled(
- resName, ConfigDescription::defaultConfig(), std::string(),
- std::move(id), mContext->getDiagnostics());
+ id->SetSource(file_desc->source.WithLine(exported_symbol.line));
+ bool result = final_table_.AddResourceAllowMangled(
+ res_name, ConfigDescription::DefaultConfig(), std::string(),
+ std::move(id), context_->GetDiagnostics());
if (!result) {
return false;
}
@@ -1176,35 +1177,34 @@
* Takes a path to load as a ZIP file and merges the files within into the
* master ResourceTable.
* If override is true, conflicting resources are allowed to override each
- * other, in order of
- * last seen.
+ * other, in order of last seen.
*
* An io::IFileCollection is created from the ZIP file and added to the set of
* io::IFileCollections that are open.
*/
- bool mergeArchive(const std::string& input, bool override) {
- if (mContext->verbose()) {
- mContext->getDiagnostics()->note(DiagMessage() << "merging archive "
+ bool MergeArchive(const std::string& input, bool override) {
+ if (context_->IsVerbose()) {
+ context_->GetDiagnostics()->Note(DiagMessage() << "merging archive "
<< input);
}
- std::string errorStr;
+ std::string error_str;
std::unique_ptr<io::ZipFileCollection> collection =
- io::ZipFileCollection::create(input, &errorStr);
+ io::ZipFileCollection::Create(input, &error_str);
if (!collection) {
- mContext->getDiagnostics()->error(DiagMessage(input) << errorStr);
+ context_->GetDiagnostics()->Error(DiagMessage(input) << error_str);
return false;
}
bool error = false;
- for (auto iter = collection->iterator(); iter->hasNext();) {
- if (!mergeFile(iter->next(), override)) {
+ for (auto iter = collection->Iterator(); iter->HasNext();) {
+ if (!MergeFile(iter->Next(), override)) {
error = true;
}
}
// Make sure to move the collection into the set of IFileCollections.
- mCollections.push_back(std::move(collection));
+ collections_.push_back(std::move(collection));
return !error;
}
@@ -1220,18 +1220,16 @@
*
* Otherwise the files is processed on its own.
*/
- bool mergePath(const std::string& path, bool override) {
- if (util::stringEndsWith(path, ".flata") ||
- util::stringEndsWith(path, ".jar") ||
- util::stringEndsWith(path, ".jack") ||
- util::stringEndsWith(path, ".zip")) {
- return mergeArchive(path, override);
- } else if (util::stringEndsWith(path, ".apk")) {
- return mergeStaticLibrary(path, override);
+ bool MergePath(const std::string& path, bool override) {
+ if (util::EndsWith(path, ".flata") || util::EndsWith(path, ".jar") ||
+ util::EndsWith(path, ".jack") || util::EndsWith(path, ".zip")) {
+ return MergeArchive(path, override);
+ } else if (util::EndsWith(path, ".apk")) {
+ return MergeStaticLibrary(path, override);
}
- io::IFile* file = mFileCollection->insertFile(path);
- return mergeFile(file, override);
+ io::IFile* file = file_collection_->InsertFile(path);
+ return MergeFile(file, override);
}
/**
@@ -1250,63 +1248,63 @@
* coming from a zip,
* where we could have other files like classes.dex.
*/
- bool mergeFile(io::IFile* file, bool override) {
- const Source& src = file->getSource();
- if (util::stringEndsWith(src.path, ".arsc.flat")) {
- return mergeResourceTable(file, override);
+ bool MergeFile(io::IFile* file, bool override) {
+ const Source& src = file->GetSource();
+ if (util::EndsWith(src.path, ".arsc.flat")) {
+ return MergeResourceTable(file, override);
- } else if (util::stringEndsWith(src.path, ".flat")) {
+ } else if (util::EndsWith(src.path, ".flat")) {
// Try opening the file and looking for an Export header.
- std::unique_ptr<io::IData> data = file->openAsData();
+ std::unique_ptr<io::IData> data = file->OpenAsData();
if (!data) {
- mContext->getDiagnostics()->error(DiagMessage(src) << "failed to open");
+ context_->GetDiagnostics()->Error(DiagMessage(src) << "failed to open");
return false;
}
- CompiledFileInputStream inputStream(data->data(), data->size());
- uint32_t numFiles = 0;
- if (!inputStream.ReadLittleEndian32(&numFiles)) {
- mContext->getDiagnostics()->error(DiagMessage(src)
+ CompiledFileInputStream input_stream(data->data(), data->size());
+ uint32_t num_files = 0;
+ if (!input_stream.ReadLittleEndian32(&num_files)) {
+ context_->GetDiagnostics()->Error(DiagMessage(src)
<< "failed read num files");
return false;
}
- for (uint32_t i = 0; i < numFiles; i++) {
- pb::CompiledFile compiledFile;
- if (!inputStream.ReadCompiledFile(&compiledFile)) {
- mContext->getDiagnostics()->error(
+ for (uint32_t i = 0; i < num_files; i++) {
+ pb::CompiledFile compiled_file;
+ if (!input_stream.ReadCompiledFile(&compiled_file)) {
+ context_->GetDiagnostics()->Error(
DiagMessage(src) << "failed to read compiled file header");
return false;
}
uint64_t offset, len;
- if (!inputStream.ReadDataMetaData(&offset, &len)) {
- mContext->getDiagnostics()->error(DiagMessage(src)
+ if (!input_stream.ReadDataMetaData(&offset, &len)) {
+ context_->GetDiagnostics()->Error(DiagMessage(src)
<< "failed to read data meta data");
return false;
}
- std::unique_ptr<ResourceFile> resourceFile =
- deserializeCompiledFileFromPb(compiledFile, file->getSource(),
- mContext->getDiagnostics());
- if (!resourceFile) {
+ std::unique_ptr<ResourceFile> resource_file =
+ DeserializeCompiledFileFromPb(compiled_file, file->GetSource(),
+ context_->GetDiagnostics());
+ if (!resource_file) {
return false;
}
- if (!mergeCompiledFile(file->createFileSegment(offset, len),
- resourceFile.get(), override)) {
+ if (!MergeCompiledFile(file->CreateFileSegment(offset, len),
+ resource_file.get(), override)) {
return false;
}
}
return true;
- } else if (util::stringEndsWith(src.path, ".xml") ||
- util::stringEndsWith(src.path, ".png")) {
+ } else if (util::EndsWith(src.path, ".xml") ||
+ util::EndsWith(src.path, ".png")) {
// Since AAPT compiles these file types and appends .flat to them, seeing
// their raw extensions is a sign that they weren't compiled.
- const StringPiece fileType =
- util::stringEndsWith(src.path, ".xml") ? "XML" : "PNG";
- mContext->getDiagnostics()->error(DiagMessage(src)
- << "uncompiled " << fileType
+ const StringPiece file_type =
+ util::EndsWith(src.path, ".xml") ? "XML" : "PNG";
+ context_->GetDiagnostics()->Error(DiagMessage(src)
+ << "uncompiled " << file_type
<< " file passed as argument. Must be "
"compiled first into .flat file.");
return false;
@@ -1318,95 +1316,95 @@
return true;
}
- std::unique_ptr<xml::XmlResource> generateSplitManifest(
- const AppInfo& appInfo, const SplitConstraints& constraints) {
+ std::unique_ptr<xml::XmlResource> GenerateSplitManifest(
+ const AppInfo& app_info, const SplitConstraints& constraints) {
std::unique_ptr<xml::XmlResource> doc =
util::make_unique<xml::XmlResource>();
- std::unique_ptr<xml::Namespace> namespaceAndroid =
+ std::unique_ptr<xml::Namespace> namespace_android =
util::make_unique<xml::Namespace>();
- namespaceAndroid->namespaceUri = xml::kSchemaAndroid;
- namespaceAndroid->namespacePrefix = "android";
+ namespace_android->namespace_uri = xml::kSchemaAndroid;
+ namespace_android->namespace_prefix = "android";
- std::unique_ptr<xml::Element> manifestEl =
+ std::unique_ptr<xml::Element> manifest_el =
util::make_unique<xml::Element>();
- manifestEl->name = "manifest";
- manifestEl->attributes.push_back(
- xml::Attribute{"", "package", appInfo.package});
+ manifest_el->name = "manifest";
+ manifest_el->attributes.push_back(
+ xml::Attribute{"", "package", app_info.package});
- if (appInfo.versionCode) {
- manifestEl->attributes.push_back(
+ if (app_info.version_code) {
+ manifest_el->attributes.push_back(
xml::Attribute{xml::kSchemaAndroid, "versionCode",
- std::to_string(appInfo.versionCode.value())});
+ std::to_string(app_info.version_code.value())});
}
- if (appInfo.revisionCode) {
- manifestEl->attributes.push_back(
+ if (app_info.revision_code) {
+ manifest_el->attributes.push_back(
xml::Attribute{xml::kSchemaAndroid, "revisionCode",
- std::to_string(appInfo.revisionCode.value())});
+ std::to_string(app_info.revision_code.value())});
}
- std::stringstream splitName;
- splitName << "config." << util::joiner(constraints.configs, "_");
+ std::stringstream split_name;
+ split_name << "config." << util::Joiner(constraints.configs, "_");
- manifestEl->attributes.push_back(
- xml::Attribute{"", "split", splitName.str()});
+ manifest_el->attributes.push_back(
+ xml::Attribute{"", "split", split_name.str()});
- std::unique_ptr<xml::Element> applicationEl =
+ std::unique_ptr<xml::Element> application_el =
util::make_unique<xml::Element>();
- applicationEl->name = "application";
- applicationEl->attributes.push_back(
+ application_el->name = "application";
+ application_el->attributes.push_back(
xml::Attribute{xml::kSchemaAndroid, "hasCode", "false"});
- manifestEl->addChild(std::move(applicationEl));
- namespaceAndroid->addChild(std::move(manifestEl));
- doc->root = std::move(namespaceAndroid);
+ manifest_el->AddChild(std::move(application_el));
+ namespace_android->AddChild(std::move(manifest_el));
+ doc->root = std::move(namespace_android);
return doc;
}
/**
* Writes the AndroidManifest, ResourceTable, and all XML files referenced by
- * the ResourceTable
- * to the IArchiveWriter.
+ * the ResourceTable to the IArchiveWriter.
*/
- bool writeApk(IArchiveWriter* writer, proguard::KeepSet* keepSet,
+ bool WriteApk(IArchiveWriter* writer, proguard::KeepSet* keep_set,
xml::XmlResource* manifest, ResourceTable* table) {
- const bool keepRawValues = mOptions.staticLib;
- bool result = flattenXml(manifest, "AndroidManifest.xml", {}, keepRawValues,
- writer, mContext);
+ const bool keep_raw_values = options_.static_lib;
+ bool result = FlattenXml(manifest, "AndroidManifest.xml", {},
+ keep_raw_values, writer, context_);
if (!result) {
return false;
}
- ResourceFileFlattenerOptions fileFlattenerOptions;
- fileFlattenerOptions.keepRawValues = keepRawValues;
- fileFlattenerOptions.doNotCompressAnything = mOptions.doNotCompressAnything;
- fileFlattenerOptions.extensionsToNotCompress =
- mOptions.extensionsToNotCompress;
- fileFlattenerOptions.noAutoVersion = mOptions.noAutoVersion;
- fileFlattenerOptions.noVersionVectors = mOptions.noVersionVectors;
- fileFlattenerOptions.noXmlNamespaces = mOptions.noXmlNamespaces;
- fileFlattenerOptions.updateProguardSpec =
- static_cast<bool>(mOptions.generateProguardRulesPath);
+ ResourceFileFlattenerOptions file_flattener_options;
+ file_flattener_options.keep_raw_values = keep_raw_values;
+ file_flattener_options.do_not_compress_anything =
+ options_.do_not_compress_anything;
+ file_flattener_options.extensions_to_not_compress =
+ options_.extensions_to_not_compress;
+ file_flattener_options.no_auto_version = options_.no_auto_version;
+ file_flattener_options.no_version_vectors = options_.no_version_vectors;
+ file_flattener_options.no_xml_namespaces = options_.no_xml_namespaces;
+ file_flattener_options.update_proguard_spec =
+ static_cast<bool>(options_.generate_proguard_rules_path);
- ResourceFileFlattener fileFlattener(fileFlattenerOptions, mContext,
- keepSet);
+ ResourceFileFlattener file_flattener(file_flattener_options, context_,
+ keep_set);
- if (!fileFlattener.flatten(table, writer)) {
- mContext->getDiagnostics()->error(DiagMessage()
+ if (!file_flattener.Flatten(table, writer)) {
+ context_->GetDiagnostics()->Error(DiagMessage()
<< "failed linking file resources");
return false;
}
- if (mOptions.staticLib) {
- if (!flattenTableToPb(table, writer)) {
- mContext->getDiagnostics()->error(
+ if (options_.static_lib) {
+ if (!FlattenTableToPb(table, writer)) {
+ context_->GetDiagnostics()->Error(
DiagMessage() << "failed to write resources.arsc.flat");
return false;
}
} else {
- if (!flattenTable(table, writer)) {
- mContext->getDiagnostics()->error(DiagMessage()
+ if (!FlattenTable(table, writer)) {
+ context_->GetDiagnostics()->Error(DiagMessage()
<< "failed to write resources.arsc");
return false;
}
@@ -1414,118 +1412,118 @@
return true;
}
- int run(const std::vector<std::string>& inputFiles) {
+ int Run(const std::vector<std::string>& input_files) {
// Load the AndroidManifest.xml
- std::unique_ptr<xml::XmlResource> manifestXml =
- loadXml(mOptions.manifestPath, mContext->getDiagnostics());
- if (!manifestXml) {
+ std::unique_ptr<xml::XmlResource> manifest_xml =
+ LoadXml(options_.manifest_path, context_->GetDiagnostics());
+ if (!manifest_xml) {
return 1;
}
// First extract the Package name without modifying it (via
// --rename-manifest-package).
- if (Maybe<AppInfo> maybeAppInfo = extractAppInfoFromManifest(
- manifestXml.get(), mContext->getDiagnostics())) {
- const AppInfo& appInfo = maybeAppInfo.value();
- mContext->setCompilationPackage(appInfo.package);
+ if (Maybe<AppInfo> maybe_app_info = ExtractAppInfoFromManifest(
+ manifest_xml.get(), context_->GetDiagnostics())) {
+ const AppInfo& app_info = maybe_app_info.value();
+ context_->SetCompilationPackage(app_info.package);
}
- ManifestFixer manifestFixer(mOptions.manifestFixerOptions);
- if (!manifestFixer.consume(mContext, manifestXml.get())) {
+ ManifestFixer manifest_fixer(options_.manifest_fixer_options);
+ if (!manifest_fixer.Consume(context_, manifest_xml.get())) {
return 1;
}
- Maybe<AppInfo> maybeAppInfo = extractAppInfoFromManifest(
- manifestXml.get(), mContext->getDiagnostics());
- if (!maybeAppInfo) {
+ Maybe<AppInfo> maybe_app_info = ExtractAppInfoFromManifest(
+ manifest_xml.get(), context_->GetDiagnostics());
+ if (!maybe_app_info) {
return 1;
}
- const AppInfo& appInfo = maybeAppInfo.value();
- if (appInfo.minSdkVersion) {
- if (Maybe<int> maybeMinSdkVersion =
- ResourceUtils::parseSdkVersion(appInfo.minSdkVersion.value())) {
- mContext->setMinSdkVersion(maybeMinSdkVersion.value());
+ const AppInfo& app_info = maybe_app_info.value();
+ if (app_info.min_sdk_version) {
+ if (Maybe<int> maybe_min_sdk_version = ResourceUtils::ParseSdkVersion(
+ app_info.min_sdk_version.value())) {
+ context_->SetMinSdkVersion(maybe_min_sdk_version.value());
}
}
- mContext->setNameManglerPolicy(
- NameManglerPolicy{mContext->getCompilationPackage()});
- if (mContext->getCompilationPackage() == "android") {
- mContext->setPackageId(0x01);
+ context_->SetNameManglerPolicy(
+ NameManglerPolicy{context_->GetCompilationPackage()});
+ if (context_->GetCompilationPackage() == "android") {
+ context_->SetPackageId(0x01);
} else {
- mContext->setPackageId(0x7f);
+ context_->SetPackageId(0x7f);
}
- if (!loadSymbolsFromIncludePaths()) {
+ if (!LoadSymbolsFromIncludePaths()) {
return 1;
}
- TableMergerOptions tableMergerOptions;
- tableMergerOptions.autoAddOverlay = mOptions.autoAddOverlay;
- mTableMerger = util::make_unique<TableMerger>(mContext, &mFinalTable,
- tableMergerOptions);
+ TableMergerOptions table_merger_options;
+ table_merger_options.auto_add_overlay = options_.auto_add_overlay;
+ table_merger_ = util::make_unique<TableMerger>(context_, &final_table_,
+ table_merger_options);
- if (mContext->verbose()) {
- mContext->getDiagnostics()->note(DiagMessage()
+ if (context_->IsVerbose()) {
+ context_->GetDiagnostics()->Note(DiagMessage()
<< "linking package '"
- << mContext->getCompilationPackage()
+ << context_->GetCompilationPackage()
<< "' with package ID " << std::hex
- << (int)mContext->getPackageId());
+ << (int)context_->GetPackageId());
}
- for (const std::string& input : inputFiles) {
- if (!mergePath(input, false)) {
- mContext->getDiagnostics()->error(DiagMessage()
+ for (const std::string& input : input_files) {
+ if (!MergePath(input, false)) {
+ context_->GetDiagnostics()->Error(DiagMessage()
<< "failed parsing input");
return 1;
}
}
- for (const std::string& input : mOptions.overlayFiles) {
- if (!mergePath(input, true)) {
- mContext->getDiagnostics()->error(DiagMessage()
+ for (const std::string& input : options_.overlay_files) {
+ if (!MergePath(input, true)) {
+ context_->GetDiagnostics()->Error(DiagMessage()
<< "failed parsing overlays");
return 1;
}
}
- if (!verifyNoExternalPackages()) {
+ if (!VerifyNoExternalPackages()) {
return 1;
}
- if (!mOptions.staticLib) {
+ if (!options_.static_lib) {
PrivateAttributeMover mover;
- if (!mover.consume(mContext, &mFinalTable)) {
- mContext->getDiagnostics()->error(
+ if (!mover.Consume(context_, &final_table_)) {
+ context_->GetDiagnostics()->Error(
DiagMessage() << "failed moving private attributes");
return 1;
}
// Assign IDs if we are building a regular app.
- IdAssigner idAssigner(&mOptions.stableIdMap);
- if (!idAssigner.consume(mContext, &mFinalTable)) {
- mContext->getDiagnostics()->error(DiagMessage()
+ IdAssigner id_assigner(&options_.stable_id_map);
+ if (!id_assigner.Consume(context_, &final_table_)) {
+ context_->GetDiagnostics()->Error(DiagMessage()
<< "failed assigning IDs");
return 1;
}
// Now grab each ID and emit it as a file.
- if (mOptions.resourceIdMapPath) {
- for (auto& package : mFinalTable.packages) {
+ if (options_.resource_id_map_path) {
+ for (auto& package : final_table_.packages) {
for (auto& type : package->types) {
for (auto& entry : type->entries) {
ResourceName name(package->name, type->type, entry->name);
// The IDs are guaranteed to exist.
- mOptions.stableIdMap[std::move(name)] = ResourceId(
+ options_.stable_id_map[std::move(name)] = ResourceId(
package->id.value(), type->id.value(), entry->id.value());
}
}
}
- if (!writeStableIdMapToPath(mContext->getDiagnostics(),
- mOptions.stableIdMap,
- mOptions.resourceIdMapPath.value())) {
+ if (!WriteStableIdMapToPath(context_->GetDiagnostics(),
+ options_.stable_id_map,
+ options_.resource_id_map_path.value())) {
return 1;
}
}
@@ -1533,80 +1531,80 @@
// Static libs are merged with other apps, and ID collisions are bad, so
// verify that
// no IDs have been set.
- if (!verifyNoIdsSet()) {
+ if (!VerifyNoIdsSet()) {
return 1;
}
}
// Add the names to mangle based on our source merge earlier.
- mContext->setNameManglerPolicy(NameManglerPolicy{
- mContext->getCompilationPackage(), mTableMerger->getMergedPackages()});
+ context_->SetNameManglerPolicy(NameManglerPolicy{
+ context_->GetCompilationPackage(), table_merger_->merged_packages()});
// Add our table to the symbol table.
- mContext->getExternalSymbols()->prependSource(
- util::make_unique<ResourceTableSymbolSource>(&mFinalTable));
+ context_->GetExternalSymbols()->PrependSource(
+ util::make_unique<ResourceTableSymbolSource>(&final_table_));
ReferenceLinker linker;
- if (!linker.consume(mContext, &mFinalTable)) {
- mContext->getDiagnostics()->error(DiagMessage()
+ if (!linker.Consume(context_, &final_table_)) {
+ context_->GetDiagnostics()->Error(DiagMessage()
<< "failed linking references");
return 1;
}
- if (mOptions.staticLib) {
- if (!mOptions.products.empty()) {
- mContext->getDiagnostics()
- ->warn(DiagMessage()
+ if (options_.static_lib) {
+ if (!options_.products.empty()) {
+ context_->GetDiagnostics()
+ ->Warn(DiagMessage()
<< "can't select products when building static library");
}
} else {
- ProductFilter productFilter(mOptions.products);
- if (!productFilter.consume(mContext, &mFinalTable)) {
- mContext->getDiagnostics()->error(DiagMessage()
+ ProductFilter product_filter(options_.products);
+ if (!product_filter.Consume(context_, &final_table_)) {
+ context_->GetDiagnostics()->Error(DiagMessage()
<< "failed stripping products");
return 1;
}
}
- if (!mOptions.noAutoVersion) {
+ if (!options_.no_auto_version) {
AutoVersioner versioner;
- if (!versioner.consume(mContext, &mFinalTable)) {
- mContext->getDiagnostics()->error(DiagMessage()
+ if (!versioner.Consume(context_, &final_table_)) {
+ context_->GetDiagnostics()->Error(DiagMessage()
<< "failed versioning styles");
return 1;
}
}
- if (!mOptions.staticLib && mContext->getMinSdkVersion() > 0) {
- if (mContext->verbose()) {
- mContext->getDiagnostics()->note(
+ if (!options_.static_lib && context_->GetMinSdkVersion() > 0) {
+ if (context_->IsVerbose()) {
+ context_->GetDiagnostics()->Note(
DiagMessage() << "collapsing resource versions for minimum SDK "
- << mContext->getMinSdkVersion());
+ << context_->GetMinSdkVersion());
}
VersionCollapser collapser;
- if (!collapser.consume(mContext, &mFinalTable)) {
+ if (!collapser.Consume(context_, &final_table_)) {
return 1;
}
}
- if (!mOptions.noResourceDeduping) {
+ if (!options_.no_resource_deduping) {
ResourceDeduper deduper;
- if (!deduper.consume(mContext, &mFinalTable)) {
- mContext->getDiagnostics()->error(DiagMessage()
+ if (!deduper.Consume(context_, &final_table_)) {
+ context_->GetDiagnostics()->Error(DiagMessage()
<< "failed deduping resources");
return 1;
}
}
- proguard::KeepSet proguardKeepSet;
- proguard::KeepSet proguardMainDexKeepSet;
+ proguard::KeepSet proguard_keep_set;
+ proguard::KeepSet proguard_main_dex_keep_set;
- if (mOptions.staticLib) {
- if (mOptions.tableSplitterOptions.configFilter != nullptr ||
- mOptions.tableSplitterOptions.preferredDensity) {
- mContext->getDiagnostics()
- ->warn(DiagMessage()
+ if (options_.static_lib) {
+ if (options_.table_splitter_options.config_filter != nullptr ||
+ options_.table_splitter_options.preferred_density) {
+ context_->GetDiagnostics()
+ ->Warn(DiagMessage()
<< "can't strip resources when building static library");
}
} else {
@@ -1615,73 +1613,73 @@
// than or equal to the minSdk. Otherwise the resources that have had
// their SDK version
// stripped due to minSdk won't ever match.
- std::vector<SplitConstraints> adjustedConstraintsList;
- adjustedConstraintsList.reserve(mOptions.splitConstraints.size());
- for (const SplitConstraints& constraints : mOptions.splitConstraints) {
- SplitConstraints adjustedConstraints;
+ std::vector<SplitConstraints> adjusted_constraints_list;
+ adjusted_constraints_list.reserve(options_.split_constraints.size());
+ for (const SplitConstraints& constraints : options_.split_constraints) {
+ SplitConstraints adjusted_constraints;
for (const ConfigDescription& config : constraints.configs) {
- if (config.sdkVersion <= mContext->getMinSdkVersion()) {
- adjustedConstraints.configs.insert(config.copyWithoutSdkVersion());
+ if (config.sdkVersion <= context_->GetMinSdkVersion()) {
+ adjusted_constraints.configs.insert(config.CopyWithoutSdkVersion());
} else {
- adjustedConstraints.configs.insert(config);
+ adjusted_constraints.configs.insert(config);
}
}
- adjustedConstraintsList.push_back(std::move(adjustedConstraints));
+ adjusted_constraints_list.push_back(std::move(adjusted_constraints));
}
- TableSplitter tableSplitter(adjustedConstraintsList,
- mOptions.tableSplitterOptions);
- if (!tableSplitter.verifySplitConstraints(mContext)) {
+ TableSplitter table_splitter(adjusted_constraints_list,
+ options_.table_splitter_options);
+ if (!table_splitter.VerifySplitConstraints(context_)) {
return 1;
}
- tableSplitter.splitTable(&mFinalTable);
+ table_splitter.SplitTable(&final_table_);
// Now we need to write out the Split APKs.
- auto pathIter = mOptions.splitPaths.begin();
- auto splitConstraintsIter = adjustedConstraintsList.begin();
- for (std::unique_ptr<ResourceTable>& splitTable :
- tableSplitter.getSplits()) {
- if (mContext->verbose()) {
- mContext->getDiagnostics()->note(
- DiagMessage(*pathIter)
+ auto path_iter = options_.split_paths.begin();
+ auto split_constraints_iter = adjusted_constraints_list.begin();
+ for (std::unique_ptr<ResourceTable>& split_table :
+ table_splitter.splits()) {
+ if (context_->IsVerbose()) {
+ context_->GetDiagnostics()->Note(
+ DiagMessage(*path_iter)
<< "generating split with configurations '"
- << util::joiner(splitConstraintsIter->configs, ", ") << "'");
+ << util::Joiner(split_constraints_iter->configs, ", ") << "'");
}
- std::unique_ptr<IArchiveWriter> archiveWriter =
- makeArchiveWriter(*pathIter);
- if (!archiveWriter) {
- mContext->getDiagnostics()->error(DiagMessage()
+ std::unique_ptr<IArchiveWriter> archive_writer =
+ MakeArchiveWriter(*path_iter);
+ if (!archive_writer) {
+ context_->GetDiagnostics()->Error(DiagMessage()
<< "failed to create archive");
return 1;
}
// Generate an AndroidManifest.xml for each split.
- std::unique_ptr<xml::XmlResource> splitManifest =
- generateSplitManifest(appInfo, *splitConstraintsIter);
+ std::unique_ptr<xml::XmlResource> split_manifest =
+ GenerateSplitManifest(app_info, *split_constraints_iter);
XmlReferenceLinker linker;
- if (!linker.consume(mContext, splitManifest.get())) {
- mContext->getDiagnostics()->error(
+ if (!linker.Consume(context_, split_manifest.get())) {
+ context_->GetDiagnostics()->Error(
DiagMessage() << "failed to create Split AndroidManifest.xml");
return 1;
}
- if (!writeApk(archiveWriter.get(), &proguardKeepSet,
- splitManifest.get(), splitTable.get())) {
+ if (!WriteApk(archive_writer.get(), &proguard_keep_set,
+ split_manifest.get(), split_table.get())) {
return 1;
}
- ++pathIter;
- ++splitConstraintsIter;
+ ++path_iter;
+ ++split_constraints_iter;
}
}
// Start writing the base APK.
- std::unique_ptr<IArchiveWriter> archiveWriter =
- makeArchiveWriter(mOptions.outputPath);
- if (!archiveWriter) {
- mContext->getDiagnostics()->error(DiagMessage()
+ std::unique_ptr<IArchiveWriter> archive_writer =
+ MakeArchiveWriter(options_.output_path);
+ if (!archive_writer) {
+ context_->GetDiagnostics()->Error(DiagMessage()
<< "failed to create archive");
return 1;
}
@@ -1692,35 +1690,35 @@
// from the name
// (aka, which package the AndroidManifest.xml is coming from).
// So we give it a package name so it can see local resources.
- manifestXml->file.name.package = mContext->getCompilationPackage();
+ manifest_xml->file.name.package = context_->GetCompilationPackage();
- XmlReferenceLinker manifestLinker;
- if (manifestLinker.consume(mContext, manifestXml.get())) {
- if (mOptions.generateProguardRulesPath &&
- !proguard::collectProguardRulesForManifest(
- Source(mOptions.manifestPath), manifestXml.get(),
- &proguardKeepSet)) {
+ XmlReferenceLinker manifest_linker;
+ if (manifest_linker.Consume(context_, manifest_xml.get())) {
+ if (options_.generate_proguard_rules_path &&
+ !proguard::CollectProguardRulesForManifest(
+ Source(options_.manifest_path), manifest_xml.get(),
+ &proguard_keep_set)) {
error = true;
}
- if (mOptions.generateMainDexProguardRulesPath &&
- !proguard::collectProguardRulesForManifest(
- Source(mOptions.manifestPath), manifestXml.get(),
- &proguardMainDexKeepSet, true)) {
+ if (options_.generate_main_dex_proguard_rules_path &&
+ !proguard::CollectProguardRulesForManifest(
+ Source(options_.manifest_path), manifest_xml.get(),
+ &proguard_main_dex_keep_set, true)) {
error = true;
}
- if (mOptions.generateJavaClassPath) {
- if (!writeManifestJavaFile(manifestXml.get())) {
+ if (options_.generate_java_class_path) {
+ if (!WriteManifestJavaFile(manifest_xml.get())) {
error = true;
}
}
- if (mOptions.noXmlNamespaces) {
+ if (options_.no_xml_namespaces) {
// PackageParser will fail if URIs are removed from
// AndroidManifest.xml.
- XmlNamespaceRemover namespaceRemover(true /* keepUris */);
- if (!namespaceRemover.consume(mContext, manifestXml.get())) {
+ XmlNamespaceRemover namespace_remover(true /* keepUris */);
+ if (!namespace_remover.Consume(context_, manifest_xml.get())) {
error = true;
}
}
@@ -1730,382 +1728,385 @@
}
if (error) {
- mContext->getDiagnostics()->error(DiagMessage()
+ context_->GetDiagnostics()->Error(DiagMessage()
<< "failed processing manifest");
return 1;
}
- if (!writeApk(archiveWriter.get(), &proguardKeepSet, manifestXml.get(),
- &mFinalTable)) {
+ if (!WriteApk(archive_writer.get(), &proguard_keep_set, manifest_xml.get(),
+ &final_table_)) {
return 1;
}
- if (mOptions.generateJavaClassPath) {
+ if (options_.generate_java_class_path) {
JavaClassGeneratorOptions options;
options.types = JavaClassGeneratorOptions::SymbolTypes::kAll;
- options.javadocAnnotations = mOptions.javadocAnnotations;
+ options.javadoc_annotations = options_.javadoc_annotations;
- if (mOptions.staticLib || mOptions.generateNonFinalIds) {
- options.useFinal = false;
+ if (options_.static_lib || options_.generate_non_final_ids) {
+ options.use_final = false;
}
- const StringPiece actualPackage = mContext->getCompilationPackage();
- StringPiece outputPackage = mContext->getCompilationPackage();
- if (mOptions.customJavaPackage) {
+ const StringPiece actual_package = context_->GetCompilationPackage();
+ StringPiece output_package = context_->GetCompilationPackage();
+ if (options_.custom_java_package) {
// Override the output java package to the custom one.
- outputPackage = mOptions.customJavaPackage.value();
+ output_package = options_.custom_java_package.value();
}
- if (mOptions.privateSymbols) {
+ if (options_.private_symbols) {
// If we defined a private symbols package, we only emit Public symbols
// to the original package, and private and public symbols to the
// private package.
options.types = JavaClassGeneratorOptions::SymbolTypes::kPublic;
- if (!writeJavaFile(&mFinalTable, mContext->getCompilationPackage(),
- outputPackage, options)) {
+ if (!WriteJavaFile(&final_table_, context_->GetCompilationPackage(),
+ output_package, options)) {
return 1;
}
options.types = JavaClassGeneratorOptions::SymbolTypes::kPublicPrivate;
- outputPackage = mOptions.privateSymbols.value();
+ output_package = options_.private_symbols.value();
}
- if (!writeJavaFile(&mFinalTable, actualPackage, outputPackage, options)) {
+ if (!WriteJavaFile(&final_table_, actual_package, output_package,
+ options)) {
return 1;
}
- for (const std::string& extraPackage : mOptions.extraJavaPackages) {
- if (!writeJavaFile(&mFinalTable, actualPackage, extraPackage,
+ for (const std::string& extra_package : options_.extra_java_packages) {
+ if (!WriteJavaFile(&final_table_, actual_package, extra_package,
options)) {
return 1;
}
}
}
- if (!writeProguardFile(mOptions.generateProguardRulesPath,
- proguardKeepSet)) {
+ if (!WriteProguardFile(options_.generate_proguard_rules_path,
+ proguard_keep_set)) {
return 1;
}
- if (!writeProguardFile(mOptions.generateMainDexProguardRulesPath,
- proguardMainDexKeepSet)) {
+ if (!WriteProguardFile(options_.generate_main_dex_proguard_rules_path,
+ proguard_main_dex_keep_set)) {
return 1;
}
- if (mContext->verbose()) {
- DebugPrintTableOptions debugPrintTableOptions;
- debugPrintTableOptions.showSources = true;
- Debug::printTable(&mFinalTable, debugPrintTableOptions);
+ if (context_->IsVerbose()) {
+ DebugPrintTableOptions debug_print_table_options;
+ debug_print_table_options.show_sources = true;
+ Debug::PrintTable(&final_table_, debug_print_table_options);
}
return 0;
}
private:
- LinkOptions mOptions;
- LinkContext* mContext;
- ResourceTable mFinalTable;
+ LinkOptions options_;
+ LinkContext* context_;
+ ResourceTable final_table_;
- std::unique_ptr<TableMerger> mTableMerger;
+ std::unique_ptr<TableMerger> table_merger_;
// A pointer to the FileCollection representing the filesystem (not archives).
- std::unique_ptr<io::FileCollection> mFileCollection;
+ std::unique_ptr<io::FileCollection> file_collection_;
// A vector of IFileCollections. This is mainly here to keep ownership of the
// collections.
- std::vector<std::unique_ptr<io::IFileCollection>> mCollections;
+ std::vector<std::unique_ptr<io::IFileCollection>> collections_;
// A vector of ResourceTables. This is here to retain ownership, so that the
// SymbolTable
// can use these.
- std::vector<std::unique_ptr<ResourceTable>> mStaticTableIncludes;
+ std::vector<std::unique_ptr<ResourceTable>> static_table_includes_;
};
-int link(const std::vector<StringPiece>& args) {
+int Link(const std::vector<StringPiece>& args) {
LinkContext context;
LinkOptions options;
- std::vector<std::string> overlayArgList;
- std::vector<std::string> extraJavaPackages;
+ std::vector<std::string> overlay_arg_list;
+ std::vector<std::string> extra_java_packages;
Maybe<std::string> configs;
- Maybe<std::string> preferredDensity;
- Maybe<std::string> productList;
- bool legacyXFlag = false;
- bool requireLocalization = false;
+ Maybe<std::string> preferred_density;
+ Maybe<std::string> product_list;
+ bool legacy_x_flag = false;
+ bool require_localization = false;
bool verbose = false;
- Maybe<std::string> stableIdFilePath;
- std::vector<std::string> splitArgs;
+ Maybe<std::string> stable_id_file_path;
+ std::vector<std::string> split_args;
Flags flags =
Flags()
- .requiredFlag("-o", "Output path", &options.outputPath)
- .requiredFlag("--manifest", "Path to the Android manifest to build",
- &options.manifestPath)
- .optionalFlagList("-I", "Adds an Android APK to link against",
- &options.includePaths)
- .optionalFlagList(
+ .RequiredFlag("-o", "Output path", &options.output_path)
+ .RequiredFlag("--manifest", "Path to the Android manifest to build",
+ &options.manifest_path)
+ .OptionalFlagList("-I", "Adds an Android APK to link against",
+ &options.include_paths)
+ .OptionalFlagList(
"-R",
"Compilation unit to link, using `overlay` semantics.\n"
"The last conflicting resource given takes precedence.",
- &overlayArgList)
- .optionalFlag("--java", "Directory in which to generate R.java",
- &options.generateJavaClassPath)
- .optionalFlag("--proguard",
+ &overlay_arg_list)
+ .OptionalFlag("--java", "Directory in which to generate R.java",
+ &options.generate_java_class_path)
+ .OptionalFlag("--proguard",
"Output file for generated Proguard rules",
- &options.generateProguardRulesPath)
- .optionalFlag(
+ &options.generate_proguard_rules_path)
+ .OptionalFlag(
"--proguard-main-dex",
"Output file for generated Proguard rules for the main dex",
- &options.generateMainDexProguardRulesPath)
- .optionalSwitch("--no-auto-version",
+ &options.generate_main_dex_proguard_rules_path)
+ .OptionalSwitch("--no-auto-version",
"Disables automatic style and layout SDK versioning",
- &options.noAutoVersion)
- .optionalSwitch("--no-version-vectors",
+ &options.no_auto_version)
+ .OptionalSwitch("--no-version-vectors",
"Disables automatic versioning of vector drawables. "
"Use this only\n"
"when building with vector drawable support library",
- &options.noVersionVectors)
- .optionalSwitch("--no-resource-deduping",
+ &options.no_version_vectors)
+ .OptionalSwitch("--no-resource-deduping",
"Disables automatic deduping of resources with\n"
"identical values across compatible configurations.",
- &options.noResourceDeduping)
- .optionalSwitch(
+ &options.no_resource_deduping)
+ .OptionalSwitch(
"-x",
"Legacy flag that specifies to use the package identifier 0x01",
- &legacyXFlag)
- .optionalSwitch("-z",
+ &legacy_x_flag)
+ .OptionalSwitch("-z",
"Require localization of strings marked 'suggested'",
- &requireLocalization)
- .optionalFlag(
+ &require_localization)
+ .OptionalFlag(
"-c",
"Comma separated list of configurations to include. The default\n"
"is all configurations",
&configs)
- .optionalFlag(
+ .OptionalFlag(
"--preferred-density",
"Selects the closest matching density and strips out all others.",
- &preferredDensity)
- .optionalFlag("--product",
+ &preferred_density)
+ .OptionalFlag("--product",
"Comma separated list of product names to keep",
- &productList)
- .optionalSwitch("--output-to-dir",
+ &product_list)
+ .OptionalSwitch("--output-to-dir",
"Outputs the APK contents to a directory specified "
"by -o",
- &options.outputToDirectory)
- .optionalSwitch("--no-xml-namespaces",
+ &options.output_to_directory)
+ .OptionalSwitch("--no-xml-namespaces",
"Removes XML namespace prefix and URI "
"information from AndroidManifest.xml\nand XML "
"binaries in res/*.",
- &options.noXmlNamespaces)
- .optionalFlag("--min-sdk-version",
+ &options.no_xml_namespaces)
+ .OptionalFlag("--min-sdk-version",
"Default minimum SDK version to use for "
"AndroidManifest.xml",
- &options.manifestFixerOptions.minSdkVersionDefault)
- .optionalFlag("--target-sdk-version",
- "Default target SDK version to use for "
- "AndroidManifest.xml",
- &options.manifestFixerOptions.targetSdkVersionDefault)
- .optionalFlag("--version-code",
+ &options.manifest_fixer_options.min_sdk_version_default)
+ .OptionalFlag(
+ "--target-sdk-version",
+ "Default target SDK version to use for "
+ "AndroidManifest.xml",
+ &options.manifest_fixer_options.target_sdk_version_default)
+ .OptionalFlag("--version-code",
"Version code (integer) to inject into the "
"AndroidManifest.xml if none is present",
- &options.manifestFixerOptions.versionCodeDefault)
- .optionalFlag("--version-name",
+ &options.manifest_fixer_options.version_code_default)
+ .OptionalFlag("--version-name",
"Version name to inject into the AndroidManifest.xml "
"if none is present",
- &options.manifestFixerOptions.versionNameDefault)
- .optionalSwitch("--static-lib", "Generate a static Android library",
- &options.staticLib)
- .optionalSwitch("--no-static-lib-packages",
+ &options.manifest_fixer_options.version_name_default)
+ .OptionalSwitch("--static-lib", "Generate a static Android library",
+ &options.static_lib)
+ .OptionalSwitch("--no-static-lib-packages",
"Merge all library resources under the app's package",
- &options.noStaticLibPackages)
- .optionalSwitch("--non-final-ids",
+ &options.no_static_lib_packages)
+ .OptionalSwitch("--non-final-ids",
"Generates R.java without the final modifier.\n"
"This is implied when --static-lib is specified.",
- &options.generateNonFinalIds)
- .optionalFlag("--stable-ids",
+ &options.generate_non_final_ids)
+ .OptionalFlag("--stable-ids",
"File containing a list of name to ID mapping.",
- &stableIdFilePath)
- .optionalFlag(
+ &stable_id_file_path)
+ .OptionalFlag(
"--emit-ids",
"Emit a file at the given path with a list of name to ID\n"
"mappings, suitable for use with --stable-ids.",
- &options.resourceIdMapPath)
- .optionalFlag("--private-symbols",
+ &options.resource_id_map_path)
+ .OptionalFlag("--private-symbols",
"Package name to use when generating R.java for "
"private symbols.\n"
"If not specified, public and private symbols will use "
"the application's "
"package name",
- &options.privateSymbols)
- .optionalFlag("--custom-package",
+ &options.private_symbols)
+ .OptionalFlag("--custom-package",
"Custom Java package under which to generate R.java",
- &options.customJavaPackage)
- .optionalFlagList("--extra-packages",
+ &options.custom_java_package)
+ .OptionalFlagList("--extra-packages",
"Generate the same R.java but with different "
"package names",
- &extraJavaPackages)
- .optionalFlagList("--add-javadoc-annotation",
+ &extra_java_packages)
+ .OptionalFlagList("--add-javadoc-annotation",
"Adds a JavaDoc annotation to all "
"generated Java classes",
- &options.javadocAnnotations)
- .optionalSwitch("--auto-add-overlay",
+ &options.javadoc_annotations)
+ .OptionalSwitch("--auto-add-overlay",
"Allows the addition of new resources in "
"overlays without <add-resource> tags",
- &options.autoAddOverlay)
- .optionalFlag("--rename-manifest-package",
+ &options.auto_add_overlay)
+ .OptionalFlag("--rename-manifest-package",
"Renames the package in AndroidManifest.xml",
- &options.manifestFixerOptions.renameManifestPackage)
- .optionalFlag(
+ &options.manifest_fixer_options.rename_manifest_package)
+ .OptionalFlag(
"--rename-instrumentation-target-package",
"Changes the name of the target package for instrumentation. "
"Most useful "
"when used\nin conjunction with --rename-manifest-package",
- &options.manifestFixerOptions.renameInstrumentationTargetPackage)
- .optionalFlagList("-0", "File extensions not to compress",
- &options.extensionsToNotCompress)
- .optionalFlagList(
+ &options.manifest_fixer_options
+ .rename_instrumentation_target_package)
+ .OptionalFlagList("-0", "File extensions not to compress",
+ &options.extensions_to_not_compress)
+ .OptionalFlagList(
"--split",
"Split resources matching a set of configs out to a "
"Split APK.\nSyntax: path/to/output.apk:<config>[,<config>[...]]",
- &splitArgs)
- .optionalSwitch("-v", "Enables verbose logging", &verbose);
+ &split_args)
+ .OptionalSwitch("-v", "Enables verbose logging", &verbose);
- if (!flags.parse("aapt2 link", args, &std::cerr)) {
+ if (!flags.Parse("aapt2 link", args, &std::cerr)) {
return 1;
}
// Expand all argument-files passed into the command line. These start with
// '@'.
- std::vector<std::string> argList;
- for (const std::string& arg : flags.getArgs()) {
- if (util::stringStartsWith(arg, "@")) {
+ std::vector<std::string> arg_list;
+ for (const std::string& arg : flags.GetArgs()) {
+ if (util::StartsWith(arg, "@")) {
const std::string path = arg.substr(1, arg.size() - 1);
std::string error;
- if (!file::appendArgsFromFile(path, &argList, &error)) {
- context.getDiagnostics()->error(DiagMessage(path) << error);
+ if (!file::AppendArgsFromFile(path, &arg_list, &error)) {
+ context.GetDiagnostics()->Error(DiagMessage(path) << error);
return 1;
}
} else {
- argList.push_back(arg);
+ arg_list.push_back(arg);
}
}
// Expand all argument-files passed to -R.
- for (const std::string& arg : overlayArgList) {
- if (util::stringStartsWith(arg, "@")) {
+ for (const std::string& arg : overlay_arg_list) {
+ if (util::StartsWith(arg, "@")) {
const std::string path = arg.substr(1, arg.size() - 1);
std::string error;
- if (!file::appendArgsFromFile(path, &options.overlayFiles, &error)) {
- context.getDiagnostics()->error(DiagMessage(path) << error);
+ if (!file::AppendArgsFromFile(path, &options.overlay_files, &error)) {
+ context.GetDiagnostics()->Error(DiagMessage(path) << error);
return 1;
}
} else {
- options.overlayFiles.push_back(arg);
+ options.overlay_files.push_back(arg);
}
}
if (verbose) {
- context.setVerbose(verbose);
+ context.SetVerbose(verbose);
}
// Populate the set of extra packages for which to generate R.java.
- for (std::string& extraPackage : extraJavaPackages) {
+ for (std::string& extra_package : extra_java_packages) {
// A given package can actually be a colon separated list of packages.
- for (StringPiece package : util::split(extraPackage, ':')) {
- options.extraJavaPackages.insert(package.toString());
+ for (StringPiece package : util::Split(extra_package, ':')) {
+ options.extra_java_packages.insert(package.ToString());
}
}
- if (productList) {
- for (StringPiece product : util::tokenize(productList.value(), ',')) {
+ if (product_list) {
+ for (StringPiece product : util::Tokenize(product_list.value(), ',')) {
if (product != "" && product != "default") {
- options.products.insert(product.toString());
+ options.products.insert(product.ToString());
}
}
}
AxisConfigFilter filter;
if (configs) {
- for (const StringPiece& configStr : util::tokenize(configs.value(), ',')) {
+ for (const StringPiece& config_str : util::Tokenize(configs.value(), ',')) {
ConfigDescription config;
LocaleValue lv;
- if (lv.initFromFilterString(configStr)) {
- lv.writeTo(&config);
- } else if (!ConfigDescription::parse(configStr, &config)) {
- context.getDiagnostics()->error(DiagMessage() << "invalid config '"
- << configStr
+ if (lv.InitFromFilterString(config_str)) {
+ lv.WriteTo(&config);
+ } else if (!ConfigDescription::Parse(config_str, &config)) {
+ context.GetDiagnostics()->Error(DiagMessage() << "invalid config '"
+ << config_str
<< "' for -c option");
return 1;
}
if (config.density != 0) {
- context.getDiagnostics()->warn(DiagMessage() << "ignoring density '"
+ context.GetDiagnostics()->Warn(DiagMessage() << "ignoring density '"
<< config
<< "' for -c option");
} else {
- filter.addConfig(config);
+ filter.AddConfig(config);
}
}
- options.tableSplitterOptions.configFilter = &filter;
+ options.table_splitter_options.config_filter = &filter;
}
- if (preferredDensity) {
- ConfigDescription preferredDensityConfig;
- if (!ConfigDescription::parse(preferredDensity.value(),
- &preferredDensityConfig)) {
- context.getDiagnostics()->error(
- DiagMessage() << "invalid density '" << preferredDensity.value()
+ if (preferred_density) {
+ ConfigDescription preferred_density_config;
+ if (!ConfigDescription::Parse(preferred_density.value(),
+ &preferred_density_config)) {
+ context.GetDiagnostics()->Error(
+ DiagMessage() << "invalid density '" << preferred_density.value()
<< "' for --preferred-density option");
return 1;
}
// Clear the version that can be automatically added.
- preferredDensityConfig.sdkVersion = 0;
+ preferred_density_config.sdkVersion = 0;
- if (preferredDensityConfig.diff(ConfigDescription::defaultConfig()) !=
+ if (preferred_density_config.diff(ConfigDescription::DefaultConfig()) !=
ConfigDescription::CONFIG_DENSITY) {
- context.getDiagnostics()->error(
+ context.GetDiagnostics()->Error(
DiagMessage() << "invalid preferred density '"
- << preferredDensity.value() << "'. "
+ << preferred_density.value() << "'. "
<< "Preferred density must only be a density value");
return 1;
}
- options.tableSplitterOptions.preferredDensity =
- preferredDensityConfig.density;
+ options.table_splitter_options.preferred_density =
+ preferred_density_config.density;
}
- if (!options.staticLib && stableIdFilePath) {
- if (!loadStableIdMap(context.getDiagnostics(), stableIdFilePath.value(),
- &options.stableIdMap)) {
+ if (!options.static_lib && stable_id_file_path) {
+ if (!LoadStableIdMap(context.GetDiagnostics(), stable_id_file_path.value(),
+ &options.stable_id_map)) {
return 1;
}
}
// Populate some default no-compress extensions that are already compressed.
- options.extensionsToNotCompress.insert(
+ options.extensions_to_not_compress.insert(
{".jpg", ".jpeg", ".png", ".gif", ".wav", ".mp2", ".mp3", ".ogg",
".aac", ".mpg", ".mpeg", ".mid", ".midi", ".smf", ".jet", ".rtttl",
".imy", ".xmf", ".mp4", ".m4a", ".m4v", ".3gp", ".3gpp", ".3g2",
".3gpp2", ".amr", ".awb", ".wma", ".wmv", ".webm", ".mkv"});
// Parse the split parameters.
- for (const std::string& splitArg : splitArgs) {
- options.splitPaths.push_back({});
- options.splitConstraints.push_back({});
- if (!parseSplitParameter(splitArg, context.getDiagnostics(),
- &options.splitPaths.back(),
- &options.splitConstraints.back())) {
+ for (const std::string& split_arg : split_args) {
+ options.split_paths.push_back({});
+ options.split_constraints.push_back({});
+ if (!ParseSplitParameter(split_arg, context.GetDiagnostics(),
+ &options.split_paths.back(),
+ &options.split_constraints.back())) {
return 1;
}
}
// Turn off auto versioning for static-libs.
- if (options.staticLib) {
- options.noAutoVersion = true;
- options.noVersionVectors = true;
+ if (options.static_lib) {
+ options.no_auto_version = true;
+ options.no_version_vectors = true;
}
LinkCommand cmd(&context, options);
- return cmd.run(argList);
+ return cmd.Run(arg_list);
}
} // namespace aapt
diff --git a/tools/aapt2/link/Linkers.h b/tools/aapt2/link/Linkers.h
index f40c0e8..4687d2c 100644
--- a/tools/aapt2/link/Linkers.h
+++ b/tools/aapt2/link/Linkers.h
@@ -17,12 +17,15 @@
#ifndef AAPT_LINKER_LINKERS_H
#define AAPT_LINKER_LINKERS_H
+#include <set>
+#include <unordered_set>
+
+#include "android-base/macros.h"
+
#include "Resource.h"
#include "process/IResourceTableConsumer.h"
#include "xml/XmlDom.h"
-#include <set>
-
namespace aapt {
class ResourceTable;
@@ -31,8 +34,7 @@
/**
* Defines the location in which a value exists. This determines visibility of
- * other
- * package's private symbols.
+ * other package's private symbols.
*/
struct CallSite {
ResourceNameRef resource;
@@ -40,26 +42,30 @@
/**
* Determines whether a versioned resource should be created. If a versioned
- * resource already
- * exists, it takes precedence.
+ * resource already exists, it takes precedence.
*/
-bool shouldGenerateVersionedResource(const ResourceEntry* entry,
+bool ShouldGenerateVersionedResource(const ResourceEntry* entry,
const ConfigDescription& config,
- const int sdkVersionToGenerate);
+ const int sdk_version_to_generate);
class AutoVersioner : public IResourceTableConsumer {
public:
- bool consume(IAaptContext* context, ResourceTable* table) override;
-};
+ AutoVersioner() = default;
-class XmlAutoVersioner : public IXmlResourceConsumer {
- public:
- bool consume(IAaptContext* context, xml::XmlResource* resource) override;
+ bool Consume(IAaptContext* context, ResourceTable* table) override;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(AutoVersioner);
};
class VersionCollapser : public IResourceTableConsumer {
public:
- bool consume(IAaptContext* context, ResourceTable* table) override;
+ VersionCollapser() = default;
+
+ bool Consume(IAaptContext* context, ResourceTable* table) override;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(VersionCollapser);
};
/**
@@ -67,7 +73,12 @@
*/
class ResourceDeduper : public IResourceTableConsumer {
public:
- bool consume(IAaptContext* context, ResourceTable* table) override;
+ ResourceDeduper() = default;
+
+ bool Consume(IAaptContext* context, ResourceTable* table) override;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ResourceDeduper);
};
/**
@@ -103,8 +114,46 @@
* conflict will never
* occur.
*/
-struct PrivateAttributeMover : public IResourceTableConsumer {
- bool consume(IAaptContext* context, ResourceTable* table) override;
+class PrivateAttributeMover : public IResourceTableConsumer {
+ public:
+ PrivateAttributeMover() = default;
+
+ bool Consume(IAaptContext* context, ResourceTable* table) override;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(PrivateAttributeMover);
+};
+
+class ResourceConfigValue;
+
+class ProductFilter : public IResourceTableConsumer {
+ public:
+ using ResourceConfigValueIter =
+ std::vector<std::unique_ptr<ResourceConfigValue>>::iterator;
+
+ explicit ProductFilter(std::unordered_set<std::string> products)
+ : products_(products) {}
+
+ ResourceConfigValueIter SelectProductToKeep(
+ const ResourceNameRef& name, const ResourceConfigValueIter begin,
+ const ResourceConfigValueIter end, IDiagnostics* diag);
+
+ bool Consume(IAaptContext* context, ResourceTable* table) override;
+
+ private:
+ std::unordered_set<std::string> products_;
+
+ DISALLOW_COPY_AND_ASSIGN(ProductFilter);
+};
+
+class XmlAutoVersioner : public IXmlResourceConsumer {
+ public:
+ XmlAutoVersioner() = default;
+
+ bool Consume(IAaptContext* context, xml::XmlResource* resource) override;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(XmlAutoVersioner);
};
/**
@@ -116,13 +165,16 @@
* XmlReferenceLinker.
*/
class XmlNamespaceRemover : public IXmlResourceConsumer {
- private:
- bool mKeepUris;
-
public:
- XmlNamespaceRemover(bool keepUris = false) : mKeepUris(keepUris){};
+ explicit XmlNamespaceRemover(bool keep_uris = false)
+ : keep_uris_(keep_uris){};
- bool consume(IAaptContext* context, xml::XmlResource* resource) override;
+ bool Consume(IAaptContext* context, xml::XmlResource* resource) override;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(XmlNamespaceRemover);
+
+ bool keep_uris_;
};
/**
@@ -131,18 +183,22 @@
* Once an XmlResource is processed by this linker, it is ready to be flattened.
*/
class XmlReferenceLinker : public IXmlResourceConsumer {
- private:
- std::set<int> mSdkLevelsFound;
-
public:
- bool consume(IAaptContext* context, xml::XmlResource* resource) override;
+ XmlReferenceLinker() = default;
+
+ bool Consume(IAaptContext* context, xml::XmlResource* resource) override;
/**
* Once the XmlResource has been consumed, this returns the various SDK levels
* in which
* framework attributes used within the XML document were defined.
*/
- inline const std::set<int>& getSdkLevels() const { return mSdkLevelsFound; }
+ inline const std::set<int>& sdk_levels() const { return sdk_levels_found_; }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(XmlReferenceLinker);
+
+ std::set<int> sdk_levels_found_;
};
} // namespace aapt
diff --git a/tools/aapt2/link/ManifestFixer.cpp b/tools/aapt2/link/ManifestFixer.cpp
index 3c9298b..a418fc8 100644
--- a/tools/aapt2/link/ManifestFixer.cpp
+++ b/tools/aapt2/link/ManifestFixer.cpp
@@ -15,32 +15,36 @@
*/
#include "link/ManifestFixer.h"
+
+#include <unordered_set>
+
+#include "android-base/logging.h"
+
#include "ResourceUtils.h"
#include "util/Util.h"
#include "xml/XmlActionExecutor.h"
#include "xml/XmlDom.h"
-#include <unordered_set>
-
namespace aapt {
/**
* This is how PackageManager builds class names from AndroidManifest.xml
* entries.
*/
-static bool nameIsJavaClassName(xml::Element* el, xml::Attribute* attr,
+static bool NameIsJavaClassName(xml::Element* el, xml::Attribute* attr,
SourcePathDiagnostics* diag) {
// We allow unqualified class names (ie: .HelloActivity)
// Since we don't know the package name, we can just make a fake one here and
// the test will be identical as long as the real package name is valid too.
- Maybe<std::string> fullyQualifiedClassName =
- util::getFullyQualifiedClassName("a", attr->value);
+ Maybe<std::string> fully_qualified_class_name =
+ util::GetFullyQualifiedClassName("a", attr->value);
- StringPiece qualifiedClassName =
- fullyQualifiedClassName ? fullyQualifiedClassName.value() : attr->value;
+ StringPiece qualified_class_name = fully_qualified_class_name
+ ? fully_qualified_class_name.value()
+ : attr->value;
- if (!util::isJavaClassName(qualifiedClassName)) {
- diag->error(DiagMessage(el->lineNumber)
+ if (!util::IsJavaClassName(qualified_class_name)) {
+ diag->Error(DiagMessage(el->line_number)
<< "attribute 'android:name' in <" << el->name
<< "> tag must be a valid Java class name");
return false;
@@ -48,37 +52,37 @@
return true;
}
-static bool optionalNameIsJavaClassName(xml::Element* el,
+static bool OptionalNameIsJavaClassName(xml::Element* el,
SourcePathDiagnostics* diag) {
- if (xml::Attribute* attr = el->findAttribute(xml::kSchemaAndroid, "name")) {
- return nameIsJavaClassName(el, attr, diag);
+ if (xml::Attribute* attr = el->FindAttribute(xml::kSchemaAndroid, "name")) {
+ return NameIsJavaClassName(el, attr, diag);
}
return true;
}
-static bool requiredNameIsJavaClassName(xml::Element* el,
+static bool RequiredNameIsJavaClassName(xml::Element* el,
SourcePathDiagnostics* diag) {
- if (xml::Attribute* attr = el->findAttribute(xml::kSchemaAndroid, "name")) {
- return nameIsJavaClassName(el, attr, diag);
+ if (xml::Attribute* attr = el->FindAttribute(xml::kSchemaAndroid, "name")) {
+ return NameIsJavaClassName(el, attr, diag);
}
- diag->error(DiagMessage(el->lineNumber)
+ diag->Error(DiagMessage(el->line_number)
<< "<" << el->name << "> is missing attribute 'android:name'");
return false;
}
-static bool verifyManifest(xml::Element* el, SourcePathDiagnostics* diag) {
- xml::Attribute* attr = el->findAttribute({}, "package");
+static bool VerifyManifest(xml::Element* el, SourcePathDiagnostics* diag) {
+ xml::Attribute* attr = el->FindAttribute({}, "package");
if (!attr) {
- diag->error(DiagMessage(el->lineNumber)
+ diag->Error(DiagMessage(el->line_number)
<< "<manifest> tag is missing 'package' attribute");
return false;
- } else if (ResourceUtils::isReference(attr->value)) {
- diag->error(
- DiagMessage(el->lineNumber)
+ } else if (ResourceUtils::IsReference(attr->value)) {
+ diag->Error(
+ DiagMessage(el->line_number)
<< "attribute 'package' in <manifest> tag must not be a reference");
return false;
- } else if (!util::isJavaPackageName(attr->value)) {
- diag->error(DiagMessage(el->lineNumber)
+ } else if (!util::IsJavaPackageName(attr->value)) {
+ diag->Error(DiagMessage(el->line_number)
<< "attribute 'package' in <manifest> tag is not a valid Java "
"package name: '"
<< attr->value << "'");
@@ -89,242 +93,243 @@
/**
* The coreApp attribute in <manifest> is not a regular AAPT attribute, so type
- * checking on it
- * is manual.
+ * checking on it is manual.
*/
-static bool fixCoreAppAttribute(xml::Element* el, SourcePathDiagnostics* diag) {
- if (xml::Attribute* attr = el->findAttribute("", "coreApp")) {
+static bool FixCoreAppAttribute(xml::Element* el, SourcePathDiagnostics* diag) {
+ if (xml::Attribute* attr = el->FindAttribute("", "coreApp")) {
std::unique_ptr<BinaryPrimitive> result =
- ResourceUtils::tryParseBool(attr->value);
+ ResourceUtils::TryParseBool(attr->value);
if (!result) {
- diag->error(DiagMessage(el->lineNumber)
+ diag->Error(DiagMessage(el->line_number)
<< "attribute coreApp must be a boolean");
return false;
}
- attr->compiledValue = std::move(result);
+ attr->compiled_value = std::move(result);
}
return true;
}
-bool ManifestFixer::buildRules(xml::XmlActionExecutor* executor,
+bool ManifestFixer::BuildRules(xml::XmlActionExecutor* executor,
IDiagnostics* diag) {
// First verify some options.
- if (mOptions.renameManifestPackage) {
- if (!util::isJavaPackageName(mOptions.renameManifestPackage.value())) {
- diag->error(DiagMessage() << "invalid manifest package override '"
- << mOptions.renameManifestPackage.value()
+ if (options_.rename_manifest_package) {
+ if (!util::IsJavaPackageName(options_.rename_manifest_package.value())) {
+ diag->Error(DiagMessage() << "invalid manifest package override '"
+ << options_.rename_manifest_package.value()
<< "'");
return false;
}
}
- if (mOptions.renameInstrumentationTargetPackage) {
- if (!util::isJavaPackageName(
- mOptions.renameInstrumentationTargetPackage.value())) {
- diag->error(DiagMessage()
+ if (options_.rename_instrumentation_target_package) {
+ if (!util::IsJavaPackageName(
+ options_.rename_instrumentation_target_package.value())) {
+ diag->Error(DiagMessage()
<< "invalid instrumentation target package override '"
- << mOptions.renameInstrumentationTargetPackage.value()
+ << options_.rename_instrumentation_target_package.value()
<< "'");
return false;
}
}
// Common intent-filter actions.
- xml::XmlNodeAction intentFilterAction;
- intentFilterAction["action"];
- intentFilterAction["category"];
- intentFilterAction["data"];
+ xml::XmlNodeAction intent_filter_action;
+ intent_filter_action["action"];
+ intent_filter_action["category"];
+ intent_filter_action["data"];
// Common meta-data actions.
- xml::XmlNodeAction metaDataAction;
+ xml::XmlNodeAction meta_data_action;
// Manifest actions.
- xml::XmlNodeAction& manifestAction = (*executor)["manifest"];
- manifestAction.action(verifyManifest);
- manifestAction.action(fixCoreAppAttribute);
- manifestAction.action([&](xml::Element* el) -> bool {
- if (mOptions.versionNameDefault) {
- if (el->findAttribute(xml::kSchemaAndroid, "versionName") == nullptr) {
+ xml::XmlNodeAction& manifest_action = (*executor)["manifest"];
+ manifest_action.Action(VerifyManifest);
+ manifest_action.Action(FixCoreAppAttribute);
+ manifest_action.Action([&](xml::Element* el) -> bool {
+ if (options_.version_name_default) {
+ if (el->FindAttribute(xml::kSchemaAndroid, "versionName") == nullptr) {
el->attributes.push_back(
xml::Attribute{xml::kSchemaAndroid, "versionName",
- mOptions.versionNameDefault.value()});
+ options_.version_name_default.value()});
}
}
- if (mOptions.versionCodeDefault) {
- if (el->findAttribute(xml::kSchemaAndroid, "versionCode") == nullptr) {
+ if (options_.version_code_default) {
+ if (el->FindAttribute(xml::kSchemaAndroid, "versionCode") == nullptr) {
el->attributes.push_back(
xml::Attribute{xml::kSchemaAndroid, "versionCode",
- mOptions.versionCodeDefault.value()});
+ options_.version_code_default.value()});
}
}
return true;
});
// Meta tags.
- manifestAction["eat-comment"];
+ manifest_action["eat-comment"];
// Uses-sdk actions.
- manifestAction["uses-sdk"].action([&](xml::Element* el) -> bool {
- if (mOptions.minSdkVersionDefault &&
- el->findAttribute(xml::kSchemaAndroid, "minSdkVersion") == nullptr) {
+ manifest_action["uses-sdk"].Action([&](xml::Element* el) -> bool {
+ if (options_.min_sdk_version_default &&
+ el->FindAttribute(xml::kSchemaAndroid, "minSdkVersion") == nullptr) {
// There was no minSdkVersion defined and we have a default to assign.
el->attributes.push_back(
xml::Attribute{xml::kSchemaAndroid, "minSdkVersion",
- mOptions.minSdkVersionDefault.value()});
+ options_.min_sdk_version_default.value()});
}
- if (mOptions.targetSdkVersionDefault &&
- el->findAttribute(xml::kSchemaAndroid, "targetSdkVersion") == nullptr) {
+ if (options_.target_sdk_version_default &&
+ el->FindAttribute(xml::kSchemaAndroid, "targetSdkVersion") == nullptr) {
// There was no targetSdkVersion defined and we have a default to assign.
el->attributes.push_back(
xml::Attribute{xml::kSchemaAndroid, "targetSdkVersion",
- mOptions.targetSdkVersionDefault.value()});
+ options_.target_sdk_version_default.value()});
}
return true;
});
// Instrumentation actions.
- manifestAction["instrumentation"].action([&](xml::Element* el) -> bool {
- if (!mOptions.renameInstrumentationTargetPackage) {
+ manifest_action["instrumentation"].Action([&](xml::Element* el) -> bool {
+ if (!options_.rename_instrumentation_target_package) {
return true;
}
if (xml::Attribute* attr =
- el->findAttribute(xml::kSchemaAndroid, "targetPackage")) {
- attr->value = mOptions.renameInstrumentationTargetPackage.value();
+ el->FindAttribute(xml::kSchemaAndroid, "targetPackage")) {
+ attr->value = options_.rename_instrumentation_target_package.value();
}
return true;
});
- manifestAction["original-package"];
- manifestAction["protected-broadcast"];
- manifestAction["uses-permission"];
- manifestAction["permission"];
- manifestAction["permission-tree"];
- manifestAction["permission-group"];
+ manifest_action["original-package"];
+ manifest_action["protected-broadcast"];
+ manifest_action["uses-permission"];
+ manifest_action["permission"];
+ manifest_action["permission-tree"];
+ manifest_action["permission-group"];
- manifestAction["uses-configuration"];
- manifestAction["uses-feature"];
- manifestAction["supports-screens"];
+ manifest_action["uses-configuration"];
+ manifest_action["uses-feature"];
+ manifest_action["supports-screens"];
- manifestAction["compatible-screens"];
- manifestAction["compatible-screens"]["screen"];
+ manifest_action["compatible-screens"];
+ manifest_action["compatible-screens"]["screen"];
- manifestAction["supports-gl-texture"];
+ manifest_action["supports-gl-texture"];
// Application actions.
- xml::XmlNodeAction& applicationAction = manifestAction["application"];
- applicationAction.action(optionalNameIsJavaClassName);
+ xml::XmlNodeAction& application_action = manifest_action["application"];
+ application_action.Action(OptionalNameIsJavaClassName);
// Uses library actions.
- applicationAction["uses-library"];
+ application_action["uses-library"];
// Meta-data.
- applicationAction["meta-data"] = metaDataAction;
+ application_action["meta-data"] = meta_data_action;
// Activity actions.
- applicationAction["activity"].action(requiredNameIsJavaClassName);
- applicationAction["activity"]["intent-filter"] = intentFilterAction;
- applicationAction["activity"]["meta-data"] = metaDataAction;
+ application_action["activity"].Action(RequiredNameIsJavaClassName);
+ application_action["activity"]["intent-filter"] = intent_filter_action;
+ application_action["activity"]["meta-data"] = meta_data_action;
// Activity alias actions.
- applicationAction["activity-alias"]["intent-filter"] = intentFilterAction;
- applicationAction["activity-alias"]["meta-data"] = metaDataAction;
+ application_action["activity-alias"]["intent-filter"] = intent_filter_action;
+ application_action["activity-alias"]["meta-data"] = meta_data_action;
// Service actions.
- applicationAction["service"].action(requiredNameIsJavaClassName);
- applicationAction["service"]["intent-filter"] = intentFilterAction;
- applicationAction["service"]["meta-data"] = metaDataAction;
+ application_action["service"].Action(RequiredNameIsJavaClassName);
+ application_action["service"]["intent-filter"] = intent_filter_action;
+ application_action["service"]["meta-data"] = meta_data_action;
// Receiver actions.
- applicationAction["receiver"].action(requiredNameIsJavaClassName);
- applicationAction["receiver"]["intent-filter"] = intentFilterAction;
- applicationAction["receiver"]["meta-data"] = metaDataAction;
+ application_action["receiver"].Action(RequiredNameIsJavaClassName);
+ application_action["receiver"]["intent-filter"] = intent_filter_action;
+ application_action["receiver"]["meta-data"] = meta_data_action;
// Provider actions.
- applicationAction["provider"].action(requiredNameIsJavaClassName);
- applicationAction["provider"]["intent-filter"] = intentFilterAction;
- applicationAction["provider"]["meta-data"] = metaDataAction;
- applicationAction["provider"]["grant-uri-permissions"];
- applicationAction["provider"]["path-permissions"];
+ application_action["provider"].Action(RequiredNameIsJavaClassName);
+ application_action["provider"]["intent-filter"] = intent_filter_action;
+ application_action["provider"]["meta-data"] = meta_data_action;
+ application_action["provider"]["grant-uri-permissions"];
+ application_action["provider"]["path-permissions"];
return true;
}
class FullyQualifiedClassNameVisitor : public xml::Visitor {
public:
- using xml::Visitor::visit;
+ using xml::Visitor::Visit;
explicit FullyQualifiedClassNameVisitor(const StringPiece& package)
- : mPackage(package) {}
+ : package_(package) {}
- void visit(xml::Element* el) override {
+ void Visit(xml::Element* el) override {
for (xml::Attribute& attr : el->attributes) {
- if (attr.namespaceUri == xml::kSchemaAndroid &&
- mClassAttributes.find(attr.name) != mClassAttributes.end()) {
- if (Maybe<std::string> newValue =
- util::getFullyQualifiedClassName(mPackage, attr.value)) {
- attr.value = std::move(newValue.value());
+ if (attr.namespace_uri == xml::kSchemaAndroid &&
+ class_attributes_.find(attr.name) != class_attributes_.end()) {
+ if (Maybe<std::string> new_value =
+ util::GetFullyQualifiedClassName(package_, attr.value)) {
+ attr.value = std::move(new_value.value());
}
}
}
// Super implementation to iterate over the children.
- xml::Visitor::visit(el);
+ xml::Visitor::Visit(el);
}
private:
- StringPiece mPackage;
- std::unordered_set<StringPiece> mClassAttributes = {"name"};
+ StringPiece package_;
+ std::unordered_set<StringPiece> class_attributes_ = {"name"};
};
-static bool renameManifestPackage(const StringPiece& packageOverride,
- xml::Element* manifestEl) {
- xml::Attribute* attr = manifestEl->findAttribute({}, "package");
+static bool RenameManifestPackage(const StringPiece& package_override,
+ xml::Element* manifest_el) {
+ xml::Attribute* attr = manifest_el->FindAttribute({}, "package");
// We've already verified that the manifest element is present, with a package
// name specified.
- assert(attr);
+ CHECK(attr != nullptr);
- std::string originalPackage = std::move(attr->value);
- attr->value = packageOverride.toString();
+ std::string original_package = std::move(attr->value);
+ attr->value = package_override.ToString();
- FullyQualifiedClassNameVisitor visitor(originalPackage);
- manifestEl->accept(&visitor);
+ FullyQualifiedClassNameVisitor visitor(original_package);
+ manifest_el->Accept(&visitor);
return true;
}
-bool ManifestFixer::consume(IAaptContext* context, xml::XmlResource* doc) {
- xml::Element* root = xml::findRootElement(doc->root.get());
- if (!root || !root->namespaceUri.empty() || root->name != "manifest") {
- context->getDiagnostics()->error(DiagMessage(doc->file.source)
+bool ManifestFixer::Consume(IAaptContext* context, xml::XmlResource* doc) {
+ xml::Element* root = xml::FindRootElement(doc->root.get());
+ if (!root || !root->namespace_uri.empty() || root->name != "manifest") {
+ context->GetDiagnostics()->Error(DiagMessage(doc->file.source)
<< "root tag must be <manifest>");
return false;
}
- if ((mOptions.minSdkVersionDefault || mOptions.targetSdkVersionDefault) &&
- root->findChild({}, "uses-sdk") == nullptr) {
+ if ((options_.min_sdk_version_default ||
+ options_.target_sdk_version_default) &&
+ root->FindChild({}, "uses-sdk") == nullptr) {
// Auto insert a <uses-sdk> element.
- std::unique_ptr<xml::Element> usesSdk = util::make_unique<xml::Element>();
- usesSdk->name = "uses-sdk";
- root->addChild(std::move(usesSdk));
+ std::unique_ptr<xml::Element> uses_sdk = util::make_unique<xml::Element>();
+ uses_sdk->name = "uses-sdk";
+ root->AddChild(std::move(uses_sdk));
}
xml::XmlActionExecutor executor;
- if (!buildRules(&executor, context->getDiagnostics())) {
+ if (!BuildRules(&executor, context->GetDiagnostics())) {
return false;
}
- if (!executor.execute(xml::XmlActionExecutorPolicy::Whitelist,
- context->getDiagnostics(), doc)) {
+ if (!executor.Execute(xml::XmlActionExecutorPolicy::kWhitelist,
+ context->GetDiagnostics(), doc)) {
return false;
}
- if (mOptions.renameManifestPackage) {
+ if (options_.rename_manifest_package) {
// Rename manifest package outside of the XmlActionExecutor.
// We need to extract the old package name and FullyQualify all class names.
- if (!renameManifestPackage(mOptions.renameManifestPackage.value(), root)) {
+ if (!RenameManifestPackage(options_.rename_manifest_package.value(),
+ root)) {
return false;
}
}
diff --git a/tools/aapt2/link/ManifestFixer.h b/tools/aapt2/link/ManifestFixer.h
index c3a114b..470f65e 100644
--- a/tools/aapt2/link/ManifestFixer.h
+++ b/tools/aapt2/link/ManifestFixer.h
@@ -17,22 +17,24 @@
#ifndef AAPT_LINK_MANIFESTFIXER_H
#define AAPT_LINK_MANIFESTFIXER_H
+#include <string>
+
+#include "android-base/macros.h"
+
#include "process/IResourceTableConsumer.h"
#include "util/Maybe.h"
#include "xml/XmlActionExecutor.h"
#include "xml/XmlDom.h"
-#include <string>
-
namespace aapt {
struct ManifestFixerOptions {
- Maybe<std::string> minSdkVersionDefault;
- Maybe<std::string> targetSdkVersionDefault;
- Maybe<std::string> renameManifestPackage;
- Maybe<std::string> renameInstrumentationTargetPackage;
- Maybe<std::string> versionNameDefault;
- Maybe<std::string> versionCodeDefault;
+ Maybe<std::string> min_sdk_version_default;
+ Maybe<std::string> target_sdk_version_default;
+ Maybe<std::string> rename_manifest_package;
+ Maybe<std::string> rename_instrumentation_target_package;
+ Maybe<std::string> version_name_default;
+ Maybe<std::string> version_code_default;
};
/**
@@ -42,14 +44,16 @@
class ManifestFixer : public IXmlResourceConsumer {
public:
explicit ManifestFixer(const ManifestFixerOptions& options)
- : mOptions(options) {}
+ : options_(options) {}
- bool consume(IAaptContext* context, xml::XmlResource* doc) override;
+ bool Consume(IAaptContext* context, xml::XmlResource* doc) override;
private:
- bool buildRules(xml::XmlActionExecutor* executor, IDiagnostics* diag);
+ DISALLOW_COPY_AND_ASSIGN(ManifestFixer);
- ManifestFixerOptions mOptions;
+ bool BuildRules(xml::XmlActionExecutor* executor, IDiagnostics* diag);
+
+ ManifestFixerOptions options_;
};
} // namespace aapt
diff --git a/tools/aapt2/link/ManifestFixer_test.cpp b/tools/aapt2/link/ManifestFixer_test.cpp
index dc78d98..0e29ba6 100644
--- a/tools/aapt2/link/ManifestFixer_test.cpp
+++ b/tools/aapt2/link/ManifestFixer_test.cpp
@@ -15,10 +15,8 @@
*/
#include "link/ManifestFixer.h"
-#include "test/Builders.h"
-#include "test/Context.h"
-#include <gtest/gtest.h>
+#include "test/Test.h"
namespace aapt {
@@ -28,42 +26,42 @@
void SetUp() override {
mContext =
test::ContextBuilder()
- .setCompilationPackage("android")
- .setPackageId(0x01)
- .setNameManglerPolicy(NameManglerPolicy{"android"})
- .addSymbolSource(
+ .SetCompilationPackage("android")
+ .SetPackageId(0x01)
+ .SetNameManglerPolicy(NameManglerPolicy{"android"})
+ .AddSymbolSource(
test::StaticSymbolSourceBuilder()
- .addSymbol(
+ .AddSymbol(
"android:attr/package", ResourceId(0x01010000),
test::AttributeBuilder()
- .setTypeMask(android::ResTable_map::TYPE_STRING)
- .build())
- .addSymbol(
+ .SetTypeMask(android::ResTable_map::TYPE_STRING)
+ .Build())
+ .AddSymbol(
"android:attr/minSdkVersion", ResourceId(0x01010001),
test::AttributeBuilder()
- .setTypeMask(android::ResTable_map::TYPE_STRING |
+ .SetTypeMask(android::ResTable_map::TYPE_STRING |
android::ResTable_map::TYPE_INTEGER)
- .build())
- .addSymbol(
+ .Build())
+ .AddSymbol(
"android:attr/targetSdkVersion", ResourceId(0x01010002),
test::AttributeBuilder()
- .setTypeMask(android::ResTable_map::TYPE_STRING |
+ .SetTypeMask(android::ResTable_map::TYPE_STRING |
android::ResTable_map::TYPE_INTEGER)
- .build())
- .addSymbol("android:string/str", ResourceId(0x01060000))
- .build())
- .build();
+ .Build())
+ .AddSymbol("android:string/str", ResourceId(0x01060000))
+ .Build())
+ .Build();
}
- std::unique_ptr<xml::XmlResource> verify(const StringPiece& str) {
- return verifyWithOptions(str, {});
+ std::unique_ptr<xml::XmlResource> Verify(const StringPiece& str) {
+ return VerifyWithOptions(str, {});
}
- std::unique_ptr<xml::XmlResource> verifyWithOptions(
+ std::unique_ptr<xml::XmlResource> VerifyWithOptions(
const StringPiece& str, const ManifestFixerOptions& options) {
- std::unique_ptr<xml::XmlResource> doc = test::buildXmlDom(str);
+ std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDom(str);
ManifestFixer fixer(options);
- if (fixer.consume(mContext.get(), doc.get())) {
+ if (fixer.Consume(mContext.get(), doc.get())) {
return doc;
}
return {};
@@ -71,28 +69,28 @@
};
TEST_F(ManifestFixerTest, EnsureManifestIsRootTag) {
- EXPECT_EQ(nullptr, verify("<other-tag />"));
- EXPECT_EQ(nullptr, verify("<ns:manifest xmlns:ns=\"com\" />"));
- EXPECT_NE(nullptr, verify("<manifest package=\"android\"></manifest>"));
+ EXPECT_EQ(nullptr, Verify("<other-tag />"));
+ EXPECT_EQ(nullptr, Verify("<ns:manifest xmlns:ns=\"com\" />"));
+ EXPECT_NE(nullptr, Verify("<manifest package=\"android\"></manifest>"));
}
TEST_F(ManifestFixerTest, EnsureManifestHasPackage) {
- EXPECT_NE(nullptr, verify("<manifest package=\"android\" />"));
- EXPECT_NE(nullptr, verify("<manifest package=\"com.android\" />"));
- EXPECT_NE(nullptr, verify("<manifest package=\"com.android.google\" />"));
+ EXPECT_NE(nullptr, Verify("<manifest package=\"android\" />"));
+ EXPECT_NE(nullptr, Verify("<manifest package=\"com.android\" />"));
+ EXPECT_NE(nullptr, Verify("<manifest package=\"com.android.google\" />"));
EXPECT_EQ(nullptr,
- verify("<manifest package=\"com.android.google.Class$1\" />"));
- EXPECT_EQ(nullptr, verify("<manifest "
+ Verify("<manifest package=\"com.android.google.Class$1\" />"));
+ EXPECT_EQ(nullptr, Verify("<manifest "
"xmlns:android=\"http://schemas.android.com/apk/"
"res/android\" "
"android:package=\"com.android\" />"));
- EXPECT_EQ(nullptr, verify("<manifest package=\"@string/str\" />"));
+ EXPECT_EQ(nullptr, Verify("<manifest package=\"@string/str\" />"));
}
TEST_F(ManifestFixerTest, UseDefaultSdkVersionsIfNonePresent) {
ManifestFixerOptions options = {std::string("8"), std::string("22")};
- std::unique_ptr<xml::XmlResource> doc = verifyWithOptions(R"EOF(
+ std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF(
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android">
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="21" />
@@ -103,18 +101,18 @@
xml::Element* el;
xml::Attribute* attr;
- el = xml::findRootElement(doc.get());
+ el = xml::FindRootElement(doc.get());
ASSERT_NE(nullptr, el);
- el = el->findChild({}, "uses-sdk");
+ el = el->FindChild({}, "uses-sdk");
ASSERT_NE(nullptr, el);
- attr = el->findAttribute(xml::kSchemaAndroid, "minSdkVersion");
+ attr = el->FindAttribute(xml::kSchemaAndroid, "minSdkVersion");
ASSERT_NE(nullptr, attr);
EXPECT_EQ("7", attr->value);
- attr = el->findAttribute(xml::kSchemaAndroid, "targetSdkVersion");
+ attr = el->FindAttribute(xml::kSchemaAndroid, "targetSdkVersion");
ASSERT_NE(nullptr, attr);
EXPECT_EQ("21", attr->value);
- doc = verifyWithOptions(R"EOF(
+ doc = VerifyWithOptions(R"EOF(
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android">
<uses-sdk android:targetSdkVersion="21" />
@@ -122,18 +120,18 @@
options);
ASSERT_NE(nullptr, doc);
- el = xml::findRootElement(doc.get());
+ el = xml::FindRootElement(doc.get());
ASSERT_NE(nullptr, el);
- el = el->findChild({}, "uses-sdk");
+ el = el->FindChild({}, "uses-sdk");
ASSERT_NE(nullptr, el);
- attr = el->findAttribute(xml::kSchemaAndroid, "minSdkVersion");
+ attr = el->FindAttribute(xml::kSchemaAndroid, "minSdkVersion");
ASSERT_NE(nullptr, attr);
EXPECT_EQ("8", attr->value);
- attr = el->findAttribute(xml::kSchemaAndroid, "targetSdkVersion");
+ attr = el->FindAttribute(xml::kSchemaAndroid, "targetSdkVersion");
ASSERT_NE(nullptr, attr);
EXPECT_EQ("21", attr->value);
- doc = verifyWithOptions(R"EOF(
+ doc = VerifyWithOptions(R"EOF(
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android">
<uses-sdk />
@@ -141,40 +139,40 @@
options);
ASSERT_NE(nullptr, doc);
- el = xml::findRootElement(doc.get());
+ el = xml::FindRootElement(doc.get());
ASSERT_NE(nullptr, el);
- el = el->findChild({}, "uses-sdk");
+ el = el->FindChild({}, "uses-sdk");
ASSERT_NE(nullptr, el);
- attr = el->findAttribute(xml::kSchemaAndroid, "minSdkVersion");
+ attr = el->FindAttribute(xml::kSchemaAndroid, "minSdkVersion");
ASSERT_NE(nullptr, attr);
EXPECT_EQ("8", attr->value);
- attr = el->findAttribute(xml::kSchemaAndroid, "targetSdkVersion");
+ attr = el->FindAttribute(xml::kSchemaAndroid, "targetSdkVersion");
ASSERT_NE(nullptr, attr);
EXPECT_EQ("22", attr->value);
- doc = verifyWithOptions(R"EOF(
+ doc = VerifyWithOptions(R"EOF(
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android" />)EOF",
options);
ASSERT_NE(nullptr, doc);
- el = xml::findRootElement(doc.get());
+ el = xml::FindRootElement(doc.get());
ASSERT_NE(nullptr, el);
- el = el->findChild({}, "uses-sdk");
+ el = el->FindChild({}, "uses-sdk");
ASSERT_NE(nullptr, el);
- attr = el->findAttribute(xml::kSchemaAndroid, "minSdkVersion");
+ attr = el->FindAttribute(xml::kSchemaAndroid, "minSdkVersion");
ASSERT_NE(nullptr, attr);
EXPECT_EQ("8", attr->value);
- attr = el->findAttribute(xml::kSchemaAndroid, "targetSdkVersion");
+ attr = el->FindAttribute(xml::kSchemaAndroid, "targetSdkVersion");
ASSERT_NE(nullptr, attr);
EXPECT_EQ("22", attr->value);
}
TEST_F(ManifestFixerTest, RenameManifestPackageAndFullyQualifyClasses) {
ManifestFixerOptions options;
- options.renameManifestPackage = std::string("com.android");
+ options.rename_manifest_package = std::string("com.android");
- std::unique_ptr<xml::XmlResource> doc = verifyWithOptions(R"EOF(
+ std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF(
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android">
<application android:name=".MainApplication" text="hello">
@@ -185,38 +183,38 @@
options);
ASSERT_NE(nullptr, doc);
- xml::Element* manifestEl = xml::findRootElement(doc.get());
+ xml::Element* manifestEl = xml::FindRootElement(doc.get());
ASSERT_NE(nullptr, manifestEl);
xml::Attribute* attr = nullptr;
- attr = manifestEl->findAttribute({}, "package");
+ attr = manifestEl->FindAttribute({}, "package");
ASSERT_NE(nullptr, attr);
EXPECT_EQ(std::string("com.android"), attr->value);
- xml::Element* applicationEl = manifestEl->findChild({}, "application");
+ xml::Element* applicationEl = manifestEl->FindChild({}, "application");
ASSERT_NE(nullptr, applicationEl);
- attr = applicationEl->findAttribute(xml::kSchemaAndroid, "name");
+ attr = applicationEl->FindAttribute(xml::kSchemaAndroid, "name");
ASSERT_NE(nullptr, attr);
EXPECT_EQ(std::string("android.MainApplication"), attr->value);
- attr = applicationEl->findAttribute({}, "text");
+ attr = applicationEl->FindAttribute({}, "text");
ASSERT_NE(nullptr, attr);
EXPECT_EQ(std::string("hello"), attr->value);
xml::Element* el;
- el = applicationEl->findChild({}, "activity");
+ el = applicationEl->FindChild({}, "activity");
ASSERT_NE(nullptr, el);
- attr = el->findAttribute(xml::kSchemaAndroid, "name");
+ attr = el->FindAttribute(xml::kSchemaAndroid, "name");
ASSERT_NE(nullptr, el);
EXPECT_EQ(std::string("android.activity.Start"), attr->value);
- el = applicationEl->findChild({}, "receiver");
+ el = applicationEl->FindChild({}, "receiver");
ASSERT_NE(nullptr, el);
- attr = el->findAttribute(xml::kSchemaAndroid, "name");
+ attr = el->FindAttribute(xml::kSchemaAndroid, "name");
ASSERT_NE(nullptr, el);
EXPECT_EQ(std::string("com.google.android.Receiver"), attr->value);
}
@@ -224,9 +222,9 @@
TEST_F(ManifestFixerTest,
RenameManifestInstrumentationPackageAndFullyQualifyTarget) {
ManifestFixerOptions options;
- options.renameInstrumentationTargetPackage = std::string("com.android");
+ options.rename_instrumentation_target_package = std::string("com.android");
- std::unique_ptr<xml::XmlResource> doc = verifyWithOptions(R"EOF(
+ std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF(
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android">
<instrumentation android:targetPackage="android" />
@@ -234,63 +232,63 @@
options);
ASSERT_NE(nullptr, doc);
- xml::Element* manifestEl = xml::findRootElement(doc.get());
- ASSERT_NE(nullptr, manifestEl);
+ xml::Element* manifest_el = xml::FindRootElement(doc.get());
+ ASSERT_NE(nullptr, manifest_el);
- xml::Element* instrumentationEl =
- manifestEl->findChild({}, "instrumentation");
- ASSERT_NE(nullptr, instrumentationEl);
+ xml::Element* instrumentation_el =
+ manifest_el->FindChild({}, "instrumentation");
+ ASSERT_NE(nullptr, instrumentation_el);
xml::Attribute* attr =
- instrumentationEl->findAttribute(xml::kSchemaAndroid, "targetPackage");
+ instrumentation_el->FindAttribute(xml::kSchemaAndroid, "targetPackage");
ASSERT_NE(nullptr, attr);
EXPECT_EQ(std::string("com.android"), attr->value);
}
TEST_F(ManifestFixerTest, UseDefaultVersionNameAndCode) {
ManifestFixerOptions options;
- options.versionNameDefault = std::string("Beta");
- options.versionCodeDefault = std::string("0x10000000");
+ options.version_name_default = std::string("Beta");
+ options.version_code_default = std::string("0x10000000");
- std::unique_ptr<xml::XmlResource> doc = verifyWithOptions(R"EOF(
+ std::unique_ptr<xml::XmlResource> doc = VerifyWithOptions(R"EOF(
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android" />)EOF",
options);
ASSERT_NE(nullptr, doc);
- xml::Element* manifestEl = xml::findRootElement(doc.get());
- ASSERT_NE(nullptr, manifestEl);
+ xml::Element* manifest_el = xml::FindRootElement(doc.get());
+ ASSERT_NE(nullptr, manifest_el);
xml::Attribute* attr =
- manifestEl->findAttribute(xml::kSchemaAndroid, "versionName");
+ manifest_el->FindAttribute(xml::kSchemaAndroid, "versionName");
ASSERT_NE(nullptr, attr);
EXPECT_EQ(std::string("Beta"), attr->value);
- attr = manifestEl->findAttribute(xml::kSchemaAndroid, "versionCode");
+ attr = manifest_el->FindAttribute(xml::kSchemaAndroid, "versionCode");
ASSERT_NE(nullptr, attr);
EXPECT_EQ(std::string("0x10000000"), attr->value);
}
TEST_F(ManifestFixerTest, EnsureManifestAttributesAreTyped) {
EXPECT_EQ(nullptr,
- verify("<manifest package=\"android\" coreApp=\"hello\" />"));
+ Verify("<manifest package=\"android\" coreApp=\"hello\" />"));
EXPECT_EQ(nullptr,
- verify("<manifest package=\"android\" coreApp=\"1dp\" />"));
+ Verify("<manifest package=\"android\" coreApp=\"1dp\" />"));
std::unique_ptr<xml::XmlResource> doc =
- verify("<manifest package=\"android\" coreApp=\"true\" />");
+ Verify("<manifest package=\"android\" coreApp=\"true\" />");
ASSERT_NE(nullptr, doc);
- xml::Element* el = xml::findRootElement(doc.get());
+ xml::Element* el = xml::FindRootElement(doc.get());
ASSERT_NE(nullptr, el);
EXPECT_EQ("manifest", el->name);
- xml::Attribute* attr = el->findAttribute("", "coreApp");
+ xml::Attribute* attr = el->FindAttribute("", "coreApp");
ASSERT_NE(nullptr, attr);
- EXPECT_NE(nullptr, attr->compiledValue);
- EXPECT_NE(nullptr, valueCast<BinaryPrimitive>(attr->compiledValue.get()));
+ EXPECT_NE(nullptr, attr->compiled_value);
+ EXPECT_NE(nullptr, ValueCast<BinaryPrimitive>(attr->compiled_value.get()));
}
} // namespace aapt
diff --git a/tools/aapt2/link/PrivateAttributeMover.cpp b/tools/aapt2/link/PrivateAttributeMover.cpp
index 174b41f..cc07a6e 100644
--- a/tools/aapt2/link/PrivateAttributeMover.cpp
+++ b/tools/aapt2/link/PrivateAttributeMover.cpp
@@ -14,27 +14,30 @@
* limitations under the License.
*/
-#include "ResourceTable.h"
#include "link/Linkers.h"
#include <algorithm>
#include <iterator>
+#include "android-base/logging.h"
+
+#include "ResourceTable.h"
+
namespace aapt {
template <typename InputContainer, typename OutputIterator, typename Predicate>
-OutputIterator moveIf(InputContainer& inputContainer, OutputIterator result,
- Predicate pred) {
- const auto last = inputContainer.end();
- auto newEnd =
- std::find_if(inputContainer.begin(), inputContainer.end(), pred);
- if (newEnd == last) {
+OutputIterator move_if(InputContainer& input_container, OutputIterator result,
+ Predicate pred) {
+ const auto last = input_container.end();
+ auto new_end =
+ std::find_if(input_container.begin(), input_container.end(), pred);
+ if (new_end == last) {
return result;
}
- *result = std::move(*newEnd);
+ *result = std::move(*new_end);
- auto first = newEnd;
+ auto first = new_end;
++first;
for (; first != last; ++first) {
@@ -44,39 +47,38 @@
++result;
} else {
// We want to keep this guy, but we will need to move it up the list to
- // replace
- // missing items.
- *newEnd = std::move(*first);
- ++newEnd;
+ // replace missing items.
+ *new_end = std::move(*first);
+ ++new_end;
}
}
- inputContainer.erase(newEnd, last);
+ input_container.erase(new_end, last);
return result;
}
-bool PrivateAttributeMover::consume(IAaptContext* context,
+bool PrivateAttributeMover::Consume(IAaptContext* context,
ResourceTable* table) {
for (auto& package : table->packages) {
- ResourceTableType* type = package->findType(ResourceType::kAttr);
+ ResourceTableType* type = package->FindType(ResourceType::kAttr);
if (!type) {
continue;
}
- if (type->symbolStatus.state != SymbolState::kPublic) {
+ if (type->symbol_status.state != SymbolState::kPublic) {
// No public attributes, so we can safely leave these private attributes
// where they are.
return true;
}
- ResourceTableType* privAttrType =
- package->findOrCreateType(ResourceType::kAttrPrivate);
- assert(privAttrType->entries.empty());
+ ResourceTableType* priv_attr_type =
+ package->FindOrCreateType(ResourceType::kAttrPrivate);
+ CHECK(priv_attr_type->entries.empty());
- moveIf(type->entries, std::back_inserter(privAttrType->entries),
- [](const std::unique_ptr<ResourceEntry>& entry) -> bool {
- return entry->symbolStatus.state != SymbolState::kPublic;
- });
+ move_if(type->entries, std::back_inserter(priv_attr_type->entries),
+ [](const std::unique_ptr<ResourceEntry>& entry) -> bool {
+ return entry->symbol_status.state != SymbolState::kPublic;
+ });
break;
}
return true;
diff --git a/tools/aapt2/link/PrivateAttributeMover_test.cpp b/tools/aapt2/link/PrivateAttributeMover_test.cpp
index a7a1013..90c4922 100644
--- a/tools/aapt2/link/PrivateAttributeMover_test.cpp
+++ b/tools/aapt2/link/PrivateAttributeMover_test.cpp
@@ -15,64 +15,65 @@
*/
#include "link/Linkers.h"
+
#include "test/Test.h"
namespace aapt {
TEST(PrivateAttributeMoverTest, MovePrivateAttributes) {
- std::unique_ptr<IAaptContext> context = test::ContextBuilder().build();
+ std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
std::unique_ptr<ResourceTable> table =
test::ResourceTableBuilder()
- .addSimple("android:attr/publicA")
- .addSimple("android:attr/privateA")
- .addSimple("android:attr/publicB")
- .addSimple("android:attr/privateB")
- .setSymbolState("android:attr/publicA", ResourceId(0x01010000),
+ .AddSimple("android:attr/publicA")
+ .AddSimple("android:attr/privateA")
+ .AddSimple("android:attr/publicB")
+ .AddSimple("android:attr/privateB")
+ .SetSymbolState("android:attr/publicA", ResourceId(0x01010000),
SymbolState::kPublic)
- .setSymbolState("android:attr/publicB", ResourceId(0x01010000),
+ .SetSymbolState("android:attr/publicB", ResourceId(0x01010000),
SymbolState::kPublic)
- .build();
+ .Build();
PrivateAttributeMover mover;
- ASSERT_TRUE(mover.consume(context.get(), table.get()));
+ ASSERT_TRUE(mover.Consume(context.get(), table.get()));
- ResourceTablePackage* package = table->findPackage("android");
+ ResourceTablePackage* package = table->FindPackage("android");
ASSERT_NE(package, nullptr);
- ResourceTableType* type = package->findType(ResourceType::kAttr);
+ ResourceTableType* type = package->FindType(ResourceType::kAttr);
ASSERT_NE(type, nullptr);
ASSERT_EQ(type->entries.size(), 2u);
- EXPECT_NE(type->findEntry("publicA"), nullptr);
- EXPECT_NE(type->findEntry("publicB"), nullptr);
+ EXPECT_NE(type->FindEntry("publicA"), nullptr);
+ EXPECT_NE(type->FindEntry("publicB"), nullptr);
- type = package->findType(ResourceType::kAttrPrivate);
+ type = package->FindType(ResourceType::kAttrPrivate);
ASSERT_NE(type, nullptr);
ASSERT_EQ(type->entries.size(), 2u);
- EXPECT_NE(type->findEntry("privateA"), nullptr);
- EXPECT_NE(type->findEntry("privateB"), nullptr);
+ EXPECT_NE(type->FindEntry("privateA"), nullptr);
+ EXPECT_NE(type->FindEntry("privateB"), nullptr);
}
TEST(PrivateAttributeMoverTest,
LeavePrivateAttributesWhenNoPublicAttributesDefined) {
- std::unique_ptr<IAaptContext> context = test::ContextBuilder().build();
+ std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder()
- .addSimple("android:attr/privateA")
- .addSimple("android:attr/privateB")
- .build();
+ .AddSimple("android:attr/privateA")
+ .AddSimple("android:attr/privateB")
+ .Build();
PrivateAttributeMover mover;
- ASSERT_TRUE(mover.consume(context.get(), table.get()));
+ ASSERT_TRUE(mover.Consume(context.get(), table.get()));
- ResourceTablePackage* package = table->findPackage("android");
+ ResourceTablePackage* package = table->FindPackage("android");
ASSERT_NE(package, nullptr);
- ResourceTableType* type = package->findType(ResourceType::kAttr);
+ ResourceTableType* type = package->FindType(ResourceType::kAttr);
ASSERT_NE(type, nullptr);
ASSERT_EQ(type->entries.size(), 2u);
- type = package->findType(ResourceType::kAttrPrivate);
+ type = package->FindType(ResourceType::kAttrPrivate);
ASSERT_EQ(type, nullptr);
}
diff --git a/tools/aapt2/link/ProductFilter.cpp b/tools/aapt2/link/ProductFilter.cpp
index d59b682..c1a95ee1 100644
--- a/tools/aapt2/link/ProductFilter.cpp
+++ b/tools/aapt2/link/ProductFilter.cpp
@@ -14,103 +14,106 @@
* limitations under the License.
*/
-#include "link/ProductFilter.h"
+#include "link/Linkers.h"
+
+#include "ResourceTable.h"
namespace aapt {
-ProductFilter::ResourceConfigValueIter ProductFilter::selectProductToKeep(
+ProductFilter::ResourceConfigValueIter ProductFilter::SelectProductToKeep(
const ResourceNameRef& name, const ResourceConfigValueIter begin,
const ResourceConfigValueIter end, IDiagnostics* diag) {
- ResourceConfigValueIter defaultProductIter = end;
- ResourceConfigValueIter selectedProductIter = end;
+ ResourceConfigValueIter default_product_iter = end;
+ ResourceConfigValueIter selected_product_iter = end;
for (ResourceConfigValueIter iter = begin; iter != end; ++iter) {
- ResourceConfigValue* configValue = iter->get();
- if (mProducts.find(configValue->product) != mProducts.end()) {
- if (selectedProductIter != end) {
+ ResourceConfigValue* config_value = iter->get();
+ if (products_.find(config_value->product) != products_.end()) {
+ if (selected_product_iter != end) {
// We have two possible values for this product!
- diag->error(DiagMessage(configValue->value->getSource())
- << "selection of product '" << configValue->product
+ diag->Error(DiagMessage(config_value->value->GetSource())
+ << "selection of product '" << config_value->product
<< "' for resource " << name << " is ambiguous");
- ResourceConfigValue* previouslySelectedConfigValue =
- selectedProductIter->get();
- diag->note(
- DiagMessage(previouslySelectedConfigValue->value->getSource())
- << "product '" << previouslySelectedConfigValue->product
+ ResourceConfigValue* previously_selected_config_value =
+ selected_product_iter->get();
+ diag->Note(
+ DiagMessage(previously_selected_config_value->value->GetSource())
+ << "product '" << previously_selected_config_value->product
<< "' is also a candidate");
return end;
}
// Select this product.
- selectedProductIter = iter;
+ selected_product_iter = iter;
}
- if (configValue->product.empty() || configValue->product == "default") {
- if (defaultProductIter != end) {
+ if (config_value->product.empty() || config_value->product == "default") {
+ if (default_product_iter != end) {
// We have two possible default values.
- diag->error(DiagMessage(configValue->value->getSource())
+ diag->Error(DiagMessage(config_value->value->GetSource())
<< "multiple default products defined for resource "
<< name);
- ResourceConfigValue* previouslyDefaultConfigValue =
- defaultProductIter->get();
- diag->note(DiagMessage(previouslyDefaultConfigValue->value->getSource())
- << "default product also defined here");
+ ResourceConfigValue* previously_default_config_value =
+ default_product_iter->get();
+ diag->Note(
+ DiagMessage(previously_default_config_value->value->GetSource())
+ << "default product also defined here");
return end;
}
// Mark the default.
- defaultProductIter = iter;
+ default_product_iter = iter;
}
}
- if (defaultProductIter == end) {
- diag->error(DiagMessage() << "no default product defined for resource "
+ if (default_product_iter == end) {
+ diag->Error(DiagMessage() << "no default product defined for resource "
<< name);
return end;
}
- if (selectedProductIter == end) {
- selectedProductIter = defaultProductIter;
+ if (selected_product_iter == end) {
+ selected_product_iter = default_product_iter;
}
- return selectedProductIter;
+ return selected_product_iter;
}
-bool ProductFilter::consume(IAaptContext* context, ResourceTable* table) {
+bool ProductFilter::Consume(IAaptContext* context, ResourceTable* table) {
bool error = false;
for (auto& pkg : table->packages) {
for (auto& type : pkg->types) {
for (auto& entry : type->entries) {
- std::vector<std::unique_ptr<ResourceConfigValue>> newValues;
+ std::vector<std::unique_ptr<ResourceConfigValue>> new_values;
ResourceConfigValueIter iter = entry->values.begin();
- ResourceConfigValueIter startRangeIter = iter;
+ ResourceConfigValueIter start_range_iter = iter;
while (iter != entry->values.end()) {
++iter;
if (iter == entry->values.end() ||
- (*iter)->config != (*startRangeIter)->config) {
+ (*iter)->config != (*start_range_iter)->config) {
// End of the array, or we saw a different config,
// so this must be the end of a range of products.
// Select the product to keep from the set of products defined.
ResourceNameRef name(pkg->name, type->type, entry->name);
- auto valueToKeep = selectProductToKeep(name, startRangeIter, iter,
- context->getDiagnostics());
- if (valueToKeep == iter) {
+ auto value_to_keep = SelectProductToKeep(
+ name, start_range_iter, iter, context->GetDiagnostics());
+ if (value_to_keep == iter) {
// An error occurred, we could not pick a product.
error = true;
} else {
// We selected a product to keep. Move it to the new array.
- newValues.push_back(std::move(*valueToKeep));
+ new_values.push_back(std::move(*value_to_keep));
}
// Start the next range of products.
- startRangeIter = iter;
+ start_range_iter = iter;
}
}
// Now move the new values in to place.
- entry->values = std::move(newValues);
+ entry->values = std::move(new_values);
}
}
}
diff --git a/tools/aapt2/link/ProductFilter.h b/tools/aapt2/link/ProductFilter.h
deleted file mode 100644
index cc8b8c2..0000000
--- a/tools/aapt2/link/ProductFilter.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.
- */
-
-#ifndef AAPT_LINK_PRODUCTFILTER_H
-#define AAPT_LINK_PRODUCTFILTER_H
-
-#include "ResourceTable.h"
-#include "process/IResourceTableConsumer.h"
-
-#include <android-base/macros.h>
-#include <unordered_set>
-
-namespace aapt {
-
-class ProductFilter {
- public:
- using ResourceConfigValueIter =
- std::vector<std::unique_ptr<ResourceConfigValue>>::iterator;
-
- explicit ProductFilter(std::unordered_set<std::string> products)
- : mProducts(products) {}
-
- ResourceConfigValueIter selectProductToKeep(
- const ResourceNameRef& name, const ResourceConfigValueIter begin,
- const ResourceConfigValueIter end, IDiagnostics* diag);
-
- bool consume(IAaptContext* context, ResourceTable* table);
-
- private:
- std::unordered_set<std::string> mProducts;
-
- DISALLOW_COPY_AND_ASSIGN(ProductFilter);
-};
-
-} // namespace aapt
-
-#endif /* AAPT_LINK_PRODUCTFILTER_H */
diff --git a/tools/aapt2/link/ProductFilter_test.cpp b/tools/aapt2/link/ProductFilter_test.cpp
index 7f78f8b..379ad26 100644
--- a/tools/aapt2/link/ProductFilter_test.cpp
+++ b/tools/aapt2/link/ProductFilter_test.cpp
@@ -14,116 +14,117 @@
* limitations under the License.
*/
-#include "link/ProductFilter.h"
+#include "link/Linkers.h"
+
#include "test/Test.h"
namespace aapt {
TEST(ProductFilterTest, SelectTwoProducts) {
- std::unique_ptr<IAaptContext> context = test::ContextBuilder().build();
+ std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
- const ConfigDescription land = test::parseConfigOrDie("land");
- const ConfigDescription port = test::parseConfigOrDie("port");
+ const ConfigDescription land = test::ParseConfigOrDie("land");
+ const ConfigDescription port = test::ParseConfigOrDie("port");
ResourceTable table;
- ASSERT_TRUE(table.addResource(
- test::parseNameOrDie("android:string/one"), land, "",
- test::ValueBuilder<Id>().setSource(Source("land/default.xml")).build(),
- context->getDiagnostics()));
- ASSERT_TRUE(table.addResource(
- test::parseNameOrDie("android:string/one"), land, "tablet",
- test::ValueBuilder<Id>().setSource(Source("land/tablet.xml")).build(),
- context->getDiagnostics()));
+ ASSERT_TRUE(table.AddResource(
+ test::ParseNameOrDie("android:string/one"), land, "",
+ test::ValueBuilder<Id>().SetSource(Source("land/default.xml")).Build(),
+ context->GetDiagnostics()));
+ ASSERT_TRUE(table.AddResource(
+ test::ParseNameOrDie("android:string/one"), land, "tablet",
+ test::ValueBuilder<Id>().SetSource(Source("land/tablet.xml")).Build(),
+ context->GetDiagnostics()));
- ASSERT_TRUE(table.addResource(
- test::parseNameOrDie("android:string/one"), port, "",
- test::ValueBuilder<Id>().setSource(Source("port/default.xml")).build(),
- context->getDiagnostics()));
- ASSERT_TRUE(table.addResource(
- test::parseNameOrDie("android:string/one"), port, "tablet",
- test::ValueBuilder<Id>().setSource(Source("port/tablet.xml")).build(),
- context->getDiagnostics()));
+ ASSERT_TRUE(table.AddResource(
+ test::ParseNameOrDie("android:string/one"), port, "",
+ test::ValueBuilder<Id>().SetSource(Source("port/default.xml")).Build(),
+ context->GetDiagnostics()));
+ ASSERT_TRUE(table.AddResource(
+ test::ParseNameOrDie("android:string/one"), port, "tablet",
+ test::ValueBuilder<Id>().SetSource(Source("port/tablet.xml")).Build(),
+ context->GetDiagnostics()));
ProductFilter filter({"tablet"});
- ASSERT_TRUE(filter.consume(context.get(), &table));
+ ASSERT_TRUE(filter.Consume(context.get(), &table));
- EXPECT_EQ(nullptr, test::getValueForConfigAndProduct<Id>(
+ EXPECT_EQ(nullptr, test::GetValueForConfigAndProduct<Id>(
&table, "android:string/one", land, ""));
- EXPECT_NE(nullptr, test::getValueForConfigAndProduct<Id>(
+ EXPECT_NE(nullptr, test::GetValueForConfigAndProduct<Id>(
&table, "android:string/one", land, "tablet"));
- EXPECT_EQ(nullptr, test::getValueForConfigAndProduct<Id>(
+ EXPECT_EQ(nullptr, test::GetValueForConfigAndProduct<Id>(
&table, "android:string/one", port, ""));
- EXPECT_NE(nullptr, test::getValueForConfigAndProduct<Id>(
+ EXPECT_NE(nullptr, test::GetValueForConfigAndProduct<Id>(
&table, "android:string/one", port, "tablet"));
}
TEST(ProductFilterTest, SelectDefaultProduct) {
- std::unique_ptr<IAaptContext> context = test::ContextBuilder().build();
+ std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
ResourceTable table;
- ASSERT_TRUE(table.addResource(
- test::parseNameOrDie("android:string/one"),
- ConfigDescription::defaultConfig(), "",
- test::ValueBuilder<Id>().setSource(Source("default.xml")).build(),
- context->getDiagnostics()));
- ASSERT_TRUE(table.addResource(
- test::parseNameOrDie("android:string/one"),
- ConfigDescription::defaultConfig(), "tablet",
- test::ValueBuilder<Id>().setSource(Source("tablet.xml")).build(),
- context->getDiagnostics()));
+ ASSERT_TRUE(table.AddResource(
+ test::ParseNameOrDie("android:string/one"),
+ ConfigDescription::DefaultConfig(), "",
+ test::ValueBuilder<Id>().SetSource(Source("default.xml")).Build(),
+ context->GetDiagnostics()));
+ ASSERT_TRUE(table.AddResource(
+ test::ParseNameOrDie("android:string/one"),
+ ConfigDescription::DefaultConfig(), "tablet",
+ test::ValueBuilder<Id>().SetSource(Source("tablet.xml")).Build(),
+ context->GetDiagnostics()));
ProductFilter filter({});
- ASSERT_TRUE(filter.consume(context.get(), &table));
+ ASSERT_TRUE(filter.Consume(context.get(), &table));
- EXPECT_NE(nullptr, test::getValueForConfigAndProduct<Id>(
+ EXPECT_NE(nullptr, test::GetValueForConfigAndProduct<Id>(
&table, "android:string/one",
- ConfigDescription::defaultConfig(), ""));
- EXPECT_EQ(nullptr, test::getValueForConfigAndProduct<Id>(
+ ConfigDescription::DefaultConfig(), ""));
+ EXPECT_EQ(nullptr, test::GetValueForConfigAndProduct<Id>(
&table, "android:string/one",
- ConfigDescription::defaultConfig(), "tablet"));
+ ConfigDescription::DefaultConfig(), "tablet"));
}
TEST(ProductFilterTest, FailOnAmbiguousProduct) {
- std::unique_ptr<IAaptContext> context = test::ContextBuilder().build();
+ std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
ResourceTable table;
- ASSERT_TRUE(table.addResource(
- test::parseNameOrDie("android:string/one"),
- ConfigDescription::defaultConfig(), "",
- test::ValueBuilder<Id>().setSource(Source("default.xml")).build(),
- context->getDiagnostics()));
- ASSERT_TRUE(table.addResource(
- test::parseNameOrDie("android:string/one"),
- ConfigDescription::defaultConfig(), "tablet",
- test::ValueBuilder<Id>().setSource(Source("tablet.xml")).build(),
- context->getDiagnostics()));
- ASSERT_TRUE(table.addResource(
- test::parseNameOrDie("android:string/one"),
- ConfigDescription::defaultConfig(), "no-sdcard",
- test::ValueBuilder<Id>().setSource(Source("no-sdcard.xml")).build(),
- context->getDiagnostics()));
+ ASSERT_TRUE(table.AddResource(
+ test::ParseNameOrDie("android:string/one"),
+ ConfigDescription::DefaultConfig(), "",
+ test::ValueBuilder<Id>().SetSource(Source("default.xml")).Build(),
+ context->GetDiagnostics()));
+ ASSERT_TRUE(table.AddResource(
+ test::ParseNameOrDie("android:string/one"),
+ ConfigDescription::DefaultConfig(), "tablet",
+ test::ValueBuilder<Id>().SetSource(Source("tablet.xml")).Build(),
+ context->GetDiagnostics()));
+ ASSERT_TRUE(table.AddResource(
+ test::ParseNameOrDie("android:string/one"),
+ ConfigDescription::DefaultConfig(), "no-sdcard",
+ test::ValueBuilder<Id>().SetSource(Source("no-sdcard.xml")).Build(),
+ context->GetDiagnostics()));
ProductFilter filter({"tablet", "no-sdcard"});
- ASSERT_FALSE(filter.consume(context.get(), &table));
+ ASSERT_FALSE(filter.Consume(context.get(), &table));
}
TEST(ProductFilterTest, FailOnMultipleDefaults) {
- std::unique_ptr<IAaptContext> context = test::ContextBuilder().build();
+ std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
ResourceTable table;
- ASSERT_TRUE(table.addResource(
- test::parseNameOrDie("android:string/one"),
- ConfigDescription::defaultConfig(), "",
- test::ValueBuilder<Id>().setSource(Source(".xml")).build(),
- context->getDiagnostics()));
- ASSERT_TRUE(table.addResource(
- test::parseNameOrDie("android:string/one"),
- ConfigDescription::defaultConfig(), "default",
- test::ValueBuilder<Id>().setSource(Source("default.xml")).build(),
- context->getDiagnostics()));
+ ASSERT_TRUE(table.AddResource(
+ test::ParseNameOrDie("android:string/one"),
+ ConfigDescription::DefaultConfig(), "",
+ test::ValueBuilder<Id>().SetSource(Source(".xml")).Build(),
+ context->GetDiagnostics()));
+ ASSERT_TRUE(table.AddResource(
+ test::ParseNameOrDie("android:string/one"),
+ ConfigDescription::DefaultConfig(), "default",
+ test::ValueBuilder<Id>().SetSource(Source("default.xml")).Build(),
+ context->GetDiagnostics()));
ProductFilter filter({});
- ASSERT_FALSE(filter.consume(context.get(), &table));
+ ASSERT_FALSE(filter.Consume(context.get(), &table));
}
} // namespace aapt
diff --git a/tools/aapt2/link/ReferenceLinker.cpp b/tools/aapt2/link/ReferenceLinker.cpp
index 7fe0956..be787b2 100644
--- a/tools/aapt2/link/ReferenceLinker.cpp
+++ b/tools/aapt2/link/ReferenceLinker.cpp
@@ -14,7 +14,11 @@
* limitations under the License.
*/
-#include "ReferenceLinker.h"
+#include "link/ReferenceLinker.h"
+
+#include "android-base/logging.h"
+#include "androidfw/ResourceTypes.h"
+
#include "Diagnostics.h"
#include "ResourceTable.h"
#include "ResourceUtils.h"
@@ -26,9 +30,6 @@
#include "util/Util.h"
#include "xml/XmlUtil.h"
-#include <androidfw/ResourceTypes.h>
-#include <cassert>
-
namespace aapt {
namespace {
@@ -46,21 +47,21 @@
*/
class ReferenceLinkerVisitor : public ValueVisitor {
public:
- using ValueVisitor::visit;
+ using ValueVisitor::Visit;
ReferenceLinkerVisitor(IAaptContext* context, SymbolTable* symbols,
- StringPool* stringPool, xml::IPackageDeclStack* decl,
- CallSite* callSite)
- : mContext(context),
- mSymbols(symbols),
- mPackageDecls(decl),
- mStringPool(stringPool),
- mCallSite(callSite) {}
+ StringPool* string_pool, xml::IPackageDeclStack* decl,
+ CallSite* callsite)
+ : context_(context),
+ symbols_(symbols),
+ package_decls_(decl),
+ string_pool_(string_pool),
+ callsite_(callsite) {}
- void visit(Reference* ref) override {
- if (!ReferenceLinker::linkReference(ref, mContext, mSymbols, mPackageDecls,
- mCallSite)) {
- mError = true;
+ void Visit(Reference* ref) override {
+ if (!ReferenceLinker::LinkReference(ref, context_, symbols_, package_decls_,
+ callsite_)) {
+ error_ = true;
}
}
@@ -72,13 +73,13 @@
* lookup the attributes to find out which types are allowed for the
* attributes' values.
*/
- void visit(Style* style) override {
+ void Visit(Style* style) override {
if (style->parent) {
- visit(&style->parent.value());
+ Visit(&style->parent.value());
}
for (Style::Entry& entry : style->entries) {
- std::string errStr;
+ std::string err_str;
// Transform the attribute reference so that it is using the fully
// qualified package
@@ -86,17 +87,17 @@
// resources if
// there was a '*' in the reference or if the package came from the
// private namespace.
- Reference transformedReference = entry.key;
- transformReferenceFromNamespace(mPackageDecls,
- mContext->getCompilationPackage(),
- &transformedReference);
+ Reference transformed_reference = entry.key;
+ TransformReferenceFromNamespace(package_decls_,
+ context_->GetCompilationPackage(),
+ &transformed_reference);
// Find the attribute in the symbol table and check if it is visible from
// this callsite.
const SymbolTable::Symbol* symbol =
- ReferenceLinker::resolveAttributeCheckVisibility(
- transformedReference, mContext->getNameMangler(), mSymbols,
- mCallSite, &errStr);
+ ReferenceLinker::ResolveAttributeCheckVisibility(
+ transformed_reference, context_->GetNameMangler(), symbols_,
+ callsite_, &err_str);
if (symbol) {
// Assign our style key the correct ID.
// The ID may not exist.
@@ -104,11 +105,11 @@
// Try to convert the value to a more specific, typed value based on the
// attribute it is set to.
- entry.value = parseValueWithAttribute(std::move(entry.value),
+ entry.value = ParseValueWithAttribute(std::move(entry.value),
symbol->attribute.get());
// Link/resolve the final value (mostly if it's a reference).
- entry.value->accept(this);
+ entry.value->Accept(this);
// Now verify that the type of this item is compatible with the
// attribute it
@@ -116,39 +117,34 @@
// check is
// fast and we avoid creating a DiagMessage when the match is
// successful.
- if (!symbol->attribute->matches(entry.value.get(), nullptr)) {
+ if (!symbol->attribute->Matches(entry.value.get(), nullptr)) {
// The actual type of this item is incompatible with the attribute.
- DiagMessage msg(entry.key.getSource());
+ DiagMessage msg(entry.key.GetSource());
// Call the matches method again, this time with a DiagMessage so we
// fill
// in the actual error message.
- symbol->attribute->matches(entry.value.get(), &msg);
- mContext->getDiagnostics()->error(msg);
- mError = true;
+ symbol->attribute->Matches(entry.value.get(), &msg);
+ context_->GetDiagnostics()->Error(msg);
+ error_ = true;
}
} else {
- DiagMessage msg(entry.key.getSource());
+ DiagMessage msg(entry.key.GetSource());
msg << "style attribute '";
- ReferenceLinker::writeResourceName(&msg, entry.key,
- transformedReference);
- msg << "' " << errStr;
- mContext->getDiagnostics()->error(msg);
- mError = true;
+ ReferenceLinker::WriteResourceName(&msg, entry.key,
+ transformed_reference);
+ msg << "' " << err_str;
+ context_->GetDiagnostics()->Error(msg);
+ error_ = true;
}
}
}
- bool hasError() { return mError; }
+ bool HasError() { return error_; }
private:
- IAaptContext* mContext;
- SymbolTable* mSymbols;
- xml::IPackageDeclStack* mPackageDecls;
- StringPool* mStringPool;
- CallSite* mCallSite;
- bool mError = false;
+ DISALLOW_COPY_AND_ASSIGN(ReferenceLinkerVisitor);
/**
* Transform a RawString value into a more specific, appropriate value, based
@@ -156,20 +152,20 @@
* Attribute. If a non RawString value is passed in, this is an identity
* transform.
*/
- std::unique_ptr<Item> parseValueWithAttribute(std::unique_ptr<Item> value,
+ std::unique_ptr<Item> ParseValueWithAttribute(std::unique_ptr<Item> value,
const Attribute* attr) {
- if (RawString* rawString = valueCast<RawString>(value.get())) {
+ if (RawString* raw_string = ValueCast<RawString>(value.get())) {
std::unique_ptr<Item> transformed =
- ResourceUtils::tryParseItemForAttribute(*rawString->value, attr);
+ ResourceUtils::TryParseItemForAttribute(*raw_string->value, attr);
// If we could not parse as any specific type, try a basic STRING.
if (!transformed &&
- (attr->typeMask & android::ResTable_map::TYPE_STRING)) {
- util::StringBuilder stringBuilder;
- stringBuilder.append(*rawString->value);
- if (stringBuilder) {
+ (attr->type_mask & android::ResTable_map::TYPE_STRING)) {
+ util::StringBuilder string_builder;
+ string_builder.Append(*raw_string->value);
+ if (string_builder) {
transformed = util::make_unique<String>(
- mStringPool->makeRef(stringBuilder.str()));
+ string_pool_->MakeRef(string_builder.ToString()));
}
}
@@ -179,6 +175,31 @@
};
return value;
}
+
+ IAaptContext* context_;
+ SymbolTable* symbols_;
+ xml::IPackageDeclStack* package_decls_;
+ StringPool* string_pool_;
+ CallSite* callsite_;
+ bool error_ = false;
+};
+
+class EmptyDeclStack : public xml::IPackageDeclStack {
+ public:
+ EmptyDeclStack() = default;
+
+ Maybe<xml::ExtractedPackage> TransformPackageAlias(
+ const StringPiece& alias,
+ const StringPiece& local_package) const override {
+ if (alias.empty()) {
+ return xml::ExtractedPackage{local_package.ToString(),
+ true /* private */};
+ }
+ return {};
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(EmptyDeclStack);
};
} // namespace
@@ -188,14 +209,14 @@
* requesting private access
* or if the callsite comes from the same package.
*/
-bool ReferenceLinker::isSymbolVisible(const SymbolTable::Symbol& symbol,
+bool ReferenceLinker::IsSymbolVisible(const SymbolTable::Symbol& symbol,
const Reference& ref,
- const CallSite& callSite) {
- if (!symbol.isPublic && !ref.privateReference) {
+ const CallSite& callsite) {
+ if (!symbol.is_public && !ref.private_reference) {
if (ref.name) {
- return callSite.resource.package == ref.name.value().package;
+ return callsite.resource.package == ref.name.value().package;
} else if (ref.id && symbol.id) {
- return ref.id.value().packageId() == symbol.id.value().packageId();
+ return ref.id.value().package_id() == symbol.id.value().package_id();
} else {
return false;
}
@@ -203,160 +224,144 @@
return true;
}
-const SymbolTable::Symbol* ReferenceLinker::resolveSymbol(
+const SymbolTable::Symbol* ReferenceLinker::ResolveSymbol(
const Reference& reference, NameMangler* mangler, SymbolTable* symbols) {
if (reference.name) {
- Maybe<ResourceName> mangled = mangler->mangleName(reference.name.value());
- return symbols->findByName(mangled ? mangled.value()
+ Maybe<ResourceName> mangled = mangler->MangleName(reference.name.value());
+ return symbols->FindByName(mangled ? mangled.value()
: reference.name.value());
} else if (reference.id) {
- return symbols->findById(reference.id.value());
+ return symbols->FindById(reference.id.value());
} else {
return nullptr;
}
}
-const SymbolTable::Symbol* ReferenceLinker::resolveSymbolCheckVisibility(
- const Reference& reference, NameMangler* nameMangler, SymbolTable* symbols,
- CallSite* callSite, std::string* outError) {
+const SymbolTable::Symbol* ReferenceLinker::ResolveSymbolCheckVisibility(
+ const Reference& reference, NameMangler* name_mangler, SymbolTable* symbols,
+ CallSite* callsite, std::string* out_error) {
const SymbolTable::Symbol* symbol =
- resolveSymbol(reference, nameMangler, symbols);
+ ResolveSymbol(reference, name_mangler, symbols);
if (!symbol) {
- if (outError) *outError = "not found";
+ if (out_error) *out_error = "not found";
return nullptr;
}
- if (!isSymbolVisible(*symbol, reference, *callSite)) {
- if (outError) *outError = "is private";
+ if (!IsSymbolVisible(*symbol, reference, *callsite)) {
+ if (out_error) *out_error = "is private";
return nullptr;
}
return symbol;
}
-const SymbolTable::Symbol* ReferenceLinker::resolveAttributeCheckVisibility(
- const Reference& reference, NameMangler* nameMangler, SymbolTable* symbols,
- CallSite* callSite, std::string* outError) {
- const SymbolTable::Symbol* symbol = resolveSymbolCheckVisibility(
- reference, nameMangler, symbols, callSite, outError);
+const SymbolTable::Symbol* ReferenceLinker::ResolveAttributeCheckVisibility(
+ const Reference& reference, NameMangler* name_mangler, SymbolTable* symbols,
+ CallSite* callsite, std::string* out_error) {
+ const SymbolTable::Symbol* symbol = ResolveSymbolCheckVisibility(
+ reference, name_mangler, symbols, callsite, out_error);
if (!symbol) {
return nullptr;
}
if (!symbol->attribute) {
- if (outError) *outError = "is not an attribute";
+ if (out_error) *out_error = "is not an attribute";
return nullptr;
}
return symbol;
}
-Maybe<xml::AaptAttribute> ReferenceLinker::compileXmlAttribute(
- const Reference& reference, NameMangler* nameMangler, SymbolTable* symbols,
- CallSite* callSite, std::string* outError) {
+Maybe<xml::AaptAttribute> ReferenceLinker::CompileXmlAttribute(
+ const Reference& reference, NameMangler* name_mangler, SymbolTable* symbols,
+ CallSite* callsite, std::string* out_error) {
const SymbolTable::Symbol* symbol =
- resolveSymbol(reference, nameMangler, symbols);
+ ResolveSymbol(reference, name_mangler, symbols);
if (!symbol) {
- if (outError) *outError = "not found";
+ if (out_error) *out_error = "not found";
return {};
}
if (!symbol->attribute) {
- if (outError) *outError = "is not an attribute";
+ if (out_error) *out_error = "is not an attribute";
return {};
}
return xml::AaptAttribute{symbol->id, *symbol->attribute};
}
-void ReferenceLinker::writeResourceName(DiagMessage* outMsg,
+void ReferenceLinker::WriteResourceName(DiagMessage* out_msg,
const Reference& orig,
const Reference& transformed) {
- assert(outMsg);
+ CHECK(out_msg != nullptr);
if (orig.name) {
- *outMsg << orig.name.value();
+ *out_msg << orig.name.value();
if (transformed.name.value() != orig.name.value()) {
- *outMsg << " (aka " << transformed.name.value() << ")";
+ *out_msg << " (aka " << transformed.name.value() << ")";
}
} else {
- *outMsg << orig.id.value();
+ *out_msg << orig.id.value();
}
}
-bool ReferenceLinker::linkReference(Reference* reference, IAaptContext* context,
+bool ReferenceLinker::LinkReference(Reference* reference, IAaptContext* context,
SymbolTable* symbols,
xml::IPackageDeclStack* decls,
- CallSite* callSite) {
- assert(reference);
- assert(reference->name || reference->id);
+ CallSite* callsite) {
+ CHECK(reference != nullptr);
+ CHECK(reference->name || reference->id);
- Reference transformedReference = *reference;
- transformReferenceFromNamespace(decls, context->getCompilationPackage(),
- &transformedReference);
+ Reference transformed_reference = *reference;
+ TransformReferenceFromNamespace(decls, context->GetCompilationPackage(),
+ &transformed_reference);
- std::string errStr;
- const SymbolTable::Symbol* s = resolveSymbolCheckVisibility(
- transformedReference, context->getNameMangler(), symbols, callSite,
- &errStr);
+ std::string err_str;
+ const SymbolTable::Symbol* s = ResolveSymbolCheckVisibility(
+ transformed_reference, context->GetNameMangler(), symbols, callsite,
+ &err_str);
if (s) {
// The ID may not exist. This is fine because of the possibility of building
- // against
- // libraries without assigned IDs.
+ // against libraries without assigned IDs.
// Ex: Linking against own resources when building a static library.
reference->id = s->id;
return true;
}
- DiagMessage errorMsg(reference->getSource());
- errorMsg << "resource ";
- writeResourceName(&errorMsg, *reference, transformedReference);
- errorMsg << " " << errStr;
- context->getDiagnostics()->error(errorMsg);
+ DiagMessage error_msg(reference->GetSource());
+ error_msg << "resource ";
+ WriteResourceName(&error_msg, *reference, transformed_reference);
+ error_msg << " " << err_str;
+ context->GetDiagnostics()->Error(error_msg);
return false;
}
-namespace {
-
-struct EmptyDeclStack : public xml::IPackageDeclStack {
- Maybe<xml::ExtractedPackage> transformPackageAlias(
- const StringPiece& alias,
- const StringPiece& localPackage) const override {
- if (alias.empty()) {
- return xml::ExtractedPackage{localPackage.toString(), true /* private */};
- }
- return {};
- }
-};
-
-} // namespace
-
-bool ReferenceLinker::consume(IAaptContext* context, ResourceTable* table) {
- EmptyDeclStack declStack;
+bool ReferenceLinker::Consume(IAaptContext* context, ResourceTable* table) {
+ EmptyDeclStack decl_stack;
bool error = false;
for (auto& package : table->packages) {
for (auto& type : package->types) {
for (auto& entry : type->entries) {
// Symbol state information may be lost if there is no value for the
// resource.
- if (entry->symbolStatus.state != SymbolState::kUndefined &&
+ if (entry->symbol_status.state != SymbolState::kUndefined &&
entry->values.empty()) {
- context->getDiagnostics()->error(
- DiagMessage(entry->symbolStatus.source)
+ context->GetDiagnostics()->Error(
+ DiagMessage(entry->symbol_status.source)
<< "no definition for declared symbol '"
<< ResourceNameRef(package->name, type->type, entry->name)
<< "'");
error = true;
}
- CallSite callSite = {
+ CallSite callsite = {
ResourceNameRef(package->name, type->type, entry->name)};
- ReferenceLinkerVisitor visitor(context, context->getExternalSymbols(),
- &table->stringPool, &declStack,
- &callSite);
+ ReferenceLinkerVisitor visitor(context, context->GetExternalSymbols(),
+ &table->string_pool, &decl_stack,
+ &callsite);
- for (auto& configValue : entry->values) {
- configValue->value->accept(&visitor);
+ for (auto& config_value : entry->values) {
+ config_value->value->Accept(&visitor);
}
- if (visitor.hasError()) {
+ if (visitor.HasError()) {
error = true;
}
}
diff --git a/tools/aapt2/link/ReferenceLinker.h b/tools/aapt2/link/ReferenceLinker.h
index 8f6604f..bdabf24 100644
--- a/tools/aapt2/link/ReferenceLinker.h
+++ b/tools/aapt2/link/ReferenceLinker.h
@@ -17,6 +17,8 @@
#ifndef AAPT_LINKER_REFERENCELINKER_H
#define AAPT_LINKER_REFERENCELINKER_H
+#include "android-base/macros.h"
+
#include "Resource.h"
#include "ResourceValues.h"
#include "ValueVisitor.h"
@@ -25,8 +27,6 @@
#include "process/SymbolTable.h"
#include "xml/XmlDom.h"
-#include <cassert>
-
namespace aapt {
/**
@@ -36,33 +36,33 @@
* Once the ResourceTable is processed by this linker, it is ready to be
* flattened.
*/
-struct ReferenceLinker : public IResourceTableConsumer {
+class ReferenceLinker : public IResourceTableConsumer {
+ public:
+ ReferenceLinker() = default;
+
/**
* Returns true if the symbol is visible by the reference and from the
* callsite.
*/
- static bool isSymbolVisible(const SymbolTable::Symbol& symbol,
- const Reference& ref, const CallSite& callSite);
+ static bool IsSymbolVisible(const SymbolTable::Symbol& symbol,
+ const Reference& ref, const CallSite& callsite);
/**
* Performs name mangling and looks up the resource in the symbol table.
- * Returns nullptr
- * if the symbol was not found.
+ * Returns nullptr if the symbol was not found.
*/
- static const SymbolTable::Symbol* resolveSymbol(const Reference& reference,
+ static const SymbolTable::Symbol* ResolveSymbol(const Reference& reference,
NameMangler* mangler,
SymbolTable* symbols);
/**
* Performs name mangling and looks up the resource in the symbol table. If
- * the symbol is
- * not visible by the reference at the callsite, nullptr is returned. outError
- * holds
- * the error message.
+ * the symbol is not visible by the reference at the callsite, nullptr is
+ * returned. out_error holds the error message.
*/
- static const SymbolTable::Symbol* resolveSymbolCheckVisibility(
- const Reference& reference, NameMangler* nameMangler,
- SymbolTable* symbols, CallSite* callSite, std::string* outError);
+ static const SymbolTable::Symbol* ResolveSymbolCheckVisibility(
+ const Reference& reference, NameMangler* name_mangler,
+ SymbolTable* symbols, CallSite* callsite, std::string* out_error);
/**
* Same as resolveSymbolCheckVisibility(), but also makes sure the symbol is
@@ -70,25 +70,24 @@
* That is, the return value will have a non-null value for
* ISymbolTable::Symbol::attribute.
*/
- static const SymbolTable::Symbol* resolveAttributeCheckVisibility(
- const Reference& reference, NameMangler* nameMangler,
- SymbolTable* symbols, CallSite* callSite, std::string* outError);
+ static const SymbolTable::Symbol* ResolveAttributeCheckVisibility(
+ const Reference& reference, NameMangler* name_mangler,
+ SymbolTable* symbols, CallSite* callsite, std::string* out_error);
/**
* Resolves the attribute reference and returns an xml::AaptAttribute if
* successful.
* If resolution fails, outError holds the error message.
*/
- static Maybe<xml::AaptAttribute> compileXmlAttribute(
- const Reference& reference, NameMangler* nameMangler,
- SymbolTable* symbols, CallSite* callSite, std::string* outError);
+ static Maybe<xml::AaptAttribute> CompileXmlAttribute(
+ const Reference& reference, NameMangler* name_mangler,
+ SymbolTable* symbols, CallSite* callsite, std::string* out_error);
/**
- * Writes the resource name to the DiagMessage, using the "orig_name (aka
- * <transformed_name>)"
- * syntax.
+ * Writes the resource name to the DiagMessage, using the
+ * "orig_name (aka <transformed_name>)" syntax.
*/
- static void writeResourceName(DiagMessage* outMsg, const Reference& orig,
+ static void WriteResourceName(DiagMessage* out_msg, const Reference& orig,
const Reference& transformed);
/**
@@ -100,14 +99,17 @@
* Returns false on failure, and an error message is logged to the
* IDiagnostics in the context.
*/
- static bool linkReference(Reference* reference, IAaptContext* context,
+ static bool LinkReference(Reference* reference, IAaptContext* context,
SymbolTable* symbols, xml::IPackageDeclStack* decls,
- CallSite* callSite);
+ CallSite* callsite);
/**
* Links all references in the ResourceTable.
*/
- bool consume(IAaptContext* context, ResourceTable* table) override;
+ bool Consume(IAaptContext* context, ResourceTable* table) override;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ReferenceLinker);
};
} // namespace aapt
diff --git a/tools/aapt2/link/ReferenceLinker_test.cpp b/tools/aapt2/link/ReferenceLinker_test.cpp
index 8aa3616..4ca36a9 100644
--- a/tools/aapt2/link/ReferenceLinker_test.cpp
+++ b/tools/aapt2/link/ReferenceLinker_test.cpp
@@ -15,6 +15,7 @@
*/
#include "link/ReferenceLinker.h"
+
#include "test/Test.h"
using android::ResTable_map;
@@ -24,46 +25,46 @@
TEST(ReferenceLinkerTest, LinkSimpleReferences) {
std::unique_ptr<ResourceTable> table =
test::ResourceTableBuilder()
- .setPackageId("com.app.test", 0x7f)
- .addReference("com.app.test:string/foo", ResourceId(0x7f020000),
+ .SetPackageId("com.app.test", 0x7f)
+ .AddReference("com.app.test:string/foo", ResourceId(0x7f020000),
"com.app.test:string/bar")
// Test use of local reference (w/o package name).
- .addReference("com.app.test:string/bar", ResourceId(0x7f020001),
+ .AddReference("com.app.test:string/bar", ResourceId(0x7f020001),
"string/baz")
- .addReference("com.app.test:string/baz", ResourceId(0x7f020002),
+ .AddReference("com.app.test:string/baz", ResourceId(0x7f020002),
"android:string/ok")
- .build();
+ .Build();
std::unique_ptr<IAaptContext> context =
test::ContextBuilder()
- .setCompilationPackage("com.app.test")
- .setPackageId(0x7f)
- .setNameManglerPolicy(NameManglerPolicy{"com.app.test"})
- .addSymbolSource(
+ .SetCompilationPackage("com.app.test")
+ .SetPackageId(0x7f)
+ .SetNameManglerPolicy(NameManglerPolicy{"com.app.test"})
+ .AddSymbolSource(
util::make_unique<ResourceTableSymbolSource>(table.get()))
- .addSymbolSource(
+ .AddSymbolSource(
test::StaticSymbolSourceBuilder()
- .addPublicSymbol("android:string/ok", ResourceId(0x01040034))
- .build())
- .build();
+ .AddPublicSymbol("android:string/ok", ResourceId(0x01040034))
+ .Build())
+ .Build();
ReferenceLinker linker;
- ASSERT_TRUE(linker.consume(context.get(), table.get()));
+ ASSERT_TRUE(linker.Consume(context.get(), table.get()));
Reference* ref =
- test::getValue<Reference>(table.get(), "com.app.test:string/foo");
+ test::GetValue<Reference>(table.get(), "com.app.test:string/foo");
ASSERT_NE(ref, nullptr);
AAPT_ASSERT_TRUE(ref->id);
EXPECT_EQ(ref->id.value(), ResourceId(0x7f020001));
- ref = test::getValue<Reference>(table.get(), "com.app.test:string/bar");
+ ref = test::GetValue<Reference>(table.get(), "com.app.test:string/bar");
ASSERT_NE(ref, nullptr);
AAPT_ASSERT_TRUE(ref->id);
EXPECT_EQ(ref->id.value(), ResourceId(0x7f020002));
- ref = test::getValue<Reference>(table.get(), "com.app.test:string/baz");
+ ref = test::GetValue<Reference>(table.get(), "com.app.test:string/baz");
ASSERT_NE(ref, nullptr);
AAPT_ASSERT_TRUE(ref->id);
EXPECT_EQ(ref->id.value(), ResourceId(0x01040034));
@@ -72,53 +73,53 @@
TEST(ReferenceLinkerTest, LinkStyleAttributes) {
std::unique_ptr<ResourceTable> table =
test::ResourceTableBuilder()
- .setPackageId("com.app.test", 0x7f)
- .addValue("com.app.test:style/Theme",
+ .SetPackageId("com.app.test", 0x7f)
+ .AddValue("com.app.test:style/Theme",
test::StyleBuilder()
- .setParent("android:style/Theme.Material")
- .addItem("android:attr/foo",
- ResourceUtils::tryParseColor("#ff00ff"))
- .addItem("android:attr/bar", {} /* placeholder */)
- .build())
- .build();
+ .SetParent("android:style/Theme.Material")
+ .AddItem("android:attr/foo",
+ ResourceUtils::TryParseColor("#ff00ff"))
+ .AddItem("android:attr/bar", {} /* placeholder */)
+ .Build())
+ .Build();
{
// We need to fill in the value for the attribute android:attr/bar after we
// build the
// table, because we need access to the string pool.
Style* style =
- test::getValue<Style>(table.get(), "com.app.test:style/Theme");
+ test::GetValue<Style>(table.get(), "com.app.test:style/Theme");
ASSERT_NE(style, nullptr);
style->entries.back().value =
- util::make_unique<RawString>(table->stringPool.makeRef("one|two"));
+ util::make_unique<RawString>(table->string_pool.MakeRef("one|two"));
}
std::unique_ptr<IAaptContext> context =
test::ContextBuilder()
- .setCompilationPackage("com.app.test")
- .setPackageId(0x7f)
- .setNameManglerPolicy(NameManglerPolicy{"com.app.test"})
- .addSymbolSource(
+ .SetCompilationPackage("com.app.test")
+ .SetPackageId(0x7f)
+ .SetNameManglerPolicy(NameManglerPolicy{"com.app.test"})
+ .AddSymbolSource(
test::StaticSymbolSourceBuilder()
- .addPublicSymbol("android:style/Theme.Material",
+ .AddPublicSymbol("android:style/Theme.Material",
ResourceId(0x01060000))
- .addPublicSymbol("android:attr/foo", ResourceId(0x01010001),
+ .AddPublicSymbol("android:attr/foo", ResourceId(0x01010001),
test::AttributeBuilder()
- .setTypeMask(ResTable_map::TYPE_COLOR)
- .build())
- .addPublicSymbol("android:attr/bar", ResourceId(0x01010002),
+ .SetTypeMask(ResTable_map::TYPE_COLOR)
+ .Build())
+ .AddPublicSymbol("android:attr/bar", ResourceId(0x01010002),
test::AttributeBuilder()
- .setTypeMask(ResTable_map::TYPE_FLAGS)
- .addItem("one", 0x01)
- .addItem("two", 0x02)
- .build())
- .build())
- .build();
+ .SetTypeMask(ResTable_map::TYPE_FLAGS)
+ .AddItem("one", 0x01)
+ .AddItem("two", 0x02)
+ .Build())
+ .Build())
+ .Build();
ReferenceLinker linker;
- ASSERT_TRUE(linker.consume(context.get(), table.get()));
+ ASSERT_TRUE(linker.Consume(context.get(), table.get()));
- Style* style = test::getValue<Style>(table.get(), "com.app.test:style/Theme");
+ Style* style = test::GetValue<Style>(table.get(), "com.app.test:style/Theme");
ASSERT_NE(style, nullptr);
AAPT_ASSERT_TRUE(style->parent);
AAPT_ASSERT_TRUE(style->parent.value().id);
@@ -128,44 +129,44 @@
AAPT_ASSERT_TRUE(style->entries[0].key.id);
EXPECT_EQ(style->entries[0].key.id.value(), ResourceId(0x01010001));
- ASSERT_NE(valueCast<BinaryPrimitive>(style->entries[0].value.get()), nullptr);
+ ASSERT_NE(ValueCast<BinaryPrimitive>(style->entries[0].value.get()), nullptr);
AAPT_ASSERT_TRUE(style->entries[1].key.id);
EXPECT_EQ(style->entries[1].key.id.value(), ResourceId(0x01010002));
- ASSERT_NE(valueCast<BinaryPrimitive>(style->entries[1].value.get()), nullptr);
+ ASSERT_NE(ValueCast<BinaryPrimitive>(style->entries[1].value.get()), nullptr);
}
TEST(ReferenceLinkerTest, LinkMangledReferencesAndAttributes) {
std::unique_ptr<IAaptContext> context =
test::ContextBuilder()
- .setCompilationPackage("com.app.test")
- .setPackageId(0x7f)
- .setNameManglerPolicy(
+ .SetCompilationPackage("com.app.test")
+ .SetPackageId(0x7f)
+ .SetNameManglerPolicy(
NameManglerPolicy{"com.app.test", {"com.android.support"}})
- .addSymbolSource(
+ .AddSymbolSource(
test::StaticSymbolSourceBuilder()
- .addPublicSymbol("com.app.test:attr/com.android.support$foo",
+ .AddPublicSymbol("com.app.test:attr/com.android.support$foo",
ResourceId(0x7f010000),
test::AttributeBuilder()
- .setTypeMask(ResTable_map::TYPE_COLOR)
- .build())
- .build())
- .build();
+ .SetTypeMask(ResTable_map::TYPE_COLOR)
+ .Build())
+ .Build())
+ .Build();
std::unique_ptr<ResourceTable> table =
test::ResourceTableBuilder()
- .setPackageId("com.app.test", 0x7f)
- .addValue("com.app.test:style/Theme", ResourceId(0x7f020000),
+ .SetPackageId("com.app.test", 0x7f)
+ .AddValue("com.app.test:style/Theme", ResourceId(0x7f020000),
test::StyleBuilder()
- .addItem("com.android.support:attr/foo",
- ResourceUtils::tryParseColor("#ff0000"))
- .build())
- .build();
+ .AddItem("com.android.support:attr/foo",
+ ResourceUtils::TryParseColor("#ff0000"))
+ .Build())
+ .Build();
ReferenceLinker linker;
- ASSERT_TRUE(linker.consume(context.get(), table.get()));
+ ASSERT_TRUE(linker.Consume(context.get(), table.get()));
- Style* style = test::getValue<Style>(table.get(), "com.app.test:style/Theme");
+ Style* style = test::GetValue<Style>(table.get(), "com.app.test:style/Theme");
ASSERT_NE(style, nullptr);
ASSERT_EQ(1u, style->entries.size());
AAPT_ASSERT_TRUE(style->entries.front().key.id);
@@ -175,85 +176,85 @@
TEST(ReferenceLinkerTest, FailToLinkPrivateSymbols) {
std::unique_ptr<ResourceTable> table =
test::ResourceTableBuilder()
- .setPackageId("com.app.test", 0x7f)
- .addReference("com.app.test:string/foo", ResourceId(0x7f020000),
+ .SetPackageId("com.app.test", 0x7f)
+ .AddReference("com.app.test:string/foo", ResourceId(0x7f020000),
"android:string/hidden")
- .build();
+ .Build();
std::unique_ptr<IAaptContext> context =
test::ContextBuilder()
- .setCompilationPackage("com.app.test")
- .setPackageId(0x7f)
- .setNameManglerPolicy(NameManglerPolicy{"com.app.test"})
- .addSymbolSource(
+ .SetCompilationPackage("com.app.test")
+ .SetPackageId(0x7f)
+ .SetNameManglerPolicy(NameManglerPolicy{"com.app.test"})
+ .AddSymbolSource(
util::make_unique<ResourceTableSymbolSource>(table.get()))
- .addSymbolSource(
+ .AddSymbolSource(
test::StaticSymbolSourceBuilder()
- .addSymbol("android:string/hidden", ResourceId(0x01040034))
- .build())
- .build();
+ .AddSymbol("android:string/hidden", ResourceId(0x01040034))
+ .Build())
+ .Build();
ReferenceLinker linker;
- ASSERT_FALSE(linker.consume(context.get(), table.get()));
+ ASSERT_FALSE(linker.Consume(context.get(), table.get()));
}
TEST(ReferenceLinkerTest, FailToLinkPrivateMangledSymbols) {
std::unique_ptr<ResourceTable> table =
test::ResourceTableBuilder()
- .setPackageId("com.app.test", 0x7f)
- .addReference("com.app.test:string/foo", ResourceId(0x7f020000),
+ .SetPackageId("com.app.test", 0x7f)
+ .AddReference("com.app.test:string/foo", ResourceId(0x7f020000),
"com.app.lib:string/hidden")
- .build();
+ .Build();
std::unique_ptr<IAaptContext> context =
test::ContextBuilder()
- .setCompilationPackage("com.app.test")
- .setPackageId(0x7f)
- .setNameManglerPolicy(
+ .SetCompilationPackage("com.app.test")
+ .SetPackageId(0x7f)
+ .SetNameManglerPolicy(
NameManglerPolicy{"com.app.test", {"com.app.lib"}})
- .addSymbolSource(
+ .AddSymbolSource(
util::make_unique<ResourceTableSymbolSource>(table.get()))
- .addSymbolSource(
+ .AddSymbolSource(
test::StaticSymbolSourceBuilder()
- .addSymbol("com.app.test:string/com.app.lib$hidden",
+ .AddSymbol("com.app.test:string/com.app.lib$hidden",
ResourceId(0x7f040034))
- .build())
+ .Build())
- .build();
+ .Build();
ReferenceLinker linker;
- ASSERT_FALSE(linker.consume(context.get(), table.get()));
+ ASSERT_FALSE(linker.Consume(context.get(), table.get()));
}
TEST(ReferenceLinkerTest, FailToLinkPrivateStyleAttributes) {
std::unique_ptr<ResourceTable> table =
test::ResourceTableBuilder()
- .setPackageId("com.app.test", 0x7f)
- .addValue("com.app.test:style/Theme",
+ .SetPackageId("com.app.test", 0x7f)
+ .AddValue("com.app.test:style/Theme",
test::StyleBuilder()
- .addItem("android:attr/hidden",
- ResourceUtils::tryParseColor("#ff00ff"))
- .build())
- .build();
+ .AddItem("android:attr/hidden",
+ ResourceUtils::TryParseColor("#ff00ff"))
+ .Build())
+ .Build();
std::unique_ptr<IAaptContext> context =
test::ContextBuilder()
- .setCompilationPackage("com.app.test")
- .setPackageId(0x7f)
- .setNameManglerPolicy(NameManglerPolicy{"com.app.test"})
- .addSymbolSource(
+ .SetCompilationPackage("com.app.test")
+ .SetPackageId(0x7f)
+ .SetNameManglerPolicy(NameManglerPolicy{"com.app.test"})
+ .AddSymbolSource(
util::make_unique<ResourceTableSymbolSource>(table.get()))
- .addSymbolSource(
+ .AddSymbolSource(
test::StaticSymbolSourceBuilder()
- .addSymbol("android:attr/hidden", ResourceId(0x01010001),
+ .AddSymbol("android:attr/hidden", ResourceId(0x01010001),
test::AttributeBuilder()
- .setTypeMask(android::ResTable_map::TYPE_COLOR)
- .build())
- .build())
- .build();
+ .SetTypeMask(android::ResTable_map::TYPE_COLOR)
+ .Build())
+ .Build())
+ .Build();
ReferenceLinker linker;
- ASSERT_FALSE(linker.consume(context.get(), table.get()));
+ ASSERT_FALSE(linker.Consume(context.get(), table.get()));
}
} // namespace aapt
diff --git a/tools/aapt2/link/ResourceDeduper.cpp b/tools/aapt2/link/ResourceDeduper.cpp
index f565359..9431dce 100644
--- a/tools/aapt2/link/ResourceDeduper.cpp
+++ b/tools/aapt2/link/ResourceDeduper.cpp
@@ -14,12 +14,13 @@
* limitations under the License.
*/
-#include "DominatorTree.h"
-#include "ResourceTable.h"
#include "link/Linkers.h"
#include <algorithm>
+#include "DominatorTree.h"
+#include "ResourceTable.h"
+
namespace aapt {
namespace {
@@ -40,55 +41,57 @@
using Node = DominatorTree::Node;
explicit DominatedKeyValueRemover(IAaptContext* context, ResourceEntry* entry)
- : mContext(context), mEntry(entry) {}
+ : context_(context), entry_(entry) {}
- void visitConfig(Node* node) {
+ void VisitConfig(Node* node) {
Node* parent = node->parent();
if (!parent) {
return;
}
- ResourceConfigValue* nodeValue = node->value();
- ResourceConfigValue* parentValue = parent->value();
- if (!nodeValue || !parentValue) {
+ ResourceConfigValue* node_value = node->value();
+ ResourceConfigValue* parent_value = parent->value();
+ if (!node_value || !parent_value) {
return;
}
- if (!nodeValue->value->equals(parentValue->value.get())) {
+ if (!node_value->value->Equals(parent_value->value.get())) {
return;
}
// Compare compatible configs for this entry and ensure the values are
// equivalent.
- const ConfigDescription& nodeConfiguration = nodeValue->config;
- for (const auto& sibling : mEntry->values) {
+ const ConfigDescription& node_configuration = node_value->config;
+ for (const auto& sibling : entry_->values) {
if (!sibling->value) {
// Sibling was already removed.
continue;
}
- if (nodeConfiguration.isCompatibleWith(sibling->config) &&
- !nodeValue->value->equals(sibling->value.get())) {
+ if (node_configuration.IsCompatibleWith(sibling->config) &&
+ !node_value->value->Equals(sibling->value.get())) {
// The configurations are compatible, but the value is
// different, so we can't remove this value.
return;
}
}
- if (mContext->verbose()) {
- mContext->getDiagnostics()->note(
- DiagMessage(nodeValue->value->getSource())
+ if (context_->IsVerbose()) {
+ context_->GetDiagnostics()->Note(
+ DiagMessage(node_value->value->GetSource())
<< "removing dominated duplicate resource with name \""
- << mEntry->name << "\"");
+ << entry_->name << "\"");
}
- nodeValue->value = {};
+ node_value->value = {};
}
private:
- IAaptContext* mContext;
- ResourceEntry* mEntry;
+ DISALLOW_COPY_AND_ASSIGN(DominatedKeyValueRemover);
+
+ IAaptContext* context_;
+ ResourceEntry* entry_;
};
-static void dedupeEntry(IAaptContext* context, ResourceEntry* entry) {
+static void DedupeEntry(IAaptContext* context, ResourceEntry* entry) {
DominatorTree tree(entry->values);
DominatedKeyValueRemover remover(context, entry);
- tree.accept(&remover);
+ tree.Accept(&remover);
// Erase the values that were removed.
entry->values.erase(
@@ -102,15 +105,15 @@
} // namespace
-bool ResourceDeduper::consume(IAaptContext* context, ResourceTable* table) {
+bool ResourceDeduper::Consume(IAaptContext* context, ResourceTable* table) {
for (auto& package : table->packages) {
for (auto& type : package->types) {
for (auto& entry : type->entries) {
- dedupeEntry(context, entry.get());
+ DedupeEntry(context, entry.get());
}
}
}
return true;
}
-} // aapt
+} // namespace aapt
diff --git a/tools/aapt2/link/ResourceDeduper_test.cpp b/tools/aapt2/link/ResourceDeduper_test.cpp
index 7e2d476..d38059d 100644
--- a/tools/aapt2/link/ResourceDeduper_test.cpp
+++ b/tools/aapt2/link/ResourceDeduper_test.cpp
@@ -14,70 +14,74 @@
* limitations under the License.
*/
-#include "ResourceTable.h"
#include "link/Linkers.h"
+
+#include "ResourceTable.h"
#include "test/Test.h"
namespace aapt {
TEST(ResourceDeduperTest, SameValuesAreDeduped) {
- std::unique_ptr<IAaptContext> context = test::ContextBuilder().build();
- const ConfigDescription defaultConfig = {};
- const ConfigDescription enConfig = test::parseConfigOrDie("en");
- const ConfigDescription enV21Config = test::parseConfigOrDie("en-v21");
+ std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
+ const ConfigDescription default_config = {};
+ const ConfigDescription en_config = test::ParseConfigOrDie("en");
+ const ConfigDescription en_v21_config = test::ParseConfigOrDie("en-v21");
// Chosen because this configuration is compatible with en.
- const ConfigDescription landConfig = test::parseConfigOrDie("land");
+ const ConfigDescription land_config = test::ParseConfigOrDie("land");
std::unique_ptr<ResourceTable> table =
test::ResourceTableBuilder()
- .addString("android:string/dedupe", ResourceId{}, defaultConfig,
+ .AddString("android:string/dedupe", ResourceId{}, default_config,
"dedupe")
- .addString("android:string/dedupe", ResourceId{}, enConfig, "dedupe")
- .addString("android:string/dedupe", ResourceId{}, landConfig,
+ .AddString("android:string/dedupe", ResourceId{}, en_config, "dedupe")
+ .AddString("android:string/dedupe", ResourceId{}, land_config,
"dedupe")
- .addString("android:string/dedupe2", ResourceId{}, defaultConfig,
+ .AddString("android:string/dedupe2", ResourceId{}, default_config,
"dedupe")
- .addString("android:string/dedupe2", ResourceId{}, enConfig, "dedupe")
- .addString("android:string/dedupe2", ResourceId{}, enV21Config,
+ .AddString("android:string/dedupe2", ResourceId{}, en_config,
+ "dedupe")
+ .AddString("android:string/dedupe2", ResourceId{}, en_v21_config,
"keep")
- .addString("android:string/dedupe2", ResourceId{}, landConfig,
+ .AddString("android:string/dedupe2", ResourceId{}, land_config,
"dedupe")
- .build();
+ .Build();
- ASSERT_TRUE(ResourceDeduper().consume(context.get(), table.get()));
- EXPECT_EQ(nullptr, test::getValueForConfig<String>(
- table.get(), "android:string/dedupe", enConfig));
- EXPECT_EQ(nullptr, test::getValueForConfig<String>(
- table.get(), "android:string/dedupe", landConfig));
- EXPECT_EQ(nullptr, test::getValueForConfig<String>(
- table.get(), "android:string/dedupe2", enConfig));
- EXPECT_NE(nullptr, test::getValueForConfig<String>(
- table.get(), "android:string/dedupe2", enV21Config));
+ ASSERT_TRUE(ResourceDeduper().Consume(context.get(), table.get()));
+ EXPECT_EQ(nullptr, test::GetValueForConfig<String>(
+ table.get(), "android:string/dedupe", en_config));
+ EXPECT_EQ(nullptr, test::GetValueForConfig<String>(
+ table.get(), "android:string/dedupe", land_config));
+ EXPECT_EQ(nullptr, test::GetValueForConfig<String>(
+ table.get(), "android:string/dedupe2", en_config));
+ EXPECT_NE(nullptr, test::GetValueForConfig<String>(
+ table.get(), "android:string/dedupe2", en_v21_config));
}
TEST(ResourceDeduperTest, DifferentValuesAreKept) {
- std::unique_ptr<IAaptContext> context = test::ContextBuilder().build();
- const ConfigDescription defaultConfig = {};
- const ConfigDescription enConfig = test::parseConfigOrDie("en");
- const ConfigDescription enV21Config = test::parseConfigOrDie("en-v21");
+ std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
+ const ConfigDescription default_config = {};
+ const ConfigDescription en_config = test::ParseConfigOrDie("en");
+ const ConfigDescription en_v21_config = test::ParseConfigOrDie("en-v21");
// Chosen because this configuration is compatible with en.
- const ConfigDescription landConfig = test::parseConfigOrDie("land");
+ const ConfigDescription land_config = test::ParseConfigOrDie("land");
std::unique_ptr<ResourceTable> table =
test::ResourceTableBuilder()
- .addString("android:string/keep", ResourceId{}, defaultConfig, "keep")
- .addString("android:string/keep", ResourceId{}, enConfig, "keep")
- .addString("android:string/keep", ResourceId{}, enV21Config, "keep2")
- .addString("android:string/keep", ResourceId{}, landConfig, "keep2")
- .build();
+ .AddString("android:string/keep", ResourceId{}, default_config,
+ "keep")
+ .AddString("android:string/keep", ResourceId{}, en_config, "keep")
+ .AddString("android:string/keep", ResourceId{}, en_v21_config,
+ "keep2")
+ .AddString("android:string/keep", ResourceId{}, land_config, "keep2")
+ .Build();
- ASSERT_TRUE(ResourceDeduper().consume(context.get(), table.get()));
- EXPECT_NE(nullptr, test::getValueForConfig<String>(
- table.get(), "android:string/keep", enConfig));
- EXPECT_NE(nullptr, test::getValueForConfig<String>(
- table.get(), "android:string/keep", enV21Config));
- EXPECT_NE(nullptr, test::getValueForConfig<String>(
- table.get(), "android:string/keep", landConfig));
+ ASSERT_TRUE(ResourceDeduper().Consume(context.get(), table.get()));
+ EXPECT_NE(nullptr, test::GetValueForConfig<String>(
+ table.get(), "android:string/keep", en_config));
+ EXPECT_NE(nullptr, test::GetValueForConfig<String>(
+ table.get(), "android:string/keep", en_v21_config));
+ EXPECT_NE(nullptr, test::GetValueForConfig<String>(
+ table.get(), "android:string/keep", land_config));
}
} // namespace aapt
diff --git a/tools/aapt2/link/TableMerger.cpp b/tools/aapt2/link/TableMerger.cpp
index adf83a4..d808da3 100644
--- a/tools/aapt2/link/TableMerger.cpp
+++ b/tools/aapt2/link/TableMerger.cpp
@@ -15,51 +15,52 @@
*/
#include "link/TableMerger.h"
+
+#include "android-base/logging.h"
+
#include "ResourceTable.h"
#include "ResourceUtils.h"
#include "ResourceValues.h"
#include "ValueVisitor.h"
#include "util/Util.h"
-#include <cassert>
-
namespace aapt {
-TableMerger::TableMerger(IAaptContext* context, ResourceTable* outTable,
+TableMerger::TableMerger(IAaptContext* context, ResourceTable* out_table,
const TableMergerOptions& options)
- : mContext(context), mMasterTable(outTable), mOptions(options) {
+ : context_(context), master_table_(out_table), options_(options) {
// Create the desired package that all tables will be merged into.
- mMasterPackage = mMasterTable->createPackage(
- mContext->getCompilationPackage(), mContext->getPackageId());
- assert(mMasterPackage && "package name or ID already taken");
+ master_package_ = master_table_->CreatePackage(
+ context_->GetCompilationPackage(), context_->GetPackageId());
+ CHECK(master_package_ != nullptr) << "package name or ID already taken";
}
-bool TableMerger::merge(const Source& src, ResourceTable* table,
+bool TableMerger::Merge(const Source& src, ResourceTable* table,
io::IFileCollection* collection) {
- return mergeImpl(src, table, collection, false /* overlay */,
+ return MergeImpl(src, table, collection, false /* overlay */,
true /* allow new */);
}
-bool TableMerger::mergeOverlay(const Source& src, ResourceTable* table,
+bool TableMerger::MergeOverlay(const Source& src, ResourceTable* table,
io::IFileCollection* collection) {
- return mergeImpl(src, table, collection, true /* overlay */,
- mOptions.autoAddOverlay);
+ return MergeImpl(src, table, collection, true /* overlay */,
+ options_.auto_add_overlay);
}
/**
* This will merge packages with the same package name (or no package name).
*/
-bool TableMerger::mergeImpl(const Source& src, ResourceTable* table,
+bool TableMerger::MergeImpl(const Source& src, ResourceTable* table,
io::IFileCollection* collection, bool overlay,
- bool allowNew) {
- const uint8_t desiredPackageId = mContext->getPackageId();
+ bool allow_new) {
+ const uint8_t desired_package_id = context_->GetPackageId();
bool error = false;
for (auto& package : table->packages) {
// Warn of packages with an unrelated ID.
const Maybe<ResourceId>& id = package->id;
- if (id && id.value() != 0x0 && id.value() != desiredPackageId) {
- mContext->getDiagnostics()->warn(DiagMessage(src) << "ignoring package "
+ if (id && id.value() != 0x0 && id.value() != desired_package_id) {
+ context_->GetDiagnostics()->Warn(DiagMessage(src) << "ignoring package "
<< package->name);
continue;
}
@@ -70,22 +71,22 @@
// simply
// uses of the attribute or definitions.
if (package->name.empty() ||
- mContext->getCompilationPackage() == package->name) {
+ context_->GetCompilationPackage() == package->name) {
FileMergeCallback callback;
if (collection) {
callback = [&](const ResourceNameRef& name,
- const ConfigDescription& config, FileReference* newFile,
- FileReference* oldFile) -> bool {
+ const ConfigDescription& config, FileReference* new_file,
+ FileReference* old_file) -> bool {
// The old file's path points inside the APK, so we can use it as is.
- io::IFile* f = collection->findFile(*oldFile->path);
+ io::IFile* f = collection->FindFile(*old_file->path);
if (!f) {
- mContext->getDiagnostics()->error(DiagMessage(src)
- << "file '" << *oldFile->path
+ context_->GetDiagnostics()->Error(DiagMessage(src)
+ << "file '" << *old_file->path
<< "' not found");
return false;
}
- newFile->file = f;
+ new_file->file = f;
return true;
};
}
@@ -95,8 +96,8 @@
// mangled, then looked up at resolution time.
// Also, when linking, we convert references with no package name to use
// the compilation package name.
- error |= !doMerge(src, table, package.get(), false /* mangle */, overlay,
- allowNew, callback);
+ error |= !DoMerge(src, table, package.get(), false /* mangle */, overlay,
+ allow_new, callback);
}
}
return !error;
@@ -105,86 +106,87 @@
/**
* This will merge and mangle resources from a static library.
*/
-bool TableMerger::mergeAndMangle(const Source& src,
- const StringPiece& packageName,
+bool TableMerger::MergeAndMangle(const Source& src,
+ const StringPiece& package_name,
ResourceTable* table,
io::IFileCollection* collection) {
bool error = false;
for (auto& package : table->packages) {
// Warn of packages with an unrelated ID.
- if (packageName != package->name) {
- mContext->getDiagnostics()->warn(DiagMessage(src) << "ignoring package "
+ if (package_name != package->name) {
+ context_->GetDiagnostics()->Warn(DiagMessage(src) << "ignoring package "
<< package->name);
continue;
}
- bool mangle = packageName != mContext->getCompilationPackage();
- mMergedPackages.insert(package->name);
+ bool mangle = package_name != context_->GetCompilationPackage();
+ merged_packages_.insert(package->name);
- auto callback = [&](const ResourceNameRef& name,
- const ConfigDescription& config, FileReference* newFile,
- FileReference* oldFile) -> bool {
+ auto callback = [&](
+ const ResourceNameRef& name, const ConfigDescription& config,
+ FileReference* new_file, FileReference* old_file) -> bool {
// The old file's path points inside the APK, so we can use it as is.
- io::IFile* f = collection->findFile(*oldFile->path);
+ io::IFile* f = collection->FindFile(*old_file->path);
if (!f) {
- mContext->getDiagnostics()->error(
- DiagMessage(src) << "file '" << *oldFile->path << "' not found");
+ context_->GetDiagnostics()->Error(
+ DiagMessage(src) << "file '" << *old_file->path << "' not found");
return false;
}
- newFile->file = f;
+ new_file->file = f;
return true;
};
- error |= !doMerge(src, table, package.get(), mangle, false /* overlay */,
+ error |= !DoMerge(src, table, package.get(), mangle, false /* overlay */,
true /* allow new */, callback);
}
return !error;
}
-static bool mergeType(IAaptContext* context, const Source& src,
- ResourceTableType* dstType, ResourceTableType* srcType) {
- if (dstType->symbolStatus.state < srcType->symbolStatus.state) {
+static bool MergeType(IAaptContext* context, const Source& src,
+ ResourceTableType* dst_type,
+ ResourceTableType* src_type) {
+ if (dst_type->symbol_status.state < src_type->symbol_status.state) {
// The incoming type's visibility is stronger, so we should override
// the visibility.
- if (srcType->symbolStatus.state == SymbolState::kPublic) {
+ if (src_type->symbol_status.state == SymbolState::kPublic) {
// Only copy the ID if the source is public, or else the ID is
// meaningless.
- dstType->id = srcType->id;
+ dst_type->id = src_type->id;
}
- dstType->symbolStatus = std::move(srcType->symbolStatus);
- } else if (dstType->symbolStatus.state == SymbolState::kPublic &&
- srcType->symbolStatus.state == SymbolState::kPublic &&
- dstType->id && srcType->id &&
- dstType->id.value() != srcType->id.value()) {
+ dst_type->symbol_status = std::move(src_type->symbol_status);
+ } else if (dst_type->symbol_status.state == SymbolState::kPublic &&
+ src_type->symbol_status.state == SymbolState::kPublic &&
+ dst_type->id && src_type->id &&
+ dst_type->id.value() != src_type->id.value()) {
// Both types are public and have different IDs.
- context->getDiagnostics()->error(DiagMessage(src)
- << "cannot merge type '" << srcType->type
+ context->GetDiagnostics()->Error(DiagMessage(src)
+ << "cannot merge type '" << src_type->type
<< "': conflicting public IDs");
return false;
}
return true;
}
-static bool mergeEntry(IAaptContext* context, const Source& src,
- ResourceEntry* dstEntry, ResourceEntry* srcEntry) {
- if (dstEntry->symbolStatus.state < srcEntry->symbolStatus.state) {
+static bool MergeEntry(IAaptContext* context, const Source& src,
+ ResourceEntry* dst_entry, ResourceEntry* src_entry) {
+ if (dst_entry->symbol_status.state < src_entry->symbol_status.state) {
// The incoming type's visibility is stronger, so we should override
// the visibility.
- if (srcEntry->symbolStatus.state == SymbolState::kPublic) {
+ if (src_entry->symbol_status.state == SymbolState::kPublic) {
// Only copy the ID if the source is public, or else the ID is
// meaningless.
- dstEntry->id = srcEntry->id;
+ dst_entry->id = src_entry->id;
}
- dstEntry->symbolStatus = std::move(srcEntry->symbolStatus);
- } else if (srcEntry->symbolStatus.state == SymbolState::kPublic &&
- dstEntry->symbolStatus.state == SymbolState::kPublic &&
- dstEntry->id && srcEntry->id &&
- dstEntry->id.value() != srcEntry->id.value()) {
+ dst_entry->symbol_status = std::move(src_entry->symbol_status);
+ } else if (src_entry->symbol_status.state == SymbolState::kPublic &&
+ dst_entry->symbol_status.state == SymbolState::kPublic &&
+ dst_entry->id && src_entry->id &&
+ dst_entry->id.value() != src_entry->id.value()) {
// Both entries are public and have different IDs.
- context->getDiagnostics()->error(DiagMessage(src)
- << "cannot merge entry '" << srcEntry->name
- << "': conflicting public IDs");
+ context->GetDiagnostics()->Error(
+ DiagMessage(src) << "cannot merge entry '" << src_entry->name
+ << "': conflicting public IDs");
return false;
}
return true;
@@ -199,141 +201,145 @@
* and accumulate. If both values are Styleables, we just merge them into the
* existing value.
*/
-static ResourceTable::CollisionResult resolveMergeCollision(Value* existing,
+static ResourceTable::CollisionResult ResolveMergeCollision(Value* existing,
Value* incoming) {
- if (Styleable* existingStyleable = valueCast<Styleable>(existing)) {
- if (Styleable* incomingStyleable = valueCast<Styleable>(incoming)) {
+ if (Styleable* existing_styleable = ValueCast<Styleable>(existing)) {
+ if (Styleable* incoming_styleable = ValueCast<Styleable>(incoming)) {
// Styleables get merged.
- existingStyleable->mergeWith(incomingStyleable);
+ existing_styleable->MergeWith(incoming_styleable);
return ResourceTable::CollisionResult::kKeepOriginal;
}
}
// Delegate to the default handler.
- return ResourceTable::resolveValueCollision(existing, incoming);
+ return ResourceTable::ResolveValueCollision(existing, incoming);
}
-static ResourceTable::CollisionResult mergeConfigValue(
- IAaptContext* context, const ResourceNameRef& resName, const bool overlay,
- ResourceConfigValue* dstConfigValue, ResourceConfigValue* srcConfigValue) {
+static ResourceTable::CollisionResult MergeConfigValue(
+ IAaptContext* context, const ResourceNameRef& res_name, const bool overlay,
+ ResourceConfigValue* dst_config_value,
+ ResourceConfigValue* src_config_value) {
using CollisionResult = ResourceTable::CollisionResult;
- Value* dstValue = dstConfigValue->value.get();
- Value* srcValue = srcConfigValue->value.get();
+ Value* dst_value = dst_config_value->value.get();
+ Value* src_value = src_config_value->value.get();
- CollisionResult collisionResult;
+ CollisionResult collision_result;
if (overlay) {
- collisionResult = resolveMergeCollision(dstValue, srcValue);
+ collision_result = ResolveMergeCollision(dst_value, src_value);
} else {
- collisionResult = ResourceTable::resolveValueCollision(dstValue, srcValue);
+ collision_result =
+ ResourceTable::ResolveValueCollision(dst_value, src_value);
}
- if (collisionResult == CollisionResult::kConflict) {
+ if (collision_result == CollisionResult::kConflict) {
if (overlay) {
return CollisionResult::kTakeNew;
}
// Error!
- context->getDiagnostics()->error(
- DiagMessage(srcValue->getSource())
- << "resource '" << resName << "' has a conflicting value for "
- << "configuration (" << srcConfigValue->config << ")");
- context->getDiagnostics()->note(DiagMessage(dstValue->getSource())
+ context->GetDiagnostics()->Error(
+ DiagMessage(src_value->GetSource())
+ << "resource '" << res_name << "' has a conflicting value for "
+ << "configuration (" << src_config_value->config << ")");
+ context->GetDiagnostics()->Note(DiagMessage(dst_value->GetSource())
<< "originally defined here");
return CollisionResult::kConflict;
}
- return collisionResult;
+ return collision_result;
}
-bool TableMerger::doMerge(const Source& src, ResourceTable* srcTable,
- ResourceTablePackage* srcPackage,
- const bool manglePackage, const bool overlay,
- const bool allowNewResources,
+bool TableMerger::DoMerge(const Source& src, ResourceTable* src_table,
+ ResourceTablePackage* src_package,
+ const bool mangle_package, const bool overlay,
+ const bool allow_new_resources,
const FileMergeCallback& callback) {
bool error = false;
- for (auto& srcType : srcPackage->types) {
- ResourceTableType* dstType =
- mMasterPackage->findOrCreateType(srcType->type);
- if (!mergeType(mContext, src, dstType, srcType.get())) {
+ for (auto& src_type : src_package->types) {
+ ResourceTableType* dst_type =
+ master_package_->FindOrCreateType(src_type->type);
+ if (!MergeType(context_, src, dst_type, src_type.get())) {
error = true;
continue;
}
- for (auto& srcEntry : srcType->entries) {
- std::string entryName = srcEntry->name;
- if (manglePackage) {
- entryName = NameMangler::mangleEntry(srcPackage->name, srcEntry->name);
+ for (auto& src_entry : src_type->entries) {
+ std::string entry_name = src_entry->name;
+ if (mangle_package) {
+ entry_name =
+ NameMangler::MangleEntry(src_package->name, src_entry->name);
}
- ResourceEntry* dstEntry;
- if (allowNewResources) {
- dstEntry = dstType->findOrCreateEntry(entryName);
+ ResourceEntry* dst_entry;
+ if (allow_new_resources) {
+ dst_entry = dst_type->FindOrCreateEntry(entry_name);
} else {
- dstEntry = dstType->findEntry(entryName);
+ dst_entry = dst_type->FindEntry(entry_name);
}
- const ResourceNameRef resName(srcPackage->name, srcType->type,
- srcEntry->name);
+ const ResourceNameRef res_name(src_package->name, src_type->type,
+ src_entry->name);
- if (!dstEntry) {
- mContext->getDiagnostics()->error(
- DiagMessage(src) << "resource " << resName
+ if (!dst_entry) {
+ context_->GetDiagnostics()->Error(
+ DiagMessage(src) << "resource " << res_name
<< " does not override an existing resource");
- mContext->getDiagnostics()->note(
+ context_->GetDiagnostics()->Note(
DiagMessage(src) << "define an <add-resource> tag or use "
<< "--auto-add-overlay");
error = true;
continue;
}
- if (!mergeEntry(mContext, src, dstEntry, srcEntry.get())) {
+ if (!MergeEntry(context_, src, dst_entry, src_entry.get())) {
error = true;
continue;
}
- for (auto& srcConfigValue : srcEntry->values) {
+ for (auto& src_config_value : src_entry->values) {
using CollisionResult = ResourceTable::CollisionResult;
- ResourceConfigValue* dstConfigValue = dstEntry->findValue(
- srcConfigValue->config, srcConfigValue->product);
- if (dstConfigValue) {
- CollisionResult collisionResult = mergeConfigValue(
- mContext, resName, overlay, dstConfigValue, srcConfigValue.get());
- if (collisionResult == CollisionResult::kConflict) {
+ ResourceConfigValue* dst_config_value = dst_entry->FindValue(
+ src_config_value->config, src_config_value->product);
+ if (dst_config_value) {
+ CollisionResult collision_result =
+ MergeConfigValue(context_, res_name, overlay, dst_config_value,
+ src_config_value.get());
+ if (collision_result == CollisionResult::kConflict) {
error = true;
continue;
- } else if (collisionResult == CollisionResult::kKeepOriginal) {
+ } else if (collision_result == CollisionResult::kKeepOriginal) {
continue;
}
} else {
- dstConfigValue = dstEntry->findOrCreateValue(srcConfigValue->config,
- srcConfigValue->product);
+ dst_config_value = dst_entry->FindOrCreateValue(
+ src_config_value->config, src_config_value->product);
}
// Continue if we're taking the new resource.
if (FileReference* f =
- valueCast<FileReference>(srcConfigValue->value.get())) {
- std::unique_ptr<FileReference> newFileRef;
- if (manglePackage) {
- newFileRef = cloneAndMangleFile(srcPackage->name, *f);
+ ValueCast<FileReference>(src_config_value->value.get())) {
+ std::unique_ptr<FileReference> new_file_ref;
+ if (mangle_package) {
+ new_file_ref = CloneAndMangleFile(src_package->name, *f);
} else {
- newFileRef = std::unique_ptr<FileReference>(
- f->clone(&mMasterTable->stringPool));
+ new_file_ref = std::unique_ptr<FileReference>(
+ f->Clone(&master_table_->string_pool));
}
if (callback) {
- if (!callback(resName, srcConfigValue->config, newFileRef.get(),
- f)) {
+ if (!callback(res_name, src_config_value->config,
+ new_file_ref.get(), f)) {
error = true;
continue;
}
}
- dstConfigValue->value = std::move(newFileRef);
+ dst_config_value->value = std::move(new_file_ref);
} else {
- dstConfigValue->value = std::unique_ptr<Value>(
- srcConfigValue->value->clone(&mMasterTable->stringPool));
+ dst_config_value->value = std::unique_ptr<Value>(
+ src_config_value->value->Clone(&master_table_->string_pool));
}
}
}
@@ -341,50 +347,50 @@
return !error;
}
-std::unique_ptr<FileReference> TableMerger::cloneAndMangleFile(
- const std::string& package, const FileReference& fileRef) {
+std::unique_ptr<FileReference> TableMerger::CloneAndMangleFile(
+ const std::string& package, const FileReference& file_ref) {
StringPiece prefix, entry, suffix;
- if (util::extractResFilePathParts(*fileRef.path, &prefix, &entry, &suffix)) {
- std::string mangledEntry =
- NameMangler::mangleEntry(package, entry.toString());
- std::string newPath = prefix.toString() + mangledEntry + suffix.toString();
- std::unique_ptr<FileReference> newFileRef =
+ if (util::ExtractResFilePathParts(*file_ref.path, &prefix, &entry, &suffix)) {
+ std::string mangled_entry =
+ NameMangler::MangleEntry(package, entry.ToString());
+ std::string newPath = prefix.ToString() + mangled_entry + suffix.ToString();
+ std::unique_ptr<FileReference> new_file_ref =
util::make_unique<FileReference>(
- mMasterTable->stringPool.makeRef(newPath));
- newFileRef->setComment(fileRef.getComment());
- newFileRef->setSource(fileRef.getSource());
- return newFileRef;
+ master_table_->string_pool.MakeRef(newPath));
+ new_file_ref->SetComment(file_ref.GetComment());
+ new_file_ref->SetSource(file_ref.GetSource());
+ return new_file_ref;
}
return std::unique_ptr<FileReference>(
- fileRef.clone(&mMasterTable->stringPool));
+ file_ref.Clone(&master_table_->string_pool));
}
-bool TableMerger::mergeFileImpl(const ResourceFile& fileDesc, io::IFile* file,
+bool TableMerger::MergeFileImpl(const ResourceFile& file_desc, io::IFile* file,
bool overlay) {
ResourceTable table;
- std::string path = ResourceUtils::buildResourceFileName(fileDesc, nullptr);
- std::unique_ptr<FileReference> fileRef =
- util::make_unique<FileReference>(table.stringPool.makeRef(path));
- fileRef->setSource(fileDesc.source);
- fileRef->file = file;
+ std::string path = ResourceUtils::BuildResourceFileName(file_desc);
+ std::unique_ptr<FileReference> file_ref =
+ util::make_unique<FileReference>(table.string_pool.MakeRef(path));
+ file_ref->SetSource(file_desc.source);
+ file_ref->file = file;
- ResourceTablePackage* pkg = table.createPackage(fileDesc.name.package, 0x0);
- pkg->findOrCreateType(fileDesc.name.type)
- ->findOrCreateEntry(fileDesc.name.entry)
- ->findOrCreateValue(fileDesc.config, {})
- ->value = std::move(fileRef);
+ ResourceTablePackage* pkg = table.CreatePackage(file_desc.name.package, 0x0);
+ pkg->FindOrCreateType(file_desc.name.type)
+ ->FindOrCreateEntry(file_desc.name.entry)
+ ->FindOrCreateValue(file_desc.config, {})
+ ->value = std::move(file_ref);
- return doMerge(file->getSource(), &table, pkg, false /* mangle */,
- overlay /* overlay */, true /* allow new */, {});
+ return DoMerge(file->GetSource(), &table, pkg, false /* mangle */,
+ overlay /* overlay */, true /* allow_new */, {});
}
-bool TableMerger::mergeFile(const ResourceFile& fileDesc, io::IFile* file) {
- return mergeFileImpl(fileDesc, file, false /* overlay */);
+bool TableMerger::MergeFile(const ResourceFile& file_desc, io::IFile* file) {
+ return MergeFileImpl(file_desc, file, false /* overlay */);
}
-bool TableMerger::mergeFileOverlay(const ResourceFile& fileDesc,
+bool TableMerger::MergeFileOverlay(const ResourceFile& file_desc,
io::IFile* file) {
- return mergeFileImpl(fileDesc, file, true /* overlay */);
+ return MergeFileImpl(file_desc, file, true /* overlay */);
}
} // namespace aapt
diff --git a/tools/aapt2/link/TableMerger.h b/tools/aapt2/link/TableMerger.h
index c2e7181..4ab83c3f2 100644
--- a/tools/aapt2/link/TableMerger.h
+++ b/tools/aapt2/link/TableMerger.h
@@ -17,6 +17,11 @@
#ifndef AAPT_TABLEMERGER_H
#define AAPT_TABLEMERGER_H
+#include <functional>
+#include <map>
+
+#include "android-base/macros.h"
+
#include "Resource.h"
#include "ResourceTable.h"
#include "ResourceValues.h"
@@ -25,9 +30,6 @@
#include "process/IResourceTableConsumer.h"
#include "util/Util.h"
-#include <functional>
-#include <map>
-
namespace aapt {
struct TableMergerOptions {
@@ -35,7 +37,7 @@
* If true, resources in overlays can be added without previously having
* existed.
*/
- bool autoAddOverlay = false;
+ bool auto_add_overlay = false;
};
/**
@@ -62,15 +64,14 @@
class TableMerger {
public:
/**
- * Note: The outTable ResourceTable must live longer than this TableMerger.
- * References
- * are made to this ResourceTable for efficiency reasons.
+ * Note: The out_table ResourceTable must live longer than this TableMerger.
+ * References are made to this ResourceTable for efficiency reasons.
*/
- TableMerger(IAaptContext* context, ResourceTable* outTable,
+ TableMerger(IAaptContext* context, ResourceTable* out_table,
const TableMergerOptions& options);
- const std::set<std::string>& getMergedPackages() const {
- return mMergedPackages;
+ const std::set<std::string>& merged_packages() const {
+ return merged_packages_;
}
/**
@@ -78,7 +79,7 @@
* An io::IFileCollection is optional and used to find the referenced Files
* and process them.
*/
- bool merge(const Source& src, ResourceTable* table,
+ bool Merge(const Source& src, ResourceTable* table,
io::IFileCollection* collection = nullptr);
/**
@@ -86,7 +87,7 @@
* An io::IFileCollection is optional and used to find the referenced Files
* and process them.
*/
- bool mergeOverlay(const Source& src, ResourceTable* table,
+ bool MergeOverlay(const Source& src, ResourceTable* table,
io::IFileCollection* collection = nullptr);
/**
@@ -95,44 +96,45 @@
* An io::IFileCollection is needed in order to find the referenced Files and
* process them.
*/
- bool mergeAndMangle(const Source& src, const StringPiece& package,
+ bool MergeAndMangle(const Source& src, const StringPiece& package,
ResourceTable* table, io::IFileCollection* collection);
/**
* Merges a compiled file that belongs to this same or empty package. This is
* for local sources.
*/
- bool mergeFile(const ResourceFile& fileDesc, io::IFile* file);
+ bool MergeFile(const ResourceFile& fileDesc, io::IFile* file);
/**
* Merges a compiled file from an overlay, overriding an existing definition.
*/
- bool mergeFileOverlay(const ResourceFile& fileDesc, io::IFile* file);
+ bool MergeFileOverlay(const ResourceFile& fileDesc, io::IFile* file);
private:
+ DISALLOW_COPY_AND_ASSIGN(TableMerger);
+
using FileMergeCallback = std::function<bool(const ResourceNameRef&,
const ConfigDescription& config,
FileReference*, FileReference*)>;
- IAaptContext* mContext;
- ResourceTable* mMasterTable;
- TableMergerOptions mOptions;
- ResourceTablePackage* mMasterPackage;
+ IAaptContext* context_;
+ ResourceTable* master_table_;
+ TableMergerOptions options_;
+ ResourceTablePackage* master_package_;
+ std::set<std::string> merged_packages_;
- std::set<std::string> mMergedPackages;
-
- bool mergeFileImpl(const ResourceFile& fileDesc, io::IFile* file,
+ bool MergeFileImpl(const ResourceFile& file_desc, io::IFile* file,
bool overlay);
- bool mergeImpl(const Source& src, ResourceTable* srcTable,
- io::IFileCollection* collection, bool overlay, bool allowNew);
+ bool MergeImpl(const Source& src, ResourceTable* src_table,
+ io::IFileCollection* collection, bool overlay, bool allow_new);
- bool doMerge(const Source& src, ResourceTable* srcTable,
- ResourceTablePackage* srcPackage, const bool manglePackage,
- const bool overlay, const bool allowNewResources,
+ bool DoMerge(const Source& src, ResourceTable* src_table,
+ ResourceTablePackage* src_package, const bool mangle_package,
+ const bool overlay, const bool allow_new_resources,
const FileMergeCallback& callback);
- std::unique_ptr<FileReference> cloneAndMangleFile(const std::string& package,
+ std::unique_ptr<FileReference> CloneAndMangleFile(const std::string& package,
const FileReference& value);
};
diff --git a/tools/aapt2/link/TableMerger_test.cpp b/tools/aapt2/link/TableMerger_test.cpp
index e0b2b66..742f5a7 100644
--- a/tools/aapt2/link/TableMerger_test.cpp
+++ b/tools/aapt2/link/TableMerger_test.cpp
@@ -15,139 +15,137 @@
*/
#include "link/TableMerger.h"
+
#include "filter/ConfigFilter.h"
#include "io/FileSystem.h"
-#include "test/Builders.h"
-#include "test/Context.h"
-
-#include <gtest/gtest.h>
+#include "test/Test.h"
namespace aapt {
struct TableMergerTest : public ::testing::Test {
- std::unique_ptr<IAaptContext> mContext;
+ std::unique_ptr<IAaptContext> context_;
void SetUp() override {
- mContext =
+ context_ =
test::ContextBuilder()
// We are compiling this package.
- .setCompilationPackage("com.app.a")
+ .SetCompilationPackage("com.app.a")
// Merge all packages that have this package ID.
- .setPackageId(0x7f)
+ .SetPackageId(0x7f)
// Mangle all packages that do not have this package name.
- .setNameManglerPolicy(NameManglerPolicy{"com.app.a", {"com.app.b"}})
+ .SetNameManglerPolicy(NameManglerPolicy{"com.app.a", {"com.app.b"}})
- .build();
+ .Build();
}
};
TEST_F(TableMergerTest, SimpleMerge) {
- std::unique_ptr<ResourceTable> tableA =
+ std::unique_ptr<ResourceTable> table_a =
test::ResourceTableBuilder()
- .setPackageId("com.app.a", 0x7f)
- .addReference("com.app.a:id/foo", "com.app.a:id/bar")
- .addReference("com.app.a:id/bar", "com.app.b:id/foo")
- .addValue(
+ .SetPackageId("com.app.a", 0x7f)
+ .AddReference("com.app.a:id/foo", "com.app.a:id/bar")
+ .AddReference("com.app.a:id/bar", "com.app.b:id/foo")
+ .AddValue(
"com.app.a:styleable/view",
- test::StyleableBuilder().addItem("com.app.b:id/foo").build())
- .build();
+ test::StyleableBuilder().AddItem("com.app.b:id/foo").Build())
+ .Build();
- std::unique_ptr<ResourceTable> tableB = test::ResourceTableBuilder()
- .setPackageId("com.app.b", 0x7f)
- .addSimple("com.app.b:id/foo")
- .build();
+ std::unique_ptr<ResourceTable> table_b = test::ResourceTableBuilder()
+ .SetPackageId("com.app.b", 0x7f)
+ .AddSimple("com.app.b:id/foo")
+ .Build();
- ResourceTable finalTable;
- TableMerger merger(mContext.get(), &finalTable, TableMergerOptions{});
+ ResourceTable final_table;
+ TableMerger merger(context_.get(), &final_table, TableMergerOptions{});
io::FileCollection collection;
- ASSERT_TRUE(merger.merge({}, tableA.get()));
+ ASSERT_TRUE(merger.Merge({}, table_a.get()));
ASSERT_TRUE(
- merger.mergeAndMangle({}, "com.app.b", tableB.get(), &collection));
+ merger.MergeAndMangle({}, "com.app.b", table_b.get(), &collection));
- EXPECT_TRUE(merger.getMergedPackages().count("com.app.b") != 0);
+ EXPECT_TRUE(merger.merged_packages().count("com.app.b") != 0);
// Entries from com.app.a should not be mangled.
AAPT_EXPECT_TRUE(
- finalTable.findResource(test::parseNameOrDie("com.app.a:id/foo")));
+ final_table.FindResource(test::ParseNameOrDie("com.app.a:id/foo")));
AAPT_EXPECT_TRUE(
- finalTable.findResource(test::parseNameOrDie("com.app.a:id/bar")));
- AAPT_EXPECT_TRUE(finalTable.findResource(
- test::parseNameOrDie("com.app.a:styleable/view")));
+ final_table.FindResource(test::ParseNameOrDie("com.app.a:id/bar")));
+ AAPT_EXPECT_TRUE(final_table.FindResource(
+ test::ParseNameOrDie("com.app.a:styleable/view")));
// The unmangled name should not be present.
AAPT_EXPECT_FALSE(
- finalTable.findResource(test::parseNameOrDie("com.app.b:id/foo")));
+ final_table.FindResource(test::ParseNameOrDie("com.app.b:id/foo")));
// Look for the mangled name.
- AAPT_EXPECT_TRUE(finalTable.findResource(
- test::parseNameOrDie("com.app.a:id/com.app.b$foo")));
+ AAPT_EXPECT_TRUE(final_table.FindResource(
+ test::ParseNameOrDie("com.app.a:id/com.app.b$foo")));
}
TEST_F(TableMergerTest, MergeFile) {
- ResourceTable finalTable;
+ ResourceTable final_table;
TableMergerOptions options;
- options.autoAddOverlay = false;
- TableMerger merger(mContext.get(), &finalTable, options);
+ options.auto_add_overlay = false;
+ TableMerger merger(context_.get(), &final_table, options);
- ResourceFile fileDesc;
- fileDesc.config = test::parseConfigOrDie("hdpi-v4");
- fileDesc.name = test::parseNameOrDie("layout/main");
- fileDesc.source = Source("res/layout-hdpi/main.xml");
- test::TestFile testFile("path/to/res/layout-hdpi/main.xml.flat");
+ ResourceFile file_desc;
+ file_desc.config = test::ParseConfigOrDie("hdpi-v4");
+ file_desc.name = test::ParseNameOrDie("layout/main");
+ file_desc.source = Source("res/layout-hdpi/main.xml");
+ test::TestFile test_file("path/to/res/layout-hdpi/main.xml.flat");
- ASSERT_TRUE(merger.mergeFile(fileDesc, &testFile));
+ ASSERT_TRUE(merger.MergeFile(file_desc, &test_file));
- FileReference* file = test::getValueForConfig<FileReference>(
- &finalTable, "com.app.a:layout/main", test::parseConfigOrDie("hdpi-v4"));
+ FileReference* file = test::GetValueForConfig<FileReference>(
+ &final_table, "com.app.a:layout/main", test::ParseConfigOrDie("hdpi-v4"));
ASSERT_NE(nullptr, file);
EXPECT_EQ(std::string("res/layout-hdpi-v4/main.xml"), *file->path);
}
TEST_F(TableMergerTest, MergeFileOverlay) {
- ResourceTable finalTable;
- TableMergerOptions tableMergerOptions;
- tableMergerOptions.autoAddOverlay = false;
- TableMerger merger(mContext.get(), &finalTable, tableMergerOptions);
+ ResourceTable final_table;
+ TableMergerOptions options;
+ options.auto_add_overlay = false;
+ TableMerger merger(context_.get(), &final_table, options);
- ResourceFile fileDesc;
- fileDesc.name = test::parseNameOrDie("xml/foo");
- test::TestFile fileA("path/to/fileA.xml.flat");
- test::TestFile fileB("path/to/fileB.xml.flat");
+ ResourceFile file_desc;
+ file_desc.name = test::ParseNameOrDie("xml/foo");
+ test::TestFile file_a("path/to/fileA.xml.flat");
+ test::TestFile file_b("path/to/fileB.xml.flat");
- ASSERT_TRUE(merger.mergeFile(fileDesc, &fileA));
- ASSERT_TRUE(merger.mergeFileOverlay(fileDesc, &fileB));
+ ASSERT_TRUE(merger.MergeFile(file_desc, &file_a));
+ ASSERT_TRUE(merger.MergeFileOverlay(file_desc, &file_b));
}
TEST_F(TableMergerTest, MergeFileReferences) {
- std::unique_ptr<ResourceTable> tableA =
+ std::unique_ptr<ResourceTable> table_a =
test::ResourceTableBuilder()
- .setPackageId("com.app.a", 0x7f)
- .addFileReference("com.app.a:xml/file", "res/xml/file.xml")
- .build();
- std::unique_ptr<ResourceTable> tableB =
+ .SetPackageId("com.app.a", 0x7f)
+ .AddFileReference("com.app.a:xml/file", "res/xml/file.xml")
+ .Build();
+ std::unique_ptr<ResourceTable> table_b =
test::ResourceTableBuilder()
- .setPackageId("com.app.b", 0x7f)
- .addFileReference("com.app.b:xml/file", "res/xml/file.xml")
- .build();
+ .SetPackageId("com.app.b", 0x7f)
+ .AddFileReference("com.app.b:xml/file", "res/xml/file.xml")
+ .Build();
- ResourceTable finalTable;
- TableMerger merger(mContext.get(), &finalTable, TableMergerOptions{});
+ ResourceTable final_table;
+ TableMerger merger(context_.get(), &final_table, TableMergerOptions{});
io::FileCollection collection;
- collection.insertFile("res/xml/file.xml");
+ collection.InsertFile("res/xml/file.xml");
- ASSERT_TRUE(merger.merge({}, tableA.get()));
+ ASSERT_TRUE(merger.Merge({}, table_a.get()));
ASSERT_TRUE(
- merger.mergeAndMangle({}, "com.app.b", tableB.get(), &collection));
+ merger.MergeAndMangle({}, "com.app.b", table_b.get(), &collection));
FileReference* f =
- test::getValue<FileReference>(&finalTable, "com.app.a:xml/file");
+ test::GetValue<FileReference>(&final_table, "com.app.a:xml/file");
ASSERT_NE(f, nullptr);
EXPECT_EQ(std::string("res/xml/file.xml"), *f->path);
- f = test::getValue<FileReference>(&finalTable,
+ f = test::GetValue<FileReference>(&final_table,
"com.app.a:xml/com.app.b$file");
ASSERT_NE(f, nullptr);
EXPECT_EQ(std::string("res/xml/com.app.b$file.xml"), *f->path);
@@ -156,25 +154,25 @@
TEST_F(TableMergerTest, OverrideResourceWithOverlay) {
std::unique_ptr<ResourceTable> base =
test::ResourceTableBuilder()
- .setPackageId("", 0x00)
- .addValue("bool/foo", ResourceUtils::tryParseBool("true"))
- .build();
+ .SetPackageId("", 0x00)
+ .AddValue("bool/foo", ResourceUtils::TryParseBool("true"))
+ .Build();
std::unique_ptr<ResourceTable> overlay =
test::ResourceTableBuilder()
- .setPackageId("", 0x00)
- .addValue("bool/foo", ResourceUtils::tryParseBool("false"))
- .build();
+ .SetPackageId("", 0x00)
+ .AddValue("bool/foo", ResourceUtils::TryParseBool("false"))
+ .Build();
- ResourceTable finalTable;
- TableMergerOptions tableMergerOptions;
- tableMergerOptions.autoAddOverlay = false;
- TableMerger merger(mContext.get(), &finalTable, tableMergerOptions);
+ ResourceTable final_table;
+ TableMergerOptions options;
+ options.auto_add_overlay = false;
+ TableMerger merger(context_.get(), &final_table, options);
- ASSERT_TRUE(merger.merge({}, base.get()));
- ASSERT_TRUE(merger.mergeOverlay({}, overlay.get()));
+ ASSERT_TRUE(merger.Merge({}, base.get()));
+ ASSERT_TRUE(merger.MergeOverlay({}, overlay.get()));
BinaryPrimitive* foo =
- test::getValue<BinaryPrimitive>(&finalTable, "com.app.a:bool/foo");
+ test::GetValue<BinaryPrimitive>(&final_table, "com.app.a:bool/foo");
ASSERT_NE(nullptr, foo);
EXPECT_EQ(0x0u, foo->value.data);
}
@@ -182,170 +180,168 @@
TEST_F(TableMergerTest, OverrideSameResourceIdsWithOverlay) {
std::unique_ptr<ResourceTable> base =
test::ResourceTableBuilder()
- .setPackageId("", 0x7f)
- .setSymbolState("bool/foo", ResourceId(0x7f, 0x01, 0x0001),
+ .SetPackageId("", 0x7f)
+ .SetSymbolState("bool/foo", ResourceId(0x7f, 0x01, 0x0001),
SymbolState::kPublic)
- .build();
+ .Build();
std::unique_ptr<ResourceTable> overlay =
test::ResourceTableBuilder()
- .setPackageId("", 0x7f)
- .setSymbolState("bool/foo", ResourceId(0x7f, 0x01, 0x0001),
+ .SetPackageId("", 0x7f)
+ .SetSymbolState("bool/foo", ResourceId(0x7f, 0x01, 0x0001),
SymbolState::kPublic)
- .build();
+ .Build();
- ResourceTable finalTable;
- TableMergerOptions tableMergerOptions;
- tableMergerOptions.autoAddOverlay = false;
- TableMerger merger(mContext.get(), &finalTable, tableMergerOptions);
+ ResourceTable final_table;
+ TableMergerOptions options;
+ options.auto_add_overlay = false;
+ TableMerger merger(context_.get(), &final_table, options);
- ASSERT_TRUE(merger.merge({}, base.get()));
- ASSERT_TRUE(merger.mergeOverlay({}, overlay.get()));
+ ASSERT_TRUE(merger.Merge({}, base.get()));
+ ASSERT_TRUE(merger.MergeOverlay({}, overlay.get()));
}
TEST_F(TableMergerTest, FailToOverrideConflictingTypeIdsWithOverlay) {
std::unique_ptr<ResourceTable> base =
test::ResourceTableBuilder()
- .setPackageId("", 0x7f)
- .setSymbolState("bool/foo", ResourceId(0x7f, 0x01, 0x0001),
+ .SetPackageId("", 0x7f)
+ .SetSymbolState("bool/foo", ResourceId(0x7f, 0x01, 0x0001),
SymbolState::kPublic)
- .build();
+ .Build();
std::unique_ptr<ResourceTable> overlay =
test::ResourceTableBuilder()
- .setPackageId("", 0x7f)
- .setSymbolState("bool/foo", ResourceId(0x7f, 0x02, 0x0001),
+ .SetPackageId("", 0x7f)
+ .SetSymbolState("bool/foo", ResourceId(0x7f, 0x02, 0x0001),
SymbolState::kPublic)
- .build();
+ .Build();
- ResourceTable finalTable;
- TableMergerOptions tableMergerOptions;
- tableMergerOptions.autoAddOverlay = false;
- TableMerger merger(mContext.get(), &finalTable, tableMergerOptions);
+ ResourceTable final_table;
+ TableMergerOptions options;
+ options.auto_add_overlay = false;
+ TableMerger merger(context_.get(), &final_table, options);
- ASSERT_TRUE(merger.merge({}, base.get()));
- ASSERT_FALSE(merger.mergeOverlay({}, overlay.get()));
+ ASSERT_TRUE(merger.Merge({}, base.get()));
+ ASSERT_FALSE(merger.MergeOverlay({}, overlay.get()));
}
TEST_F(TableMergerTest, FailToOverrideConflictingEntryIdsWithOverlay) {
std::unique_ptr<ResourceTable> base =
test::ResourceTableBuilder()
- .setPackageId("", 0x7f)
- .setSymbolState("bool/foo", ResourceId(0x7f, 0x01, 0x0001),
+ .SetPackageId("", 0x7f)
+ .SetSymbolState("bool/foo", ResourceId(0x7f, 0x01, 0x0001),
SymbolState::kPublic)
- .build();
+ .Build();
std::unique_ptr<ResourceTable> overlay =
test::ResourceTableBuilder()
- .setPackageId("", 0x7f)
- .setSymbolState("bool/foo", ResourceId(0x7f, 0x01, 0x0002),
+ .SetPackageId("", 0x7f)
+ .SetSymbolState("bool/foo", ResourceId(0x7f, 0x01, 0x0002),
SymbolState::kPublic)
- .build();
+ .Build();
- ResourceTable finalTable;
- TableMergerOptions tableMergerOptions;
- tableMergerOptions.autoAddOverlay = false;
- TableMerger merger(mContext.get(), &finalTable, tableMergerOptions);
+ ResourceTable final_table;
+ TableMergerOptions options;
+ options.auto_add_overlay = false;
+ TableMerger merger(context_.get(), &final_table, options);
- ASSERT_TRUE(merger.merge({}, base.get()));
- ASSERT_FALSE(merger.mergeOverlay({}, overlay.get()));
+ ASSERT_TRUE(merger.Merge({}, base.get()));
+ ASSERT_FALSE(merger.MergeOverlay({}, overlay.get()));
}
TEST_F(TableMergerTest, MergeAddResourceFromOverlay) {
- std::unique_ptr<ResourceTable> tableA =
+ std::unique_ptr<ResourceTable> table_a =
test::ResourceTableBuilder()
- .setPackageId("", 0x7f)
- .setSymbolState("bool/foo", {}, SymbolState::kUndefined)
- .build();
- std::unique_ptr<ResourceTable> tableB =
+ .SetPackageId("", 0x7f)
+ .SetSymbolState("bool/foo", {}, SymbolState::kUndefined)
+ .Build();
+ std::unique_ptr<ResourceTable> table_b =
test::ResourceTableBuilder()
- .setPackageId("", 0x7f)
- .addValue("bool/foo", ResourceUtils::tryParseBool("true"))
- .build();
+ .SetPackageId("", 0x7f)
+ .AddValue("bool/foo", ResourceUtils::TryParseBool("true"))
+ .Build();
- ResourceTable finalTable;
- TableMerger merger(mContext.get(), &finalTable, TableMergerOptions{});
+ ResourceTable final_table;
+ TableMerger merger(context_.get(), &final_table, TableMergerOptions{});
- ASSERT_TRUE(merger.merge({}, tableA.get()));
- ASSERT_TRUE(merger.mergeOverlay({}, tableB.get()));
+ ASSERT_TRUE(merger.Merge({}, table_a.get()));
+ ASSERT_TRUE(merger.MergeOverlay({}, table_b.get()));
}
TEST_F(TableMergerTest, MergeAddResourceFromOverlayWithAutoAddOverlay) {
- std::unique_ptr<ResourceTable> tableA =
- test::ResourceTableBuilder().setPackageId("", 0x7f).build();
- std::unique_ptr<ResourceTable> tableB =
+ std::unique_ptr<ResourceTable> table_a =
+ test::ResourceTableBuilder().SetPackageId("", 0x7f).Build();
+ std::unique_ptr<ResourceTable> table_b =
test::ResourceTableBuilder()
- .setPackageId("", 0x7f)
- .addValue("bool/foo", ResourceUtils::tryParseBool("true"))
- .build();
+ .SetPackageId("", 0x7f)
+ .AddValue("bool/foo", ResourceUtils::TryParseBool("true"))
+ .Build();
- ResourceTable finalTable;
+ ResourceTable final_table;
TableMergerOptions options;
- options.autoAddOverlay = true;
- TableMerger merger(mContext.get(), &finalTable, options);
+ options.auto_add_overlay = true;
+ TableMerger merger(context_.get(), &final_table, options);
- ASSERT_TRUE(merger.merge({}, tableA.get()));
- ASSERT_TRUE(merger.mergeOverlay({}, tableB.get()));
+ ASSERT_TRUE(merger.Merge({}, table_a.get()));
+ ASSERT_TRUE(merger.MergeOverlay({}, table_b.get()));
}
TEST_F(TableMergerTest, FailToMergeNewResourceWithoutAutoAddOverlay) {
- std::unique_ptr<ResourceTable> tableA =
- test::ResourceTableBuilder().setPackageId("", 0x7f).build();
- std::unique_ptr<ResourceTable> tableB =
+ std::unique_ptr<ResourceTable> table_a =
+ test::ResourceTableBuilder().SetPackageId("", 0x7f).Build();
+ std::unique_ptr<ResourceTable> table_b =
test::ResourceTableBuilder()
- .setPackageId("", 0x7f)
- .addValue("bool/foo", ResourceUtils::tryParseBool("true"))
- .build();
+ .SetPackageId("", 0x7f)
+ .AddValue("bool/foo", ResourceUtils::TryParseBool("true"))
+ .Build();
- ResourceTable finalTable;
+ ResourceTable final_table;
TableMergerOptions options;
- options.autoAddOverlay = false;
- TableMerger merger(mContext.get(), &finalTable, options);
+ options.auto_add_overlay = false;
+ TableMerger merger(context_.get(), &final_table, options);
- ASSERT_TRUE(merger.merge({}, tableA.get()));
- ASSERT_FALSE(merger.mergeOverlay({}, tableB.get()));
+ ASSERT_TRUE(merger.Merge({}, table_a.get()));
+ ASSERT_FALSE(merger.MergeOverlay({}, table_b.get()));
}
TEST_F(TableMergerTest, OverlaidStyleablesShouldBeMerged) {
- std::unique_ptr<ResourceTable> tableA =
+ std::unique_ptr<ResourceTable> table_a =
test::ResourceTableBuilder()
- .setPackageId("com.app.a", 0x7f)
- .addValue("com.app.a:styleable/Foo",
+ .SetPackageId("com.app.a", 0x7f)
+ .AddValue("com.app.a:styleable/Foo",
test::StyleableBuilder()
- .addItem("com.app.a:attr/bar")
- .addItem("com.app.a:attr/foo", ResourceId(0x01010000))
- .build())
- .build();
+ .AddItem("com.app.a:attr/bar")
+ .AddItem("com.app.a:attr/foo", ResourceId(0x01010000))
+ .Build())
+ .Build();
- std::unique_ptr<ResourceTable> tableB =
+ std::unique_ptr<ResourceTable> table_b =
test::ResourceTableBuilder()
- .setPackageId("com.app.a", 0x7f)
- .addValue("com.app.a:styleable/Foo",
+ .SetPackageId("com.app.a", 0x7f)
+ .AddValue("com.app.a:styleable/Foo",
test::StyleableBuilder()
- .addItem("com.app.a:attr/bat")
- .addItem("com.app.a:attr/foo")
- .build())
- .build();
+ .AddItem("com.app.a:attr/bat")
+ .AddItem("com.app.a:attr/foo")
+ .Build())
+ .Build();
- ResourceTable finalTable;
+ ResourceTable final_table;
TableMergerOptions options;
- options.autoAddOverlay = true;
- TableMerger merger(mContext.get(), &finalTable, options);
+ options.auto_add_overlay = true;
+ TableMerger merger(context_.get(), &final_table, options);
- ASSERT_TRUE(merger.merge({}, tableA.get()));
- ASSERT_TRUE(merger.mergeOverlay({}, tableB.get()));
-
- Debug::printTable(&finalTable, {});
+ ASSERT_TRUE(merger.Merge({}, table_a.get()));
+ ASSERT_TRUE(merger.MergeOverlay({}, table_b.get()));
Styleable* styleable =
- test::getValue<Styleable>(&finalTable, "com.app.a:styleable/Foo");
+ test::GetValue<Styleable>(&final_table, "com.app.a:styleable/Foo");
ASSERT_NE(nullptr, styleable);
- std::vector<Reference> expectedRefs = {
- Reference(test::parseNameOrDie("com.app.a:attr/bar")),
- Reference(test::parseNameOrDie("com.app.a:attr/bat")),
- Reference(test::parseNameOrDie("com.app.a:attr/foo"),
+ std::vector<Reference> expected_refs = {
+ Reference(test::ParseNameOrDie("com.app.a:attr/bar")),
+ Reference(test::ParseNameOrDie("com.app.a:attr/bat")),
+ Reference(test::ParseNameOrDie("com.app.a:attr/foo"),
ResourceId(0x01010000)),
};
- EXPECT_EQ(expectedRefs, styleable->entries);
+ EXPECT_EQ(expected_refs, styleable->entries);
}
} // namespace aapt
diff --git a/tools/aapt2/link/VersionCollapser.cpp b/tools/aapt2/link/VersionCollapser.cpp
index 61a1f86..3df5899 100644
--- a/tools/aapt2/link/VersionCollapser.cpp
+++ b/tools/aapt2/link/VersionCollapser.cpp
@@ -14,50 +14,51 @@
* limitations under the License.
*/
-#include "ResourceTable.h"
#include "link/Linkers.h"
#include <algorithm>
#include <vector>
+#include "ResourceTable.h"
+
namespace aapt {
template <typename Iterator, typename Pred>
class FilterIterator {
public:
FilterIterator(Iterator begin, Iterator end, Pred pred = Pred())
- : mCurrent(begin), mEnd(end), mPred(pred) {
- advance();
+ : current_(begin), end_(end), pred_(pred) {
+ Advance();
}
- bool hasNext() { return mCurrent != mEnd; }
+ bool HasNext() { return current_ != end_; }
- Iterator nextIter() {
- Iterator iter = mCurrent;
- ++mCurrent;
- advance();
+ Iterator NextIter() {
+ Iterator iter = current_;
+ ++current_;
+ Advance();
return iter;
}
- typename Iterator::reference next() { return *nextIter(); }
+ typename Iterator::reference Next() { return *NextIter(); }
private:
- void advance() {
- for (; mCurrent != mEnd; ++mCurrent) {
- if (mPred(*mCurrent)) {
+ void Advance() {
+ for (; current_ != end_; ++current_) {
+ if (pred_(*current_)) {
return;
}
}
}
- Iterator mCurrent, mEnd;
- Pred mPred;
+ Iterator current_, end_;
+ Pred pred_;
};
template <typename Iterator, typename Pred>
-FilterIterator<Iterator, Pred> makeFilterIterator(Iterator begin,
- Iterator end = Iterator(),
- Pred pred = Pred()) {
+FilterIterator<Iterator, Pred> make_filter_iterator(Iterator begin,
+ Iterator end = Iterator(),
+ Pred pred = Pred()) {
return FilterIterator<Iterator, Pred>(begin, end, pred);
}
@@ -68,7 +69,7 @@
* next smallest
* one will be kept.
*/
-static void collapseVersions(int minSdk, ResourceEntry* entry) {
+static void CollapseVersions(int min_sdk, ResourceEntry* entry) {
// First look for all sdks less than minSdk.
for (auto iter = entry->values.rbegin(); iter != entry->values.rend();
++iter) {
@@ -78,15 +79,14 @@
}
const ConfigDescription& config = (*iter)->config;
- if (config.sdkVersion <= minSdk) {
+ if (config.sdkVersion <= min_sdk) {
// This is the first configuration we've found with a smaller or equal SDK
// level
// to the minimum. We MUST keep this one, but remove all others we find,
// which get
// overridden by this one.
- ConfigDescription configWithoutSdk = config;
- configWithoutSdk.sdkVersion = 0;
+ ConfigDescription config_without_sdk = config.CopyWithoutSdkVersion();
auto pred = [&](const std::unique_ptr<ResourceConfigValue>& val) -> bool {
// Check that the value hasn't already been marked for removal.
if (!val) {
@@ -94,16 +94,16 @@
}
// Only return Configs that differ in SDK version.
- configWithoutSdk.sdkVersion = val->config.sdkVersion;
- return configWithoutSdk == val->config &&
- val->config.sdkVersion <= minSdk;
+ config_without_sdk.sdkVersion = val->config.sdkVersion;
+ return config_without_sdk == val->config &&
+ val->config.sdkVersion <= min_sdk;
};
// Remove the rest that match.
- auto filterIter =
- makeFilterIterator(iter + 1, entry->values.rend(), pred);
- while (filterIter.hasNext()) {
- filterIter.next() = {};
+ auto filter_iter =
+ make_filter_iterator(iter + 1, entry->values.rend(), pred);
+ while (filter_iter.HasNext()) {
+ filter_iter.Next() = {};
}
}
}
@@ -121,16 +121,16 @@
// struct
// and take up less space in the resources.arsc table.
bool modified = false;
- for (std::unique_ptr<ResourceConfigValue>& configValue : entry->values) {
- if (configValue->config.sdkVersion != 0 &&
- configValue->config.sdkVersion <= minSdk) {
+ for (std::unique_ptr<ResourceConfigValue>& config_value : entry->values) {
+ if (config_value->config.sdkVersion != 0 &&
+ config_value->config.sdkVersion <= min_sdk) {
// Override the resource with a Configuration without an SDK.
- std::unique_ptr<ResourceConfigValue> newValue =
+ std::unique_ptr<ResourceConfigValue> new_value =
util::make_unique<ResourceConfigValue>(
- configValue->config.copyWithoutSdkVersion(),
- configValue->product);
- newValue->value = std::move(configValue->value);
- configValue = std::move(newValue);
+ config_value->config.CopyWithoutSdkVersion(),
+ config_value->product);
+ new_value->value = std::move(config_value->value);
+ config_value = std::move(new_value);
modified = true;
}
@@ -138,8 +138,7 @@
if (modified) {
// We've modified the keys (ConfigDescription) by changing the sdkVersion to
- // 0.
- // We MUST re-sort to ensure ordering guarantees hold.
+ // 0. We MUST re-sort to ensure ordering guarantees hold.
std::sort(entry->values.begin(), entry->values.end(),
[](const std::unique_ptr<ResourceConfigValue>& a,
const std::unique_ptr<ResourceConfigValue>& b) -> bool {
@@ -148,12 +147,12 @@
}
}
-bool VersionCollapser::consume(IAaptContext* context, ResourceTable* table) {
- const int minSdk = context->getMinSdkVersion();
+bool VersionCollapser::Consume(IAaptContext* context, ResourceTable* table) {
+ const int min_sdk = context->GetMinSdkVersion();
for (auto& package : table->packages) {
for (auto& type : package->types) {
for (auto& entry : type->entries) {
- collapseVersions(minSdk, entry.get());
+ CollapseVersions(min_sdk, entry.get());
}
}
}
diff --git a/tools/aapt2/link/VersionCollapser_test.cpp b/tools/aapt2/link/VersionCollapser_test.cpp
index c0e0ddb..1b5592f 100644
--- a/tools/aapt2/link/VersionCollapser_test.cpp
+++ b/tools/aapt2/link/VersionCollapser_test.cpp
@@ -15,103 +15,103 @@
*/
#include "link/Linkers.h"
+
#include "test/Test.h"
namespace aapt {
-template <typename T>
-using uptr = std::unique_ptr<T>;
-
-static uptr<ResourceTable> buildTableWithConfigs(
+static std::unique_ptr<ResourceTable> BuildTableWithConfigs(
const StringPiece& name, std::initializer_list<std::string> list) {
test::ResourceTableBuilder builder;
for (const std::string& item : list) {
- builder.addSimple(name, test::parseConfigOrDie(item));
+ builder.AddSimple(name, test::ParseConfigOrDie(item));
}
- return builder.build();
+ return builder.Build();
}
TEST(VersionCollapserTest, CollapseVersions) {
- uptr<IAaptContext> context =
- test::ContextBuilder().setMinSdkVersion(7).build();
+ std::unique_ptr<IAaptContext> context =
+ test::ContextBuilder().SetMinSdkVersion(7).Build();
- const StringPiece resName = "@android:string/foo";
+ const StringPiece res_name = "@android:string/foo";
- uptr<ResourceTable> table = buildTableWithConfigs(
- resName,
+ std::unique_ptr<ResourceTable> table = BuildTableWithConfigs(
+ res_name,
{"land-v4", "land-v5", "sw600dp", "land-v6", "land-v14", "land-v21"});
VersionCollapser collapser;
- ASSERT_TRUE(collapser.consume(context.get(), table.get()));
+ ASSERT_TRUE(collapser.Consume(context.get(), table.get()));
// These should be removed.
EXPECT_EQ(nullptr,
- test::getValueForConfig<Id>(table.get(), resName,
- test::parseConfigOrDie("land-v4")));
+ test::GetValueForConfig<Id>(table.get(), res_name,
+ test::ParseConfigOrDie("land-v4")));
EXPECT_EQ(nullptr,
- test::getValueForConfig<Id>(table.get(), resName,
- test::parseConfigOrDie("land-v5")));
+ test::GetValueForConfig<Id>(table.get(), res_name,
+ test::ParseConfigOrDie("land-v5")));
// This one should be removed because it was renamed to 'land', with the
// version dropped.
EXPECT_EQ(nullptr,
- test::getValueForConfig<Id>(table.get(), resName,
- test::parseConfigOrDie("land-v6")));
+ test::GetValueForConfig<Id>(table.get(), res_name,
+ test::ParseConfigOrDie("land-v6")));
// These should remain.
EXPECT_NE(nullptr,
- test::getValueForConfig<Id>(table.get(), resName,
- test::parseConfigOrDie("sw600dp")));
+ test::GetValueForConfig<Id>(table.get(), res_name,
+ test::ParseConfigOrDie("sw600dp")));
// 'land' should be present because it was renamed from 'land-v6'.
- EXPECT_NE(nullptr, test::getValueForConfig<Id>(
- table.get(), resName, test::parseConfigOrDie("land")));
EXPECT_NE(nullptr,
- test::getValueForConfig<Id>(table.get(), resName,
- test::parseConfigOrDie("land-v14")));
+ test::GetValueForConfig<Id>(table.get(), res_name,
+ test::ParseConfigOrDie("land")));
EXPECT_NE(nullptr,
- test::getValueForConfig<Id>(table.get(), resName,
- test::parseConfigOrDie("land-v21")));
+ test::GetValueForConfig<Id>(table.get(), res_name,
+ test::ParseConfigOrDie("land-v14")));
+ EXPECT_NE(nullptr,
+ test::GetValueForConfig<Id>(table.get(), res_name,
+ test::ParseConfigOrDie("land-v21")));
}
TEST(VersionCollapserTest, CollapseVersionsWhenMinSdkIsHighest) {
- uptr<IAaptContext> context =
- test::ContextBuilder().setMinSdkVersion(21).build();
+ std::unique_ptr<IAaptContext> context =
+ test::ContextBuilder().SetMinSdkVersion(21).Build();
- const StringPiece resName = "@android:string/foo";
+ const StringPiece res_name = "@android:string/foo";
- uptr<ResourceTable> table = buildTableWithConfigs(
- resName, {"land-v4", "land-v5", "sw600dp", "land-v6", "land-v14",
- "land-v21", "land-v22"});
+ std::unique_ptr<ResourceTable> table = BuildTableWithConfigs(
+ res_name, {"land-v4", "land-v5", "sw600dp", "land-v6", "land-v14",
+ "land-v21", "land-v22"});
VersionCollapser collapser;
- ASSERT_TRUE(collapser.consume(context.get(), table.get()));
+ ASSERT_TRUE(collapser.Consume(context.get(), table.get()));
// These should all be removed.
EXPECT_EQ(nullptr,
- test::getValueForConfig<Id>(table.get(), resName,
- test::parseConfigOrDie("land-v4")));
+ test::GetValueForConfig<Id>(table.get(), res_name,
+ test::ParseConfigOrDie("land-v4")));
EXPECT_EQ(nullptr,
- test::getValueForConfig<Id>(table.get(), resName,
- test::parseConfigOrDie("land-v5")));
+ test::GetValueForConfig<Id>(table.get(), res_name,
+ test::ParseConfigOrDie("land-v5")));
EXPECT_EQ(nullptr,
- test::getValueForConfig<Id>(table.get(), resName,
- test::parseConfigOrDie("land-v6")));
+ test::GetValueForConfig<Id>(table.get(), res_name,
+ test::ParseConfigOrDie("land-v6")));
EXPECT_EQ(nullptr,
- test::getValueForConfig<Id>(table.get(), resName,
- test::parseConfigOrDie("land-v14")));
+ test::GetValueForConfig<Id>(table.get(), res_name,
+ test::ParseConfigOrDie("land-v14")));
// These should remain.
EXPECT_NE(nullptr,
- test::getValueForConfig<Id>(
- table.get(), resName,
- test::parseConfigOrDie("sw600dp").copyWithoutSdkVersion()));
+ test::GetValueForConfig<Id>(
+ table.get(), res_name,
+ test::ParseConfigOrDie("sw600dp").CopyWithoutSdkVersion()));
// land-v21 should have been converted to land.
- EXPECT_NE(nullptr, test::getValueForConfig<Id>(
- table.get(), resName, test::parseConfigOrDie("land")));
+ EXPECT_NE(nullptr,
+ test::GetValueForConfig<Id>(table.get(), res_name,
+ test::ParseConfigOrDie("land")));
// land-v22 should remain as-is.
EXPECT_NE(nullptr,
- test::getValueForConfig<Id>(table.get(), resName,
- test::parseConfigOrDie("land-v22")));
+ test::GetValueForConfig<Id>(table.get(), res_name,
+ test::ParseConfigOrDie("land-v22")));
}
} // namespace aapt
diff --git a/tools/aapt2/link/XmlNamespaceRemover.cpp b/tools/aapt2/link/XmlNamespaceRemover.cpp
index 6e8d80d..24aa566 100644
--- a/tools/aapt2/link/XmlNamespaceRemover.cpp
+++ b/tools/aapt2/link/XmlNamespaceRemover.cpp
@@ -14,11 +14,12 @@
* limitations under the License.
*/
-#include "ResourceTable.h"
#include "link/Linkers.h"
#include <algorithm>
+#include "ResourceTable.h"
+
namespace aapt {
namespace {
@@ -28,12 +29,12 @@
*/
class XmlVisitor : public xml::Visitor {
public:
- XmlVisitor(bool keepUris) : mKeepUris(keepUris) {}
+ explicit XmlVisitor(bool keep_uris) : keep_uris_(keep_uris) {}
- void visit(xml::Element* el) override {
+ void Visit(xml::Element* el) override {
// Strip namespaces
for (auto& child : el->children) {
- while (child && xml::nodeCast<xml::Namespace>(child.get())) {
+ while (child && xml::NodeCast<xml::Namespace>(child.get())) {
if (child->children.empty()) {
child = {};
} else {
@@ -49,36 +50,38 @@
}),
el->children.end());
- if (!mKeepUris) {
+ if (!keep_uris_) {
for (xml::Attribute& attr : el->attributes) {
- attr.namespaceUri = std::string();
+ attr.namespace_uri = std::string();
}
- el->namespaceUri = std::string();
+ el->namespace_uri = std::string();
}
- xml::Visitor::visit(el);
+ xml::Visitor::Visit(el);
}
private:
- bool mKeepUris;
+ DISALLOW_COPY_AND_ASSIGN(XmlVisitor);
+
+ bool keep_uris_;
};
} // namespace
-bool XmlNamespaceRemover::consume(IAaptContext* context,
+bool XmlNamespaceRemover::Consume(IAaptContext* context,
xml::XmlResource* resource) {
if (!resource->root) {
return false;
}
// Replace any root namespaces until the root is a non-namespace node
- while (xml::nodeCast<xml::Namespace>(resource->root.get())) {
+ while (xml::NodeCast<xml::Namespace>(resource->root.get())) {
if (resource->root->children.empty()) {
break;
}
resource->root = std::move(resource->root->children.front());
resource->root->parent = nullptr;
}
- XmlVisitor visitor(mKeepUris);
- resource->root->accept(&visitor);
+ XmlVisitor visitor(keep_uris_);
+ resource->root->Accept(&visitor);
return true;
}
diff --git a/tools/aapt2/link/XmlNamespaceRemover_test.cpp b/tools/aapt2/link/XmlNamespaceRemover_test.cpp
index d2daaee..a176c03 100644
--- a/tools/aapt2/link/XmlNamespaceRemover_test.cpp
+++ b/tools/aapt2/link/XmlNamespaceRemover_test.cpp
@@ -15,83 +15,94 @@
*/
#include "link/Linkers.h"
+
#include "test/Test.h"
namespace aapt {
class XmlUriTestVisitor : public xml::Visitor {
public:
- void visit(xml::Element* el) override {
+ XmlUriTestVisitor() = default;
+
+ void Visit(xml::Element* el) override {
for (const auto& attr : el->attributes) {
- EXPECT_EQ(std::string(), attr.namespaceUri);
+ EXPECT_EQ(std::string(), attr.namespace_uri);
}
- EXPECT_EQ(std::string(), el->namespaceUri);
- xml::Visitor::visit(el);
+ EXPECT_EQ(std::string(), el->namespace_uri);
+ xml::Visitor::Visit(el);
}
- void visit(xml::Namespace* ns) override {
- EXPECT_EQ(std::string(), ns->namespaceUri);
- xml::Visitor::visit(ns);
+ void Visit(xml::Namespace* ns) override {
+ EXPECT_EQ(std::string(), ns->namespace_uri);
+ xml::Visitor::Visit(ns);
}
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(XmlUriTestVisitor);
};
class XmlNamespaceTestVisitor : public xml::Visitor {
public:
- void visit(xml::Namespace* ns) override {
- ADD_FAILURE() << "Detected namespace: " << ns->namespacePrefix << "=\""
- << ns->namespaceUri << "\"";
- xml::Visitor::visit(ns);
+ XmlNamespaceTestVisitor() = default;
+
+ void Visit(xml::Namespace* ns) override {
+ ADD_FAILURE() << "Detected namespace: " << ns->namespace_prefix << "=\""
+ << ns->namespace_uri << "\"";
+ xml::Visitor::Visit(ns);
}
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(XmlNamespaceTestVisitor);
};
class XmlNamespaceRemoverTest : public ::testing::Test {
public:
void SetUp() override {
- mContext =
- test::ContextBuilder().setCompilationPackage("com.app.test").build();
+ context_ =
+ test::ContextBuilder().SetCompilationPackage("com.app.test").Build();
}
protected:
- std::unique_ptr<IAaptContext> mContext;
+ std::unique_ptr<IAaptContext> context_;
};
TEST_F(XmlNamespaceRemoverTest, RemoveUris) {
std::unique_ptr<xml::XmlResource> doc =
- test::buildXmlDomForPackageName(mContext.get(), R"EOF(
+ test::BuildXmlDomForPackageName(context_.get(), R"EOF(
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:text="hello" />)EOF");
XmlNamespaceRemover remover;
- ASSERT_TRUE(remover.consume(mContext.get(), doc.get()));
+ ASSERT_TRUE(remover.Consume(context_.get(), doc.get()));
xml::Node* root = doc.get()->root.get();
ASSERT_NE(root, nullptr);
XmlUriTestVisitor visitor;
- root->accept(&visitor);
+ root->Accept(&visitor);
}
TEST_F(XmlNamespaceRemoverTest, RemoveNamespaces) {
std::unique_ptr<xml::XmlResource> doc =
- test::buildXmlDomForPackageName(mContext.get(), R"EOF(
+ test::BuildXmlDomForPackageName(context_.get(), R"EOF(
<View xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:foo="http://schemas.android.com/apk/res/foo"
foo:bar="foobar"
android:text="hello" />)EOF");
XmlNamespaceRemover remover;
- ASSERT_TRUE(remover.consume(mContext.get(), doc.get()));
+ ASSERT_TRUE(remover.Consume(context_.get(), doc.get()));
xml::Node* root = doc.get()->root.get();
ASSERT_NE(root, nullptr);
XmlNamespaceTestVisitor visitor;
- root->accept(&visitor);
+ root->Accept(&visitor);
}
TEST_F(XmlNamespaceRemoverTest, RemoveNestedNamespaces) {
std::unique_ptr<xml::XmlResource> doc =
- test::buildXmlDomForPackageName(mContext.get(), R"EOF(
+ test::BuildXmlDomForPackageName(context_.get(), R"EOF(
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:text="hello">
<View xmlns:foo="http://schemas.example.com/foo"
@@ -99,13 +110,13 @@
</View>)EOF");
XmlNamespaceRemover remover;
- ASSERT_TRUE(remover.consume(mContext.get(), doc.get()));
+ ASSERT_TRUE(remover.Consume(context_.get(), doc.get()));
xml::Node* root = doc.get()->root.get();
ASSERT_NE(root, nullptr);
XmlNamespaceTestVisitor visitor;
- root->accept(&visitor);
+ root->Accept(&visitor);
}
} // namespace aapt
diff --git a/tools/aapt2/link/XmlReferenceLinker.cpp b/tools/aapt2/link/XmlReferenceLinker.cpp
index 945f98a..a819831 100644
--- a/tools/aapt2/link/XmlReferenceLinker.cpp
+++ b/tools/aapt2/link/XmlReferenceLinker.cpp
@@ -14,10 +14,11 @@
* limitations under the License.
*/
+#include "link/Linkers.h"
+
#include "Diagnostics.h"
#include "ResourceUtils.h"
#include "SdkConstants.h"
-#include "link/Linkers.h"
#include "link/ReferenceLinker.h"
#include "process/IResourceTableConsumer.h"
#include "process/SymbolTable.h"
@@ -37,31 +38,33 @@
*/
class ReferenceVisitor : public ValueVisitor {
public:
- using ValueVisitor::visit;
+ using ValueVisitor::Visit;
ReferenceVisitor(IAaptContext* context, SymbolTable* symbols,
- xml::IPackageDeclStack* decls, CallSite* callSite)
- : mContext(context),
- mSymbols(symbols),
- mDecls(decls),
- mCallSite(callSite),
- mError(false) {}
+ xml::IPackageDeclStack* decls, CallSite* callsite)
+ : context_(context),
+ symbols_(symbols),
+ decls_(decls),
+ callsite_(callsite),
+ error_(false) {}
- void visit(Reference* ref) override {
- if (!ReferenceLinker::linkReference(ref, mContext, mSymbols, mDecls,
- mCallSite)) {
- mError = true;
+ void Visit(Reference* ref) override {
+ if (!ReferenceLinker::LinkReference(ref, context_, symbols_, decls_,
+ callsite_)) {
+ error_ = true;
}
}
- bool hasError() const { return mError; }
+ bool HasError() const { return error_; }
private:
- IAaptContext* mContext;
- SymbolTable* mSymbols;
- xml::IPackageDeclStack* mDecls;
- CallSite* mCallSite;
- bool mError;
+ DISALLOW_COPY_AND_ASSIGN(ReferenceVisitor);
+
+ IAaptContext* context_;
+ SymbolTable* symbols_;
+ xml::IPackageDeclStack* decls_;
+ CallSite* callsite_;
+ bool error_;
};
/**
@@ -69,114 +72,117 @@
*/
class XmlVisitor : public xml::PackageAwareVisitor {
public:
- using xml::PackageAwareVisitor::visit;
+ using xml::PackageAwareVisitor::Visit;
XmlVisitor(IAaptContext* context, SymbolTable* symbols, const Source& source,
- std::set<int>* sdkLevelsFound, CallSite* callSite)
- : mContext(context),
- mSymbols(symbols),
- mSource(source),
- mSdkLevelsFound(sdkLevelsFound),
- mCallSite(callSite),
- mReferenceVisitor(context, symbols, this, callSite) {}
+ std::set<int>* sdk_levels_found, CallSite* callsite)
+ : context_(context),
+ symbols_(symbols),
+ source_(source),
+ sdk_levels_found_(sdk_levels_found),
+ callsite_(callsite),
+ reference_visitor_(context, symbols, this, callsite) {}
- void visit(xml::Element* el) override {
- const Source source = mSource.withLine(el->lineNumber);
+ void Visit(xml::Element* el) override {
+ const Source source = source_.WithLine(el->line_number);
for (xml::Attribute& attr : el->attributes) {
- Maybe<xml::ExtractedPackage> maybePackage =
- xml::extractPackageFromNamespace(attr.namespaceUri);
- if (maybePackage) {
+ Maybe<xml::ExtractedPackage> maybe_package =
+ xml::ExtractPackageFromNamespace(attr.namespace_uri);
+ if (maybe_package) {
// There is a valid package name for this attribute. We will look this
// up.
- StringPiece package = maybePackage.value().package;
+ StringPiece package = maybe_package.value().package;
if (package.empty()) {
// Empty package means the 'current' or 'local' package.
- package = mContext->getCompilationPackage();
+ package = context_->GetCompilationPackage();
}
- Reference attrRef(
+ Reference attr_ref(
ResourceNameRef(package, ResourceType::kAttr, attr.name));
- attrRef.privateReference = maybePackage.value().privateNamespace;
+ attr_ref.private_reference = maybe_package.value().private_namespace;
- std::string errStr;
- attr.compiledAttribute = ReferenceLinker::compileXmlAttribute(
- attrRef, mContext->getNameMangler(), mSymbols, mCallSite, &errStr);
+ std::string err_str;
+ attr.compiled_attribute = ReferenceLinker::CompileXmlAttribute(
+ attr_ref, context_->GetNameMangler(), symbols_, callsite_,
+ &err_str);
// Convert the string value into a compiled Value if this is a valid
// attribute.
- if (attr.compiledAttribute) {
- if (attr.compiledAttribute.value().id) {
+ if (attr.compiled_attribute) {
+ if (attr.compiled_attribute.value().id) {
// Record all SDK levels from which the attributes were defined.
- const size_t sdkLevel = findAttributeSdkLevel(
- attr.compiledAttribute.value().id.value());
- if (sdkLevel > 1) {
- mSdkLevelsFound->insert(sdkLevel);
+ const size_t sdk_level = FindAttributeSdkLevel(
+ attr.compiled_attribute.value().id.value());
+ if (sdk_level > 1) {
+ sdk_levels_found_->insert(sdk_level);
}
}
const Attribute* attribute =
- &attr.compiledAttribute.value().attribute;
- attr.compiledValue =
- ResourceUtils::tryParseItemForAttribute(attr.value, attribute);
- if (!attr.compiledValue &&
- !(attribute->typeMask & android::ResTable_map::TYPE_STRING)) {
+ &attr.compiled_attribute.value().attribute;
+ attr.compiled_value =
+ ResourceUtils::TryParseItemForAttribute(attr.value, attribute);
+ if (!attr.compiled_value &&
+ !(attribute->type_mask & android::ResTable_map::TYPE_STRING)) {
// We won't be able to encode this as a string.
- mContext->getDiagnostics()->error(
+ context_->GetDiagnostics()->Error(
DiagMessage(source) << "'" << attr.value << "' "
<< "is incompatible with attribute "
<< package << ":" << attr.name << " "
<< *attribute);
- mError = true;
+ error_ = true;
}
} else {
- mContext->getDiagnostics()->error(DiagMessage(source)
+ context_->GetDiagnostics()->Error(DiagMessage(source)
<< "attribute '" << package << ":"
- << attr.name << "' " << errStr);
- mError = true;
+ << attr.name << "' " << err_str);
+ error_ = true;
}
- } else if (!attr.compiledValue) {
+ } else if (!attr.compiled_value) {
// We still encode references, but only if we haven't manually set this
// to
// another compiled value.
- attr.compiledValue = ResourceUtils::tryParseReference(attr.value);
+ attr.compiled_value = ResourceUtils::TryParseReference(attr.value);
}
- if (attr.compiledValue) {
+ if (attr.compiled_value) {
// With a compiledValue, we must resolve the reference and assign it an
// ID.
- attr.compiledValue->setSource(source);
- attr.compiledValue->accept(&mReferenceVisitor);
+ attr.compiled_value->SetSource(source);
+ attr.compiled_value->Accept(&reference_visitor_);
}
}
// Call the super implementation.
- xml::PackageAwareVisitor::visit(el);
+ xml::PackageAwareVisitor::Visit(el);
}
- bool hasError() { return mError || mReferenceVisitor.hasError(); }
+ bool HasError() { return error_ || reference_visitor_.HasError(); }
private:
- IAaptContext* mContext;
- SymbolTable* mSymbols;
- Source mSource;
- std::set<int>* mSdkLevelsFound;
- CallSite* mCallSite;
- ReferenceVisitor mReferenceVisitor;
- bool mError = false;
+ DISALLOW_COPY_AND_ASSIGN(XmlVisitor);
+
+ IAaptContext* context_;
+ SymbolTable* symbols_;
+ Source source_;
+ std::set<int>* sdk_levels_found_;
+ CallSite* callsite_;
+ ReferenceVisitor reference_visitor_;
+ bool error_ = false;
};
} // namespace
-bool XmlReferenceLinker::consume(IAaptContext* context,
+bool XmlReferenceLinker::Consume(IAaptContext* context,
xml::XmlResource* resource) {
- mSdkLevelsFound.clear();
- CallSite callSite = {resource->file.name};
- XmlVisitor visitor(context, context->getExternalSymbols(),
- resource->file.source, &mSdkLevelsFound, &callSite);
+ sdk_levels_found_.clear();
+ CallSite callsite = {resource->file.name};
+ XmlVisitor visitor(context, context->GetExternalSymbols(),
+ resource->file.source, &sdk_levels_found_, &callsite);
if (resource->root) {
- resource->root->accept(&visitor);
- return !visitor.hasError();
+ resource->root->Accept(&visitor);
+ return !visitor.HasError();
}
return false;
}
diff --git a/tools/aapt2/link/XmlReferenceLinker_test.cpp b/tools/aapt2/link/XmlReferenceLinker_test.cpp
index 35d479f..810f63c 100644
--- a/tools/aapt2/link/XmlReferenceLinker_test.cpp
+++ b/tools/aapt2/link/XmlReferenceLinker_test.cpp
@@ -15,6 +15,7 @@
*/
#include "link/Linkers.h"
+
#include "test/Test.h"
namespace aapt {
@@ -22,72 +23,72 @@
class XmlReferenceLinkerTest : public ::testing::Test {
public:
void SetUp() override {
- mContext =
+ context_ =
test::ContextBuilder()
- .setCompilationPackage("com.app.test")
- .setNameManglerPolicy(
+ .SetCompilationPackage("com.app.test")
+ .SetNameManglerPolicy(
NameManglerPolicy{"com.app.test", {"com.android.support"}})
- .addSymbolSource(
+ .AddSymbolSource(
test::StaticSymbolSourceBuilder()
- .addPublicSymbol(
+ .AddPublicSymbol(
"android:attr/layout_width", ResourceId(0x01010000),
test::AttributeBuilder()
- .setTypeMask(android::ResTable_map::TYPE_ENUM |
+ .SetTypeMask(android::ResTable_map::TYPE_ENUM |
android::ResTable_map::TYPE_DIMENSION)
- .addItem("match_parent", 0xffffffff)
- .build())
- .addPublicSymbol(
+ .AddItem("match_parent", 0xffffffff)
+ .Build())
+ .AddPublicSymbol(
"android:attr/background", ResourceId(0x01010001),
test::AttributeBuilder()
- .setTypeMask(android::ResTable_map::TYPE_COLOR)
- .build())
- .addPublicSymbol("android:attr/attr",
+ .SetTypeMask(android::ResTable_map::TYPE_COLOR)
+ .Build())
+ .AddPublicSymbol("android:attr/attr",
ResourceId(0x01010002),
- test::AttributeBuilder().build())
- .addPublicSymbol(
+ test::AttributeBuilder().Build())
+ .AddPublicSymbol(
"android:attr/text", ResourceId(0x01010003),
test::AttributeBuilder()
- .setTypeMask(android::ResTable_map::TYPE_STRING)
- .build())
+ .SetTypeMask(android::ResTable_map::TYPE_STRING)
+ .Build())
// Add one real symbol that was introduces in v21
- .addPublicSymbol("android:attr/colorAccent",
+ .AddPublicSymbol("android:attr/colorAccent",
ResourceId(0x01010435),
- test::AttributeBuilder().build())
+ test::AttributeBuilder().Build())
// Private symbol.
- .addSymbol("android:color/hidden", ResourceId(0x01020001))
+ .AddSymbol("android:color/hidden", ResourceId(0x01020001))
- .addPublicSymbol("android:id/id", ResourceId(0x01030000))
- .addSymbol("com.app.test:id/id", ResourceId(0x7f030000))
- .addSymbol("com.app.test:color/green",
+ .AddPublicSymbol("android:id/id", ResourceId(0x01030000))
+ .AddSymbol("com.app.test:id/id", ResourceId(0x7f030000))
+ .AddSymbol("com.app.test:color/green",
ResourceId(0x7f020000))
- .addSymbol("com.app.test:color/red", ResourceId(0x7f020001))
- .addSymbol(
+ .AddSymbol("com.app.test:color/red", ResourceId(0x7f020001))
+ .AddSymbol(
"com.app.test:attr/colorAccent", ResourceId(0x7f010000),
test::AttributeBuilder()
- .setTypeMask(android::ResTable_map::TYPE_COLOR)
- .build())
- .addPublicSymbol(
+ .SetTypeMask(android::ResTable_map::TYPE_COLOR)
+ .Build())
+ .AddPublicSymbol(
"com.app.test:attr/com.android.support$colorAccent",
ResourceId(0x7f010001),
test::AttributeBuilder()
- .setTypeMask(android::ResTable_map::TYPE_COLOR)
- .build())
- .addPublicSymbol("com.app.test:attr/attr",
+ .SetTypeMask(android::ResTable_map::TYPE_COLOR)
+ .Build())
+ .AddPublicSymbol("com.app.test:attr/attr",
ResourceId(0x7f010002),
- test::AttributeBuilder().build())
- .build())
- .build();
+ test::AttributeBuilder().Build())
+ .Build())
+ .Build();
}
protected:
- std::unique_ptr<IAaptContext> mContext;
+ std::unique_ptr<IAaptContext> context_;
};
TEST_F(XmlReferenceLinkerTest, LinkBasicAttributes) {
std::unique_ptr<xml::XmlResource> doc =
- test::buildXmlDomForPackageName(mContext.get(), R"EOF(
+ test::BuildXmlDomForPackageName(context_.get(), R"EOF(
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="@color/green"
@@ -95,123 +96,125 @@
class="hello" />)EOF");
XmlReferenceLinker linker;
- ASSERT_TRUE(linker.consume(mContext.get(), doc.get()));
+ ASSERT_TRUE(linker.Consume(context_.get(), doc.get()));
- xml::Element* viewEl = xml::findRootElement(doc.get());
- ASSERT_NE(viewEl, nullptr);
+ xml::Element* view_el = xml::FindRootElement(doc.get());
+ ASSERT_NE(view_el, nullptr);
- xml::Attribute* xmlAttr =
- viewEl->findAttribute(xml::kSchemaAndroid, "layout_width");
- ASSERT_NE(xmlAttr, nullptr);
- AAPT_ASSERT_TRUE(xmlAttr->compiledAttribute);
- AAPT_ASSERT_TRUE(xmlAttr->compiledAttribute.value().id);
- EXPECT_EQ(xmlAttr->compiledAttribute.value().id.value(),
+ xml::Attribute* xml_attr =
+ view_el->FindAttribute(xml::kSchemaAndroid, "layout_width");
+ ASSERT_NE(xml_attr, nullptr);
+ AAPT_ASSERT_TRUE(xml_attr->compiled_attribute);
+ AAPT_ASSERT_TRUE(xml_attr->compiled_attribute.value().id);
+ EXPECT_EQ(xml_attr->compiled_attribute.value().id.value(),
ResourceId(0x01010000));
- ASSERT_NE(xmlAttr->compiledValue, nullptr);
- ASSERT_NE(valueCast<BinaryPrimitive>(xmlAttr->compiledValue.get()), nullptr);
+ ASSERT_NE(xml_attr->compiled_value, nullptr);
+ ASSERT_NE(ValueCast<BinaryPrimitive>(xml_attr->compiled_value.get()),
+ nullptr);
- xmlAttr = viewEl->findAttribute(xml::kSchemaAndroid, "background");
- ASSERT_NE(xmlAttr, nullptr);
- AAPT_ASSERT_TRUE(xmlAttr->compiledAttribute);
- AAPT_ASSERT_TRUE(xmlAttr->compiledAttribute.value().id);
- EXPECT_EQ(xmlAttr->compiledAttribute.value().id.value(),
+ xml_attr = view_el->FindAttribute(xml::kSchemaAndroid, "background");
+ ASSERT_NE(xml_attr, nullptr);
+ AAPT_ASSERT_TRUE(xml_attr->compiled_attribute);
+ AAPT_ASSERT_TRUE(xml_attr->compiled_attribute.value().id);
+ EXPECT_EQ(xml_attr->compiled_attribute.value().id.value(),
ResourceId(0x01010001));
- ASSERT_NE(xmlAttr->compiledValue, nullptr);
- Reference* ref = valueCast<Reference>(xmlAttr->compiledValue.get());
+ ASSERT_NE(xml_attr->compiled_value, nullptr);
+ Reference* ref = ValueCast<Reference>(xml_attr->compiled_value.get());
ASSERT_NE(ref, nullptr);
AAPT_ASSERT_TRUE(ref->name);
EXPECT_EQ(ref->name.value(),
- test::parseNameOrDie("color/green")); // Make sure the name
+ test::ParseNameOrDie("color/green")); // Make sure the name
// didn't change.
AAPT_ASSERT_TRUE(ref->id);
EXPECT_EQ(ref->id.value(), ResourceId(0x7f020000));
- xmlAttr = viewEl->findAttribute(xml::kSchemaAndroid, "text");
- ASSERT_NE(xmlAttr, nullptr);
- AAPT_ASSERT_TRUE(xmlAttr->compiledAttribute);
+ xml_attr = view_el->FindAttribute(xml::kSchemaAndroid, "text");
+ ASSERT_NE(xml_attr, nullptr);
+ AAPT_ASSERT_TRUE(xml_attr->compiled_attribute);
ASSERT_FALSE(
- xmlAttr->compiledValue); // Strings don't get compiled for memory sake.
+ xml_attr->compiled_value); // Strings don't get compiled for memory sake.
- xmlAttr = viewEl->findAttribute("", "class");
- ASSERT_NE(xmlAttr, nullptr);
- AAPT_ASSERT_FALSE(xmlAttr->compiledAttribute);
- ASSERT_EQ(xmlAttr->compiledValue, nullptr);
+ xml_attr = view_el->FindAttribute("", "class");
+ ASSERT_NE(xml_attr, nullptr);
+ AAPT_ASSERT_FALSE(xml_attr->compiled_attribute);
+ ASSERT_EQ(xml_attr->compiled_value, nullptr);
}
TEST_F(XmlReferenceLinkerTest, PrivateSymbolsAreNotLinked) {
std::unique_ptr<xml::XmlResource> doc =
- test::buildXmlDomForPackageName(mContext.get(), R"EOF(
+ test::BuildXmlDomForPackageName(context_.get(), R"EOF(
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:colorAccent="@android:color/hidden" />)EOF");
XmlReferenceLinker linker;
- ASSERT_FALSE(linker.consume(mContext.get(), doc.get()));
+ ASSERT_FALSE(linker.Consume(context_.get(), doc.get()));
}
TEST_F(XmlReferenceLinkerTest,
PrivateSymbolsAreLinkedWhenReferenceHasStarPrefix) {
std::unique_ptr<xml::XmlResource> doc =
- test::buildXmlDomForPackageName(mContext.get(), R"EOF(
+ test::BuildXmlDomForPackageName(context_.get(), R"EOF(
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:colorAccent="@*android:color/hidden" />)EOF");
XmlReferenceLinker linker;
- ASSERT_TRUE(linker.consume(mContext.get(), doc.get()));
+ ASSERT_TRUE(linker.Consume(context_.get(), doc.get()));
}
TEST_F(XmlReferenceLinkerTest, SdkLevelsAreRecorded) {
std::unique_ptr<xml::XmlResource> doc =
- test::buildXmlDomForPackageName(mContext.get(), R"EOF(
+ test::BuildXmlDomForPackageName(context_.get(), R"EOF(
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:colorAccent="#ffffff" />)EOF");
XmlReferenceLinker linker;
- ASSERT_TRUE(linker.consume(mContext.get(), doc.get()));
- EXPECT_TRUE(linker.getSdkLevels().count(21) == 1);
+ ASSERT_TRUE(linker.Consume(context_.get(), doc.get()));
+ EXPECT_TRUE(linker.sdk_levels().count(21) == 1);
}
TEST_F(XmlReferenceLinkerTest, LinkMangledAttributes) {
std::unique_ptr<xml::XmlResource> doc =
- test::buildXmlDomForPackageName(mContext.get(), R"EOF(
+ test::BuildXmlDomForPackageName(context_.get(), R"EOF(
<View xmlns:support="http://schemas.android.com/apk/res/com.android.support"
support:colorAccent="#ff0000" />)EOF");
XmlReferenceLinker linker;
- ASSERT_TRUE(linker.consume(mContext.get(), doc.get()));
+ ASSERT_TRUE(linker.Consume(context_.get(), doc.get()));
- xml::Element* viewEl = xml::findRootElement(doc.get());
- ASSERT_NE(viewEl, nullptr);
+ xml::Element* view_el = xml::FindRootElement(doc.get());
+ ASSERT_NE(view_el, nullptr);
- xml::Attribute* xmlAttr = viewEl->findAttribute(
- xml::buildPackageNamespace("com.android.support"), "colorAccent");
- ASSERT_NE(xmlAttr, nullptr);
- AAPT_ASSERT_TRUE(xmlAttr->compiledAttribute);
- AAPT_ASSERT_TRUE(xmlAttr->compiledAttribute.value().id);
- EXPECT_EQ(xmlAttr->compiledAttribute.value().id.value(),
+ xml::Attribute* xml_attr = view_el->FindAttribute(
+ xml::BuildPackageNamespace("com.android.support"), "colorAccent");
+ ASSERT_NE(xml_attr, nullptr);
+ AAPT_ASSERT_TRUE(xml_attr->compiled_attribute);
+ AAPT_ASSERT_TRUE(xml_attr->compiled_attribute.value().id);
+ EXPECT_EQ(xml_attr->compiled_attribute.value().id.value(),
ResourceId(0x7f010001));
- ASSERT_NE(valueCast<BinaryPrimitive>(xmlAttr->compiledValue.get()), nullptr);
+ ASSERT_NE(ValueCast<BinaryPrimitive>(xml_attr->compiled_value.get()),
+ nullptr);
}
TEST_F(XmlReferenceLinkerTest, LinkAutoResReference) {
std::unique_ptr<xml::XmlResource> doc =
- test::buildXmlDomForPackageName(mContext.get(), R"EOF(
+ test::BuildXmlDomForPackageName(context_.get(), R"EOF(
<View xmlns:app="http://schemas.android.com/apk/res-auto"
app:colorAccent="@app:color/red" />)EOF");
XmlReferenceLinker linker;
- ASSERT_TRUE(linker.consume(mContext.get(), doc.get()));
+ ASSERT_TRUE(linker.Consume(context_.get(), doc.get()));
- xml::Element* viewEl = xml::findRootElement(doc.get());
- ASSERT_NE(viewEl, nullptr);
+ xml::Element* view_el = xml::FindRootElement(doc.get());
+ ASSERT_NE(view_el, nullptr);
- xml::Attribute* xmlAttr =
- viewEl->findAttribute(xml::kSchemaAuto, "colorAccent");
- ASSERT_NE(xmlAttr, nullptr);
- AAPT_ASSERT_TRUE(xmlAttr->compiledAttribute);
- AAPT_ASSERT_TRUE(xmlAttr->compiledAttribute.value().id);
- EXPECT_EQ(xmlAttr->compiledAttribute.value().id.value(),
+ xml::Attribute* xml_attr =
+ view_el->FindAttribute(xml::kSchemaAuto, "colorAccent");
+ ASSERT_NE(xml_attr, nullptr);
+ AAPT_ASSERT_TRUE(xml_attr->compiled_attribute);
+ AAPT_ASSERT_TRUE(xml_attr->compiled_attribute.value().id);
+ EXPECT_EQ(xml_attr->compiled_attribute.value().id.value(),
ResourceId(0x7f010000));
- Reference* ref = valueCast<Reference>(xmlAttr->compiledValue.get());
+ Reference* ref = ValueCast<Reference>(xml_attr->compiled_value.get());
ASSERT_NE(ref, nullptr);
AAPT_ASSERT_TRUE(ref->name);
AAPT_ASSERT_TRUE(ref->id);
@@ -220,7 +223,7 @@
TEST_F(XmlReferenceLinkerTest, LinkViewWithShadowedPackageAlias) {
std::unique_ptr<xml::XmlResource> doc =
- test::buildXmlDomForPackageName(mContext.get(), R"EOF(
+ test::BuildXmlDomForPackageName(context_.get(), R"EOF(
<View xmlns:app="http://schemas.android.com/apk/res/android"
app:attr="@app:id/id">
<View xmlns:app="http://schemas.android.com/apk/res/com.app.test"
@@ -228,38 +231,39 @@
</View>)EOF");
XmlReferenceLinker linker;
- ASSERT_TRUE(linker.consume(mContext.get(), doc.get()));
+ ASSERT_TRUE(linker.Consume(context_.get(), doc.get()));
- xml::Element* viewEl = xml::findRootElement(doc.get());
- ASSERT_NE(viewEl, nullptr);
+ xml::Element* view_el = xml::FindRootElement(doc.get());
+ ASSERT_NE(view_el, nullptr);
// All attributes and references in this element should be referring to
// "android" (0x01).
- xml::Attribute* xmlAttr = viewEl->findAttribute(xml::kSchemaAndroid, "attr");
- ASSERT_NE(xmlAttr, nullptr);
- AAPT_ASSERT_TRUE(xmlAttr->compiledAttribute);
- AAPT_ASSERT_TRUE(xmlAttr->compiledAttribute.value().id);
- EXPECT_EQ(xmlAttr->compiledAttribute.value().id.value(),
+ xml::Attribute* xml_attr =
+ view_el->FindAttribute(xml::kSchemaAndroid, "attr");
+ ASSERT_NE(xml_attr, nullptr);
+ AAPT_ASSERT_TRUE(xml_attr->compiled_attribute);
+ AAPT_ASSERT_TRUE(xml_attr->compiled_attribute.value().id);
+ EXPECT_EQ(xml_attr->compiled_attribute.value().id.value(),
ResourceId(0x01010002));
- Reference* ref = valueCast<Reference>(xmlAttr->compiledValue.get());
+ Reference* ref = ValueCast<Reference>(xml_attr->compiled_value.get());
ASSERT_NE(ref, nullptr);
AAPT_ASSERT_TRUE(ref->id);
EXPECT_EQ(ref->id.value(), ResourceId(0x01030000));
- ASSERT_FALSE(viewEl->getChildElements().empty());
- viewEl = viewEl->getChildElements().front();
- ASSERT_NE(viewEl, nullptr);
+ ASSERT_FALSE(view_el->GetChildElements().empty());
+ view_el = view_el->GetChildElements().front();
+ ASSERT_NE(view_el, nullptr);
// All attributes and references in this element should be referring to
// "com.app.test" (0x7f).
- xmlAttr =
- viewEl->findAttribute(xml::buildPackageNamespace("com.app.test"), "attr");
- ASSERT_NE(xmlAttr, nullptr);
- AAPT_ASSERT_TRUE(xmlAttr->compiledAttribute);
- AAPT_ASSERT_TRUE(xmlAttr->compiledAttribute.value().id);
- EXPECT_EQ(xmlAttr->compiledAttribute.value().id.value(),
+ xml_attr = view_el->FindAttribute(xml::BuildPackageNamespace("com.app.test"),
+ "attr");
+ ASSERT_NE(xml_attr, nullptr);
+ AAPT_ASSERT_TRUE(xml_attr->compiled_attribute);
+ AAPT_ASSERT_TRUE(xml_attr->compiled_attribute.value().id);
+ EXPECT_EQ(xml_attr->compiled_attribute.value().id.value(),
ResourceId(0x7f010002));
- ref = valueCast<Reference>(xmlAttr->compiledValue.get());
+ ref = ValueCast<Reference>(xml_attr->compiled_value.get());
ASSERT_NE(ref, nullptr);
AAPT_ASSERT_TRUE(ref->id);
EXPECT_EQ(ref->id.value(), ResourceId(0x7f030000));
@@ -267,26 +271,26 @@
TEST_F(XmlReferenceLinkerTest, LinkViewWithLocalPackageAndAliasOfTheSameName) {
std::unique_ptr<xml::XmlResource> doc =
- test::buildXmlDomForPackageName(mContext.get(), R"EOF(
+ test::BuildXmlDomForPackageName(context_.get(), R"EOF(
<View xmlns:android="http://schemas.android.com/apk/res/com.app.test"
android:attr="@id/id"/>)EOF");
XmlReferenceLinker linker;
- ASSERT_TRUE(linker.consume(mContext.get(), doc.get()));
+ ASSERT_TRUE(linker.Consume(context_.get(), doc.get()));
- xml::Element* viewEl = xml::findRootElement(doc.get());
- ASSERT_NE(viewEl, nullptr);
+ xml::Element* view_el = xml::FindRootElement(doc.get());
+ ASSERT_NE(view_el, nullptr);
// All attributes and references in this element should be referring to
// "com.app.test" (0x7f).
- xml::Attribute* xmlAttr =
- viewEl->findAttribute(xml::buildPackageNamespace("com.app.test"), "attr");
- ASSERT_NE(xmlAttr, nullptr);
- AAPT_ASSERT_TRUE(xmlAttr->compiledAttribute);
- AAPT_ASSERT_TRUE(xmlAttr->compiledAttribute.value().id);
- EXPECT_EQ(xmlAttr->compiledAttribute.value().id.value(),
+ xml::Attribute* xml_attr = view_el->FindAttribute(
+ xml::BuildPackageNamespace("com.app.test"), "attr");
+ ASSERT_NE(xml_attr, nullptr);
+ AAPT_ASSERT_TRUE(xml_attr->compiled_attribute);
+ AAPT_ASSERT_TRUE(xml_attr->compiled_attribute.value().id);
+ EXPECT_EQ(xml_attr->compiled_attribute.value().id.value(),
ResourceId(0x7f010002));
- Reference* ref = valueCast<Reference>(xmlAttr->compiledValue.get());
+ Reference* ref = ValueCast<Reference>(xml_attr->compiled_value.get());
ASSERT_NE(ref, nullptr);
AAPT_ASSERT_TRUE(ref->id);
EXPECT_EQ(ref->id.value(), ResourceId(0x7f030000));