aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar mjhalupka <mjhalupka@google.com>2018-02-28 15:17:15 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-28 15:18:58 -0800
commit6e65952aea9223ee1ca998198728200ad27d2bbb (patch)
treefcd4fdb14f71c4866f4a7b8594ec44182b62e19b
parentcf568dbe0111135053b7c3b299860749a44512b0 (diff)
Add @AutoCodec to FileType and FileTypeSet.
More strictly type the arguments for creating FileTypes. PiperOrigin-RevId: 187391336
-rw-r--r--src/main/java/com/google/devtools/build/lib/BUILD1
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkFileType.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/util/FileType.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/util/FileTypeSet.java32
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;