aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/Root.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkExecutionResult.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkPath.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/Attribute.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/SkylarkFileType.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/AppleToolchain.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/Platform.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoSkylarkCommon.java3
-rw-r--r--src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContextTest.java7
-rw-r--r--src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java7
19 files changed, 55 insertions, 28 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/Root.java b/src/main/java/com/google/devtools/build/lib/actions/Root.java
index 859a8b6344..dfbfa7425b 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/Root.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/Root.java
@@ -16,6 +16,7 @@ package com.google.devtools.build.lib.actions;
import com.google.common.annotations.VisibleForTesting;
import com.google.devtools.build.lib.cmdline.RepositoryName;
+import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -46,6 +47,7 @@ import javax.annotation.Nullable;
category = SkylarkModuleCategory.BUILTIN,
doc = "A root for files. The roots are the directories containing files, and they are mapped "
+ "together into a single directory tree to form the execution environment.")
+@Immutable
public final class Root implements Comparable<Root>, Serializable {
/**
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkExecutionResult.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkExecutionResult.java
index 1d5f70c088..5f0bffd54c 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkExecutionResult.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkExecutionResult.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.bazel.repository.skylark;
import com.google.common.collect.Maps;
+import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.shell.BadExitStatusException;
import com.google.devtools.build.lib.shell.Command;
@@ -25,7 +26,6 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.util.Preconditions;
-
import com.google.devtools.build.lib.util.io.DelegatingOutErr;
import com.google.devtools.build.lib.util.io.OutErr;
import com.google.devtools.build.lib.util.io.RecordingOutErr;
@@ -47,6 +47,7 @@ import java.util.Map;
+ " output stream content, the standard error stream content and the execution return"
+ " code."
)
+@Immutable
final class SkylarkExecutionResult {
private final int returnCode;
private final String stdout;
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkPath.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkPath.java
index 3491b8cdab..72505fb217 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkPath.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkPath.java
@@ -21,7 +21,6 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
import com.google.devtools.build.lib.vfs.Path;
import java.io.IOException;
-import java.util.List;
/**
* A Path object to be used into Skylark remote repository.
@@ -70,7 +69,7 @@ final class SkylarkPath {
structField = false,
doc = "The list of entries in the directory denoted by this path."
)
- public List<SkylarkPath> readdir() throws IOException {
+ public ImmutableList<SkylarkPath> readdir() throws IOException {
ImmutableList.Builder<SkylarkPath> builder = ImmutableList.builder();
for (Path p : path.getDirectoryEntries()) {
builder.add(new SkylarkPath(p));
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java
index 7e382b2c0a..3ebfc4bb59 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java
@@ -417,9 +417,10 @@ public class SkylarkRepositoryContext {
name = "which",
doc =
"Returns the path of the corresponding program or None "
- + "if there is no such program in the path"
+ + "if there is no such program in the path",
+ allowReturnNones = true
)
- public Object which(String program) throws EvalException {
+ public SkylarkPath which(String program) throws EvalException {
if (program.contains("/") || program.contains("\\")) {
throw new EvalException(
Location.BUILTIN,
@@ -441,7 +442,7 @@ public class SkylarkRepositoryContext {
}
}
}
- return Runtime.NONE;
+ return null;
}
@SkylarkCallable(
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
index ca9547fb87..0b1b86d867 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
@@ -29,6 +29,7 @@ import com.google.common.collect.Ordering;
import com.google.common.collect.Sets;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.concurrent.ThreadSafety;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.syntax.ClassObject;
@@ -167,6 +168,7 @@ public final class Attribute implements Comparable<Attribute> {
* the symbol isn't available here.
*/
// TODO(bazel-team): Serializability constraints?
+ @ThreadSafety.Immutable
public interface SplitTransition<T> extends Transition {
/**
* Return the list of {@code BuildOptions} after splitting; empty if not applicable.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkFileType.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkFileType.java
index 287308ce8e..a32c6bc6c5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkFileType.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkFileType.java
@@ -24,7 +24,6 @@ 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(
@@ -60,7 +59,7 @@ public class SkylarkFileType {
// Skylark interface framework. If there's a dynamic type error on a non-Artifact element, the
// error will also be handled by the Skylark interface framework.
@SuppressWarnings("unchecked")
- public List<Artifact> filter(Object filesUnchecked) throws EvalException {
+ public ImmutableList<Artifact> filter(Object filesUnchecked) throws EvalException {
return ImmutableList.copyOf(
FileType.filter(
(Iterable<Artifact>) EvalUtils.toIterableStrict(filesUnchecked, null),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java
index de8d3de361..2a32c96f42 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java
@@ -479,7 +479,7 @@ public final class SkylarkRuleContext implements SkylarkValue {
category = SkylarkModuleCategory.NONE,
doc = "Information about attributes of a rule an aspect is applied to."
)
- private static class SkylarkRuleAttributesCollection {
+ private static class SkylarkRuleAttributesCollection implements SkylarkValue {
private final SkylarkRuleContext skylarkRuleContext;
private final SkylarkClassObject attrObject;
private final SkylarkClassObject executableObject;
@@ -557,6 +557,17 @@ public final class SkylarkRuleContext implements SkylarkValue {
public ImmutableMap<Artifact, FilesToRunProvider> getExecutableRunfilesMap() {
return executableRunfilesMap;
}
+
+ @Override
+ public boolean isImmutable() {
+ return skylarkRuleContext.isImmutable();
+ }
+
+ @Override
+ public void write(Appendable buffer, char quotationMark) {
+ Printer.append(buffer, "rule_collection:");
+ skylarkRuleContext.write(buffer, quotationMark);
+ }
}
private void addOutput(HashMap<String, Object> outputsBuilder, String key, Object value)
@@ -621,7 +632,7 @@ public final class SkylarkRuleContext implements SkylarkValue {
+ "<br/><br/>"
+ "This is intended to help write tests for rule-implementation helper functions, which "
+ "may take in a <code>ctx</code> object and create actions on it.")
- public Object createdActions() throws EvalException {
+ public SkylarkValue createdActions() throws EvalException {
checkMutable("created_actions");
if (ruleContext.getRule().getRuleClassObject().isSkylarkTestable()) {
return ActionsProvider.create(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java
index 85d24500eb..4ca0f5beb1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java
@@ -21,6 +21,7 @@ import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
+import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.rules.SkylarkApiProvider;
import com.google.devtools.build.lib.rules.android.ResourceContainer.ResourceType;
import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
@@ -42,6 +43,7 @@ import javax.annotation.Nullable;
"Provides access to information about Android rules. Every Android-related target provides "
+ "this struct, accessible as a 'android' field on a Target struct."
)
+@Immutable
public class AndroidSkylarkApiProvider extends SkylarkApiProvider {
/** The name of the field in Skylark used to access this class. */
public static final String NAME = "android";
@@ -177,6 +179,7 @@ public class AndroidSkylarkApiProvider extends SkylarkApiProvider {
category = SkylarkModuleCategory.NONE,
doc = "Provides access to information about Android rules."
)
+ @Immutable
public class IdlInfo {
@SkylarkCallable(
name = "import_root",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
index fb42de007e..f588ff50e6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
@@ -22,6 +22,7 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration.DefaultL
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.LabelConverter;
import com.google.devtools.build.lib.analysis.config.FragmentOptions;
import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.rules.apple.AppleConfiguration.ConfigurationDistinguisher;
import com.google.devtools.build.lib.rules.apple.Platform.PlatformType;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
@@ -348,6 +349,7 @@ public class AppleCommandLineOptions extends FragmentOptions {
"Apple Bitcode mode for compilation steps. Possible values are \"none\", "
+ "\"embedded\", and \"embedded_markers\""
)
+ @Immutable
public enum AppleBitcodeMode {
/** Do not compile bitcode. */
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
index 183f5a9a50..36c0b903a2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
@@ -249,7 +249,7 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
* their corresponding values.
*/
@SkylarkCallable(name = "target_apple_env")
- public Map<String, String> getTargetAppleEnvironment(Platform platform) {
+ public ImmutableMap<String, String> getTargetAppleEnvironment(Platform platform) {
ImmutableMap.Builder<String, String> mapBuilder = ImmutableMap.builder();
mapBuilder.putAll(appleTargetPlatformEnv(platform));
return mapBuilder.build();
@@ -267,7 +267,7 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
+ "build on an apple host system. These environment variables are needed by the apple "
+ "toolchain. Keys are variable names and values are their corresponding values."
)
- public Map<String, String> getAppleHostSystemEnv() {
+ public ImmutableMap<String, String> getAppleHostSystemEnv() {
DottedVersion xcodeVersion = getXcodeVersion();
if (xcodeVersion != null) {
return getXcodeVersionEnv(xcodeVersion);
@@ -281,7 +281,7 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
* a version of xcode to be explicitly declared. Keys are variable names and values are their
* corresponding values.
*/
- public Map<String, String> getXcodeVersionEnv(DottedVersion xcodeVersion) {
+ public ImmutableMap<String, String> getXcodeVersionEnv(DottedVersion xcodeVersion) {
return ImmutableMap.of(AppleConfiguration.XCODE_VERSION_ENV_NAME, xcodeVersion.toString());
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleToolchain.java
index ceb91debed..30cbb362d1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleToolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleToolchain.java
@@ -44,6 +44,7 @@ import com.google.devtools.build.xcode.xcodegen.proto.XcodeGenProtos.XcodeprojBu
name = "apple_toolchain",
doc = "Utilities for resolving items from the Apple toolchain."
)
+@Immutable
public class AppleToolchain {
// These next two strings are shared secrets with the xcrunwrapper.sh to allow
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java b/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java
index ac5e80fd76..9bdb5a8649 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/DottedVersion.java
@@ -20,6 +20,7 @@ import com.google.common.base.Strings;
import com.google.common.collect.ComparisonChain;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Ordering;
+import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -67,9 +68,10 @@ import java.util.regex.Pattern;
name = "DottedVersion",
category = SkylarkModuleCategory.NONE,
doc =
- "A value representing a version with multiple components, seperated by periods, such as "
+ "A value representing a version with multiple components, separated by periods, such as "
+ "1.2.3.4."
)
+@Immutable
public final class DottedVersion implements Comparable<DottedVersion> {
private static final Splitter DOT_SPLITTER = Splitter.on('.');
private static final Pattern COMPONENT_PATTERN = Pattern.compile("(\\d+)(?:([a-z]+)(\\d*))?");
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/Platform.java b/src/main/java/com/google/devtools/build/lib/rules/apple/Platform.java
index b5836ae270..0f1db252c5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/Platform.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/Platform.java
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.rules.apple;
import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.ClassObjectConstructor;
import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
@@ -32,6 +33,7 @@ import javax.annotation.Nullable;
category = SkylarkModuleCategory.NONE,
doc = "Distinguishes between various apple platforms."
)
+@Immutable
public enum Platform {
IOS_DEVICE("ios_device", "iPhoneOS", PlatformType.IOS, true),
@@ -202,6 +204,7 @@ public enum Platform {
category = SkylarkModuleCategory.NONE,
doc = "Describes Apple platform \"type\", such as iOS, tvOS, macOS etc."
)
+ @Immutable
public enum PlatformType {
IOS("ios"),
WATCHOS("watchos"),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
index 843a72c932..54e8d6457c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
@@ -381,7 +381,7 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
private final PathFragment sysroot;
private final PathFragment runtimeSysroot;
- private final List<PathFragment> builtInIncludeDirectories;
+ private final ImmutableList<PathFragment> builtInIncludeDirectories;
private final Map<String, PathFragment> toolPaths;
private final PathFragment ldExecutable;
@@ -1433,7 +1433,7 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
doc = "Built-in system include paths for the toolchain compiler. All paths in this list"
+ " should be relative to the exec directory. They may be absolute if they are also installed"
+ " on the remote build nodes or for local compilation.")
- public List<PathFragment> getBuiltInIncludeDirectories() {
+ public ImmutableList<PathFragment> getBuiltInIncludeDirectories() {
return builtInIncludeDirectories;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java
index c5fc21b21e..7c3c11e871 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java
@@ -106,17 +106,17 @@ public final class JavaRuleOutputJarsProvider implements TransitiveInfoProvider
}
}
- final Iterable<OutputJar> outputJars;
+ final ImmutableList<OutputJar> outputJars;
@Nullable final Artifact jdeps;
- private JavaRuleOutputJarsProvider(Iterable<OutputJar> outputJars,
+ private JavaRuleOutputJarsProvider(ImmutableList<OutputJar> outputJars,
@Nullable Artifact jdeps) {
this.outputJars = outputJars;
this.jdeps = jdeps;
}
@SkylarkCallable(name = "jars", doc = "A list of jars the rule outputs.", structField = true)
- public Iterable<OutputJar> getOutputJars() {
+ public ImmutableList<OutputJar> getOutputJars() {
return outputJars;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
index 99bc20e7d7..774907a61e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java
@@ -254,7 +254,7 @@ public class JavaSkylarkCommon {
@Param(name = "java_toolchain_attr", positional = false, named = true, type = String.class)
}
)
- public static List<String> getDefaultJavacOpts(
+ public static ImmutableList<String> getDefaultJavacOpts(
SkylarkRuleContext skylarkRuleContext, String javaToolchainAttr) throws EvalException {
RuleContext ruleContext = skylarkRuleContext.getRuleContext();
ConfiguredTarget javaToolchainConfigTarget =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoSkylarkCommon.java
index f4cbfb9b5e..710218f164 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoSkylarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoSkylarkCommon.java
@@ -33,7 +33,6 @@ import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.syntax.EvalException;
-import java.util.List;
/**
* A class that exposes Java common methods for proto compilation.
@@ -137,7 +136,7 @@ public class JavaProtoSkylarkCommon {
}
)
// TODO(elenairina): Consider a nicer way of returning this, taking in a JavaToolchainProvider.
- public static List<String> getJavacOpts(
+ public static ImmutableList<String> getJavacOpts(
SkylarkRuleContext skylarkRuleContext, String javaToolchainAttr) throws EvalException {
ConfiguredTarget javaToolchainConfigTarget =
(ConfiguredTarget) checkNotNull(skylarkRuleContext.getAttr().getValue(javaToolchainAttr));
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContextTest.java b/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContextTest.java
index 58a37331b4..4a7c7262c2 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContextTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContextTest.java
@@ -32,7 +32,6 @@ import com.google.devtools.build.lib.syntax.Argument.Passed;
import com.google.devtools.build.lib.syntax.BuiltinFunction;
import com.google.devtools.build.lib.syntax.FuncallExpression;
import com.google.devtools.build.lib.syntax.Identifier;
-import com.google.devtools.build.lib.syntax.Runtime;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.testutil.Scratch;
import com.google.devtools.build.lib.vfs.Path;
@@ -124,9 +123,9 @@ public class SkylarkRepositoryContextTest {
scratch.file("/path/bin/def").setExecutable(true);
scratch.file("/bin/undef");
- assertThat(context.which("anything")).isEqualTo(Runtime.NONE);
- assertThat(context.which("def")).isEqualTo(Runtime.NONE);
- assertThat(context.which("undef")).isEqualTo(Runtime.NONE);
+ assertThat(context.which("anything")).isNull();
+ assertThat(context.which("def")).isNull();
+ assertThat(context.which("undef")).isNull();
assertThat(context.which("true").toString()).isEqualTo("/bin/true");
assertThat(context.which("false").toString()).isEqualTo("/path/sbin/false");
}
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
index 32932b6a73..848498b229 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
@@ -26,12 +26,14 @@ import com.google.devtools.build.lib.analysis.FileConfiguredTarget;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
+import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkSignature;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.SkylarkList.MutableList;
import com.google.devtools.build.lib.testutil.TestMode;
import org.junit.Before;
@@ -59,6 +61,7 @@ public class SkylarkEvaluationTest extends EvaluationTest {
return new SkylarkTest();
}
+ @Immutable
static class Bad {
Bad () {
}
@@ -100,11 +103,11 @@ public class SkylarkEvaluationTest extends EvaluationTest {
}
@SuppressWarnings("unused")
@SkylarkCallable(name = "nullfunc_failing", doc = "", allowReturnNones = false)
- public Object nullfuncFailing(String p1, Integer p2) {
+ public SkylarkValue nullfuncFailing(String p1, Integer p2) {
return null;
}
@SkylarkCallable(name = "nullfunc_working", doc = "", allowReturnNones = true)
- public Object nullfuncWorking() {
+ public SkylarkValue nullfuncWorking() {
return null;
}
@SkylarkCallable(name = "voidfunc", doc = "")