diff options
Diffstat (limited to 'tools/aapt2/java/JavaClassGenerator.cpp')
| -rw-r--r-- | tools/aapt2/java/JavaClassGenerator.cpp | 22 | 
1 files changed, 17 insertions, 5 deletions
| diff --git a/tools/aapt2/java/JavaClassGenerator.cpp b/tools/aapt2/java/JavaClassGenerator.cpp index 6b07b1e96261..d1a70a75a44e 100644 --- a/tools/aapt2/java/JavaClassGenerator.cpp +++ b/tools/aapt2/java/JavaClassGenerator.cpp @@ -256,9 +256,20 @@ void JavaClassGenerator::ProcessStyleable(const ResourceNameRef& name, const Res      styleable_attr.field_name =          TransformNestedAttr(attr.name.value(), array_field_name, package_name_to_generate); +    Reference ref = attr; +    if (attr.name.value().package.empty()) { + +      // If the resource does not have a package name, set the package to the unmangled package name +      // of the styleable declaration because attributes without package names would have been +      // declared in the same package as the styleable. +      ref.name = ResourceName(package_name_to_generate, ref.name.value().type, +                              ref.name.value().entry); +    } +      // Look up the symbol so that we can write out in the comments what are possible legal values      // for this attribute. -    const SymbolTable::Symbol* symbol = context_->GetExternalSymbols()->FindByReference(attr); +    const SymbolTable::Symbol* symbol = context_->GetExternalSymbols()->FindByReference(ref); +      if (symbol && symbol->attribute) {        // Copy the symbol data structure because the returned instance can be destroyed.        styleable_attr.symbol = *symbol; @@ -303,7 +314,7 @@ void JavaClassGenerator::ProcessStyleable(const ResourceNameRef& name, const Res        const ResourceName& attr_name = entry.attr_ref->name.value();        styleable_comment << "<tr><td><code>{@link #" << entry.field_name << " "                          << (!attr_name.package.empty() ? attr_name.package -                                                       : context_->GetCompilationPackage()) +                                                       : package_name_to_generate)                          << ":" << attr_name.entry << "}</code></td>";        // Only use the comment up until the first '.'. This is to stay compatible with @@ -347,7 +358,9 @@ void JavaClassGenerator::ProcessStyleable(const ResourceNameRef& name, const Res    }    // Add the Styleable array to the Styleable class. -  out_class_def->AddMember(std::move(array_def)); +  if (out_class_def != nullptr) { +    out_class_def->AddMember(std::move(array_def)); +  }    // Now we emit the indices into the array.    for (size_t i = 0; i < attr_count; i++) { @@ -372,7 +385,7 @@ void JavaClassGenerator::ProcessStyleable(const ResourceNameRef& name, const Res        StringPiece package_name = attr_name.package;        if (package_name.empty()) { -        package_name = context_->GetCompilationPackage(); +        package_name = package_name_to_generate;        }        std::unique_ptr<IntMember> index_member = @@ -578,7 +591,6 @@ bool JavaClassGenerator::Generate(const StringPiece& package_name_to_generate,    if (out_r_txt != nullptr) {      r_txt_printer = util::make_unique<Printer>(out_r_txt);    } -    // Generate an onResourcesLoaded() callback if requested.    if (out != nullptr && options_.rewrite_callback_options) {      rewrite_method = | 
