diff options
author | Izabela Orlowska <imorlowska@google.com> | 2018-03-27 14:46:52 +0100 |
---|---|---|
committer | Izabela Orlowska <imorlowska@google.com> | 2018-03-27 18:29:36 +0100 |
commit | c7ac3a1f4dbdb79171e274661d1521c704f1e063 (patch) | |
tree | 0b1f1649d52455f4e5609d48e714ed9c35cce89d /tools/aapt2/cmd/Compile.cpp | |
parent | 6d976f82b79c856051a80799cc3d547408a9c868 (diff) |
AAPT2: add flag for forcing visibility level
Test: manual
Bug: 72735798
Change-Id: I29480e66384dd2da27e17ab454ac1fe8a033ee3e
Diffstat (limited to 'tools/aapt2/cmd/Compile.cpp')
-rw-r--r-- | tools/aapt2/cmd/Compile.cpp | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/tools/aapt2/cmd/Compile.cpp b/tools/aapt2/cmd/Compile.cpp index 06e84ef9c525..6ba9d441d186 100644 --- a/tools/aapt2/cmd/Compile.cpp +++ b/tools/aapt2/cmd/Compile.cpp @@ -114,6 +114,7 @@ struct CompileOptions { std::string output_path; Maybe<std::string> res_dir; Maybe<std::string> generate_text_symbols_path; + Maybe<Visibility::Level> visibility; bool pseudolocalize = false; bool no_png_crunch = false; bool legacy_mode = false; @@ -216,6 +217,10 @@ static bool CompileTable(IAaptContext* context, const CompileOptions& options, // If the filename includes donottranslate, then the default translatable is false. parser_options.translatable = path_data.name.find("donottranslate") == std::string::npos; + // If visibility was forced, we need to use it when creating a new resource and also error if + // we try to parse the <public>, <public-group>, <java-symbol> or <symbol> tags. + parser_options.visibility = options.visibility; + ResourceParser res_parser(context->GetDiagnostics(), &table, path_data.source, path_data.config, parser_options); if (!res_parser.Parse(&xml_parser)) { @@ -309,6 +314,8 @@ static bool CompileTable(IAaptContext* context, const CompileOptions& options, if (!entry->values.empty()) { auto styleable = static_cast<const Styleable*>(entry->values.front()->value.get()); for (const auto& attr : styleable->entries) { + // The visibility of the children under the styleable does not matter as they are + // nested under their parent and use its visibility. r_txt_printer.Print("default int styleable "); r_txt_printer.Print(entry->name); r_txt_printer.Print("_"); @@ -694,6 +701,7 @@ int Compile(const std::vector<StringPiece>& args, IDiagnostics* diagnostics) { CompileOptions options; bool verbose = false; + Maybe<std::string> visibility; Flags flags = Flags() .RequiredFlag("-o", "Output path", &options.output_path) @@ -709,13 +717,32 @@ int Compile(const std::vector<StringPiece>& args, IDiagnostics* diagnostics) { .OptionalSwitch("--no-crunch", "Disables PNG processing", &options.no_png_crunch) .OptionalSwitch("--legacy", "Treat errors that used to be valid in AAPT as warnings", &options.legacy_mode) - .OptionalSwitch("-v", "Enables verbose logging", &verbose); + .OptionalSwitch("-v", "Enables verbose logging", &verbose) + .OptionalFlag("--visibility", + "Sets the visibility of the compiled resources to the specified\n" + "level. Accepted levels: public, private, default", + &visibility); if (!flags.Parse("aapt2 compile", args, &std::cerr)) { return 1; } context.SetVerbose(verbose); + if (visibility) { + if (visibility.value() == "public") { + options.visibility = Visibility::Level::kPublic; + } else if (visibility.value() == "private") { + options.visibility = Visibility::Level::kPrivate; + } else if (visibility.value() == "default") { + options.visibility = Visibility::Level::kUndefined; + } else { + context.GetDiagnostics()->Error( + DiagMessage() << "Unrecognized visibility level passes to --visibility: '" + << visibility.value() << "'. Accepted levels: public, private, default"); + return 1; + } + } + std::unique_ptr<IArchiveWriter> archive_writer; std::vector<ResourcePathData> input_data; |