diff options
author | 2018-02-28 15:17:15 -0800 | |
---|---|---|
committer | 2018-02-28 15:18:58 -0800 | |
commit | 6e65952aea9223ee1ca998198728200ad27d2bbb (patch) | |
tree | fcd4fdb14f71c4866f4a7b8594ec44182b62e19b | |
parent | cf568dbe0111135053b7c3b299860749a44512b0 (diff) |
Add @AutoCodec to FileType and FileTypeSet.
More strictly type the arguments for creating FileTypes.
PiperOrigin-RevId: 187391336
4 files changed, 29 insertions, 16 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD index 433aacf7d6..c41711da16 100644 --- a/src/main/java/com/google/devtools/build/lib/BUILD +++ b/src/main/java/com/google/devtools/build/lib/BUILD @@ -209,6 +209,7 @@ java_library( ], deps = [ ":string_util", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//third_party:guava", "//third_party:jsr305", ], diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkFileType.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkFileType.java index 931131cc9f..9fda709fa1 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkFileType.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkFileType.java @@ -23,6 +23,7 @@ import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.EvalUtils; import com.google.devtools.build.lib.util.FileType; import com.google.devtools.build.lib.util.FileTypeSet; +import java.util.List; /** A wrapper class for FileType and FileTypeSet functionality in Skylark. */ @SkylarkModule( @@ -40,7 +41,7 @@ public class SkylarkFileType { this.fileType = fileType; } - public static SkylarkFileType of(Iterable<String> extensions) { + public static SkylarkFileType of(List<String> extensions) { return new SkylarkFileType(FileType.of(extensions)); } diff --git a/src/main/java/com/google/devtools/build/lib/util/FileType.java b/src/main/java/com/google/devtools/build/lib/util/FileType.java index e2f9eb390a..6cfead9578 100644 --- a/src/main/java/com/google/devtools/build/lib/util/FileType.java +++ b/src/main/java/com/google/devtools/build/lib/util/FileType.java @@ -19,15 +19,15 @@ import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.annotation.concurrent.Immutable; -/** - * A base class for FileType matchers. - */ +/** A base class for FileType matchers. */ @Immutable +@AutoCodec public abstract class FileType implements Predicate<String> { // A special file type public static final FileType NO_EXTENSION = @@ -53,7 +53,8 @@ public abstract class FileType implements Predicate<String> { }; } - public static FileType of(final Iterable<String> extensions) { + @AutoCodec.Instantiator + public static FileType of(final List<String> extensions) { return new FileType() { @Override public boolean apply(String path) { diff --git a/src/main/java/com/google/devtools/build/lib/util/FileTypeSet.java b/src/main/java/com/google/devtools/build/lib/util/FileTypeSet.java index 9b3b2e46fe..de0fb2c603 100644 --- a/src/main/java/com/google/devtools/build/lib/util/FileTypeSet.java +++ b/src/main/java/com/google/devtools/build/lib/util/FileTypeSet.java @@ -17,19 +17,21 @@ import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.annotation.concurrent.Immutable; -/** - * A set of FileTypes for grouped matching. - */ +/** A set of FileTypes for grouped matching. */ @Immutable +@AutoCodec public class FileTypeSet implements Predicate<String> { - private final ImmutableSet<FileType> types; + private final ImmutableSet<FileType> fileTypes; /** A set that matches all files. */ + @AutoCodec public static final FileTypeSet ANY_FILE = new FileTypeSet() { @Override @@ -49,6 +51,7 @@ public class FileTypeSet implements Predicate<String> { }; /** A predicate that matches no files. */ + @AutoCodec public static final FileTypeSet NO_FILE = new FileTypeSet(ImmutableList.of()) { @Override @@ -63,15 +66,17 @@ public class FileTypeSet implements Predicate<String> { }; private FileTypeSet() { - this.types = null; + this.fileTypes = null; } private FileTypeSet(FileType... fileTypes) { - this.types = ImmutableSet.copyOf(fileTypes); + this.fileTypes = ImmutableSet.copyOf(fileTypes); } - private FileTypeSet(Iterable<FileType> fileTypes) { - this.types = ImmutableSet.copyOf(fileTypes); + @AutoCodec.Instantiator + @VisibleForSerialization + FileTypeSet(Iterable<FileType> fileTypes) { + this.fileTypes = ImmutableSet.copyOf(fileTypes); } /** @@ -102,12 +107,12 @@ public class FileTypeSet implements Predicate<String> { /** Returns a copy of this {@link FileTypeSet} including the specified `fileTypes`. */ public FileTypeSet including(FileType... fileTypes) { - return new FileTypeSet(Iterables.concat(this.types, Arrays.asList(fileTypes))); + return new FileTypeSet(Iterables.concat(this.fileTypes, Arrays.asList(fileTypes))); } /** Returns true if the filename can be matched by any FileType in this set. */ public boolean matches(String path) { - for (FileType type : types) { + for (FileType type : fileTypes) { if (type.apply(path)) { return true; } @@ -115,6 +120,11 @@ public class FileTypeSet implements Predicate<String> { return false; } + @VisibleForSerialization + ImmutableSet<FileType> getFileTypes() { + return fileTypes; + } + /** Returns true if this predicate matches nothing. */ public boolean isNone() { return this == FileTypeSet.NO_FILE; @@ -128,7 +138,7 @@ public class FileTypeSet implements Predicate<String> { /** Returns the list of possible file extensions for this file type. Can be empty. */ public List<String> getExtensions() { List<String> extensions = new ArrayList<>(); - for (FileType type : types) { + for (FileType type : fileTypes) { extensions.addAll(type.getExtensions()); } return extensions; |