aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tools/android/java/com/google/devtools/build/android/Converters.java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-07-17 13:20:04 +0200
committerGravatar Klaus Aehlig <aehlig@google.com>2017-07-17 13:43:07 +0200
commit01ddfb7bf418b371859de62f4eab2f41ea9a4a4a (patch)
tree8b502cb8e48187dd64c11ca3eb6a91623bb9232f /src/tools/android/java/com/google/devtools/build/android/Converters.java
parenta491417d4fbdd3bbb54f557e8e8f3d2f0ea5756a (diff)
Internal change
PiperOrigin-RevId: 162194755
Diffstat (limited to 'src/tools/android/java/com/google/devtools/build/android/Converters.java')
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/Converters.java46
1 files changed, 46 insertions, 0 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.