Only keep necessary constructor for custom view nodes
This expands the Context+AttributeSet constructor specificity from only work on <view class=> nodes to <my.Type> nodes.
Bug: 37123156
Test: make aapt2_tests
Change-Id: I8fb950731383f86bee225333bda27baf5a7a34c5
diff --git a/tools/aapt2/java/ProguardRules.cpp b/tools/aapt2/java/ProguardRules.cpp
index 63f9dd3..d40795a 100644
--- a/tools/aapt2/java/ProguardRules.cpp
+++ b/tools/aapt2/java/ProguardRules.cpp
@@ -39,7 +39,11 @@
public:
using xml::Visitor::Visit;
- BaseVisitor(const ResourceFile& file, KeepSet* keep_set) : file_(file), keep_set_(keep_set) {
+ BaseVisitor(const ResourceFile& file, KeepSet* keep_set) : BaseVisitor(file, keep_set, "...") {
+ }
+
+ BaseVisitor(const ResourceFile& file, KeepSet* keep_set, const std::string& ctor_signature)
+ : file_(file), keep_set_(keep_set), ctor_signature_(ctor_signature) {
}
void Visit(xml::Element* node) override {
@@ -50,11 +54,11 @@
// This is a custom view, let's figure out the class name from this.
std::string package = maybe_package.value().package + "." + node->name;
if (util::IsJavaClassName(package)) {
- AddClass(node->line_number, package, "...");
+ AddClass(node->line_number, package, ctor_signature_);
}
}
} else if (util::IsJavaClassName(node->name)) {
- AddClass(node->line_number, node->name, "...");
+ AddClass(node->line_number, node->name, ctor_signature_);
}
for (const auto& child : node->children) {
@@ -74,6 +78,7 @@
protected:
ResourceFile file_;
KeepSet* keep_set_;
+ std::string ctor_signature_;
virtual void AddClass(size_t line_number, const std::string& class_name,
const std::string& ctor_signature) {
@@ -104,7 +109,8 @@
class LayoutVisitor : public BaseVisitor {
public:
- LayoutVisitor(const ResourceFile& file, KeepSet* keep_set) : BaseVisitor(file, keep_set) {
+ LayoutVisitor(const ResourceFile& file, KeepSet* keep_set)
+ : BaseVisitor(file, keep_set, "android.content.Context, android.util.AttributeSet") {
}
void Visit(xml::Element* node) override {