aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tools/android/java/com/google/devtools/build
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/android/java/com/google/devtools/build')
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/Converters.java46
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/LibraryRClassGeneratorAction.java10
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/ResourceShrinkerAction.java13
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/ideinfo/JarFilter.java61
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/ideinfo/PackageParser.java10
5 files changed, 76 insertions, 64 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/Converters.java b/src/tools/android/java/com/google/devtools/build/android/Converters.java
index 9475449b7d..63f59801aa 100644
--- a/src/tools/android/java/com/google/devtools/build/android/Converters.java
+++ b/src/tools/android/java/com/google/devtools/build/android/Converters.java
@@ -22,11 +22,14 @@ import com.google.common.collect.ImmutableMap;
import com.google.devtools.common.options.Converter;
import com.google.devtools.common.options.EnumConverter;
import com.google.devtools.common.options.OptionsParsingException;
+import java.io.File;
import java.lang.reflect.ParameterizedType;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.InvalidPathException;
import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -283,6 +286,49 @@ public final class Converters {
}
}
+ /**
+ * Validating converter for a list of Paths.
+ * A Path is considered valid if it resolves to a file.
+ */
+ public static class PathListConverter implements Converter<List<Path>> {
+
+ private final PathConverter baseConverter;
+
+ public PathListConverter() {
+ this(false);
+ }
+
+ protected PathListConverter(boolean mustExist) {
+ baseConverter = new PathConverter(mustExist);
+ }
+
+ @Override
+ public List<Path> convert(String input) throws OptionsParsingException {
+ List<Path> list = new ArrayList<>();
+ for (String piece : input.split(File.pathSeparator)) {
+ if (!piece.isEmpty()) {
+ list.add(baseConverter.convert(piece));
+ }
+ }
+ return Collections.unmodifiableList(list);
+ }
+
+ @Override
+ public String getTypeDescription() {
+ return "a colon-separated list of paths";
+ }
+ }
+
+ /**
+ * Validating converter for a list of Paths. The list is considered valid if all Paths resolve to
+ * a file that exists.
+ */
+ public static class ExistingPathListConverter extends PathListConverter {
+ public ExistingPathListConverter() {
+ super(true);
+ }
+ }
+
// Commas that are not escaped by a backslash.
private static final String UNESCAPED_COMMA_REGEX = "(?<!\\\\)\\,";
// Colons that are not escaped by a backslash.
diff --git a/src/tools/android/java/com/google/devtools/build/android/LibraryRClassGeneratorAction.java b/src/tools/android/java/com/google/devtools/build/android/LibraryRClassGeneratorAction.java
index a7555879af..935454729d 100644
--- a/src/tools/android/java/com/google/devtools/build/android/LibraryRClassGeneratorAction.java
+++ b/src/tools/android/java/com/google/devtools/build/android/LibraryRClassGeneratorAction.java
@@ -15,10 +15,10 @@ package com.google.devtools.build.android;
import com.google.common.base.Stopwatch;
import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableList;
import com.google.devtools.build.android.AndroidResourceMerger.MergingException;
import com.google.devtools.build.android.AndroidResourceProcessor.AaptConfigOptions;
import com.google.devtools.build.android.Converters.PathConverter;
+import com.google.devtools.build.android.Converters.PathListConverter;
import com.google.devtools.common.options.Option;
import com.google.devtools.common.options.OptionDocumentationCategory;
import com.google.devtools.common.options.OptionsBase;
@@ -68,10 +68,9 @@ public class LibraryRClassGeneratorAction {
public String packageForR;
@Option(
- name = "symbol",
- allowMultiple = true,
+ name = "symbols",
defaultValue = "",
- converter = PathConverter.class,
+ converter = PathListConverter.class,
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
category = "config",
@@ -88,9 +87,6 @@ public class LibraryRClassGeneratorAction {
optionsParser.parseAndExitUponError(args);
AaptConfigOptions aaptConfigOptions = optionsParser.getOptions(AaptConfigOptions.class);
Options options = optionsParser.getOptions(Options.class);
- if (options.symbols == null) {
- options.symbols = ImmutableList.of();
- }
logger.fine(
String.format("Option parsing finished at %sms", timer.elapsed(TimeUnit.MILLISECONDS)));
try (ScopedTemporaryDirectory scopedTmp =
diff --git a/src/tools/android/java/com/google/devtools/build/android/ResourceShrinkerAction.java b/src/tools/android/java/com/google/devtools/build/android/ResourceShrinkerAction.java
index 87854b4f7f..7abbb0c8b3 100644
--- a/src/tools/android/java/com/google/devtools/build/android/ResourceShrinkerAction.java
+++ b/src/tools/android/java/com/google/devtools/build/android/ResourceShrinkerAction.java
@@ -26,6 +26,7 @@ import com.google.devtools.build.android.AndroidResourceProcessor.AaptConfigOpti
import com.google.devtools.build.android.AndroidResourceProcessor.FlagAaptOptions;
import com.google.devtools.build.android.Converters.ExistingPathConverter;
import com.google.devtools.build.android.Converters.PathConverter;
+import com.google.devtools.build.android.Converters.PathListConverter;
import com.google.devtools.build.android.Converters.VariantTypeConverter;
import com.google.devtools.common.options.Converters.CommaSeparatedOptionListConverter;
import com.google.devtools.common.options.Option;
@@ -62,7 +63,7 @@ import org.xml.sax.SAXException;
* --resources path to processed resources zip
* --rTxt path to processed resources R.txt
* --primaryManifest path to processed resources AndroidManifest.xml
- * --dependencyManifest path to dependency library manifest (repeated flag)
+ * --dependencyManifests paths to dependency library manifests
* --shrunkResourceApk path to write shrunk ap_
* --shrunkResources path to write shrunk resources zip
* </pre>
@@ -129,14 +130,13 @@ public class ResourceShrinkerAction {
public Path primaryManifest;
@Option(
- name = "dependencyManifest",
- allowMultiple = true,
+ name = "dependencyManifests",
defaultValue = "",
category = "input",
- converter = PathConverter.class,
+ converter = PathListConverter.class,
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
- help = "Paths to the manifests of the dependencies. Specify one path per flag."
+ help = "A list of paths to the manifests of the dependencies."
)
public List<Path> dependencyManifests;
@@ -236,9 +236,6 @@ public class ResourceShrinkerAction {
optionsParser.parseAndExitUponError(args);
aaptConfigOptions = optionsParser.getOptions(AaptConfigOptions.class);
options = optionsParser.getOptions(Options.class);
- if (options.dependencyManifests == null) {
- options.dependencyManifests = ImmutableList.of();
- }
AndroidResourceProcessor resourceProcessor = new AndroidResourceProcessor(stdLogger);
// Setup temporary working directories.
diff --git a/src/tools/android/java/com/google/devtools/build/android/ideinfo/JarFilter.java b/src/tools/android/java/com/google/devtools/build/android/ideinfo/JarFilter.java
index 976649fda2..354fddfcf1 100644
--- a/src/tools/android/java/com/google/devtools/build/android/ideinfo/JarFilter.java
+++ b/src/tools/android/java/com/google/devtools/build/android/ideinfo/JarFilter.java
@@ -27,6 +27,7 @@ import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.devtools.build.android.Converters.PathConverter;
+import com.google.devtools.build.android.Converters.PathListConverter;
import com.google.devtools.build.lib.ideinfo.androidstudio.PackageManifestOuterClass.ArtifactLocation;
import com.google.devtools.build.lib.ideinfo.androidstudio.PackageManifestOuterClass.JavaSourcePackage;
import com.google.devtools.build.lib.ideinfo.androidstudio.PackageManifestOuterClass.PackageManifest;
@@ -64,58 +65,46 @@ public final class JarFilter {
/** The options for a {@JarFilter} action. */
public static final class JarFilterOptions extends OptionsBase {
@Option(
- name = "filter_jar",
- allowMultiple = true,
+ name = "filter_jars",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
defaultValue = "null",
- converter = PathConverter.class,
+ converter = PathListConverter.class,
category = "input",
- help =
- "Paths to target output jars to filter for generated sources. You may use this flag "
- + "multiple times, specify each path with a separate instance of the flag."
+ help = "A list of the paths to target output jars to filter for generated sources."
)
public List<Path> filterJars;
@Option(
- name = "filter_source_jar",
- allowMultiple = true,
+ name = "filter_source_jars",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
defaultValue = "null",
- converter = PathConverter.class,
+ converter = PathListConverter.class,
category = "input",
- help =
- "Paths to target output source jars to filter for generated sources. You may use this "
- + "flag multiple times, specify each path with a separate instance of the flag."
+ help = "A list of the paths to target output source jars to filter for generated sources."
)
public List<Path> filterSourceJars;
@Option(
- name = "keep_java_file",
- allowMultiple = true,
+ name = "keep_java_files",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
defaultValue = "null",
- converter = PathConverter.class,
+ converter = PathListConverter.class,
category = "input",
- help =
- "Path of target input java files to keep. You may use this flag multiple times, "
- + "specify each path with a separate instance of the flag."
+ help = "A list of target input java files to keep."
)
public List<Path> keepJavaFiles;
@Option(
- name = "keep_source_jar",
- allowMultiple = true,
+ name = "keep_source_jars",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
defaultValue = "null",
- converter = PathConverter.class,
+ converter = PathListConverter.class,
category = "input",
- help =
- "Path of target input .srcjar files to keep. You may use this flag multiple times, "
- + "specify each path with a separate instance of the flag."
+ help = "A list of target input .srcjar files to keep."
)
public List<Path> keepSourceJars;
@@ -146,12 +135,11 @@ public final class JarFilter {
@Deprecated
@Option(
- name = "jar",
- allowMultiple = true,
+ name = "jars",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
defaultValue = "null",
- converter = PathConverter.class,
+ converter = PathListConverter.class,
category = "input",
help = "A list of the paths to jars to filter for generated sources."
)
@@ -247,25 +235,10 @@ public final class JarFilter {
args = parseParamFileIfUsed(args);
OptionsParser optionsParser = OptionsParser.newOptionsParser(JarFilterOptions.class);
optionsParser.parseAndExitUponError(args);
- JarFilterOptions options = optionsParser.getOptions(JarFilterOptions.class);
- if (options.filterJars == null) {
- options.filterJars = ImmutableList.of();
- }
- if (options.filterSourceJars == null) {
- options.filterSourceJars = ImmutableList.of();
- }
- if (options.keepJavaFiles == null) {
- options.keepJavaFiles = ImmutableList.of();
- }
- if (options.keepSourceJars == null) {
- options.keepSourceJars = ImmutableList.of();
- }
- if (options.jars == null) {
- options.jars = ImmutableList.of();
- }
// Migrate options from v1 jar filter
- if (options.filterJars.isEmpty() && options.jars != null) {
+ JarFilterOptions options = optionsParser.getOptions(JarFilterOptions.class);
+ if (options.filterJars == null && options.jars != null) {
options.filterJars = options.jars;
}
if (options.filteredJar == null && options.output != null) {
diff --git a/src/tools/android/java/com/google/devtools/build/android/ideinfo/PackageParser.java b/src/tools/android/java/com/google/devtools/build/android/ideinfo/PackageParser.java
index 46b4702916..a248d4587a 100644
--- a/src/tools/android/java/com/google/devtools/build/android/ideinfo/PackageParser.java
+++ b/src/tools/android/java/com/google/devtools/build/android/ideinfo/PackageParser.java
@@ -22,6 +22,7 @@ import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.devtools.build.android.Converters.PathConverter;
+import com.google.devtools.build.android.Converters.PathListConverter;
import com.google.devtools.build.lib.ideinfo.androidstudio.PackageManifestOuterClass.ArtifactLocation;
import com.google.devtools.build.lib.ideinfo.androidstudio.PackageManifestOuterClass.JavaSourcePackage;
import com.google.devtools.build.lib.ideinfo.androidstudio.PackageManifestOuterClass.PackageManifest;
@@ -80,16 +81,15 @@ public class PackageParser {
public Path outputManifest;
@Option(
- name = "sources_execution_path",
- allowMultiple = true,
+ name = "sources_execution_paths",
defaultValue = "null",
- converter = PathConverter.class,
+ converter = PathListConverter.class,
category = "input",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
effectTags = {OptionEffectTag.UNKNOWN},
help =
- "The execution paths of the java source files. You may use this flag multiple times, "
- + "each instance should specify one path."
+ "The execution paths of the java source files. The expected format is a "
+ + "colon-separated list."
)
public List<Path> sourcesExecutionPaths;
}