diff options
author | 2017-07-17 13:20:04 +0200 | |
---|---|---|
committer | 2017-07-17 13:43:07 +0200 | |
commit | 01ddfb7bf418b371859de62f4eab2f41ea9a4a4a (patch) | |
tree | 8b502cb8e48187dd64c11ca3eb6a91623bb9232f /src/tools/android/java/com/google/devtools/build/android/Converters.java | |
parent | a491417d4fbdd3bbb54f557e8e8f3d2f0ea5756a (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.java | 46 |
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. |