diff options
author | tomlu <tomlu@google.com> | 2018-04-24 18:49:52 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-04-24 18:51:09 -0700 |
commit | d8a21e30630f4eddcd076821577a2ba9a7c110f0 (patch) | |
tree | ff05af75b3c6d0d697b3b42a79944f5f114cfc8b /src/main/java/com/google | |
parent | b88e3f4bbbbf12001b6aa11453f604d360b3d91b (diff) |
Pass environment to Skylark provider constructors.
This is needed for constructors that want to be able to use SkylarkSemantics.
RELNOTES: None
PiperOrigin-RevId: 194180124
Diffstat (limited to 'src/main/java/com/google')
16 files changed, 46 insertions, 28 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java index 82c04c259e..642410567d 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java @@ -20,6 +20,7 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.packages.NativeProvider; +import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.SkylarkNestedSet; import java.util.Map; import java.util.concurrent.atomic.AtomicReference; @@ -50,7 +51,8 @@ public final class DefaultInfo extends NativeInfo { public static final NativeProvider<NativeInfo> PROVIDER = new NativeProvider<NativeInfo>(NativeInfo.class, SKYLARK_NAME) { @Override - protected NativeInfo createInstanceFromSkylark(Object[] args, Location loc) { + protected NativeInfo createInstanceFromSkylark( + Object[] args, Environment env, Location loc) { @SuppressWarnings("unchecked") Map<String, Object> kwargs = (Map<String, Object>) args[0]; return new NativeInfo(this, kwargs, loc); diff --git a/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java index af013d892a..adacb23db8 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java @@ -32,6 +32,7 @@ import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; +import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.EvalUtils; import com.google.devtools.build.lib.syntax.SkylarkIndexable; @@ -266,8 +267,8 @@ public final class OutputGroupInfo extends NativeInfo } @Override - protected OutputGroupInfo createInstanceFromSkylark(Object[] args, Location loc) - throws EvalException { + protected OutputGroupInfo createInstanceFromSkylark( + Object[] args, Environment env, Location loc) throws EvalException { @SuppressWarnings("unchecked") Map<String, Object> kwargs = (Map<String, Object>) args[0]; diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TemplateVariableInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/TemplateVariableInfo.java index f4ce8d546e..0e093a08c3 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/TemplateVariableInfo.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/TemplateVariableInfo.java @@ -23,6 +23,7 @@ import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.FunctionSignature; import com.google.devtools.build.lib.syntax.SkylarkDict; @@ -60,15 +61,14 @@ public final class TemplateVariableInfo extends NativeInfo { new NativeProvider<TemplateVariableInfo>( TemplateVariableInfo.class, SKYLARK_NAME, SIGNATURE) { @Override - protected TemplateVariableInfo createInstanceFromSkylark(Object[] args, Location loc) - throws EvalException { + protected TemplateVariableInfo createInstanceFromSkylark( + Object[] args, Environment env, Location loc) throws EvalException { Map<String, String> vars = SkylarkDict.castSkylarkDictOrNoneToDict(args[0], String.class, String.class, "vars"); return new TemplateVariableInfo(ImmutableMap.copyOf(vars), location); } }; - private final ImmutableMap<String, String> variables; @AutoCodec.Instantiator diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java index 5b9162a579..7cd3739967 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainInfo.java @@ -23,6 +23,7 @@ import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; +import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.FunctionSignature; import com.google.devtools.build.lib.syntax.SkylarkDict; @@ -62,8 +63,8 @@ public class ToolchainInfo extends NativeInfo { public static final NativeProvider<ToolchainInfo> PROVIDER = new NativeProvider<ToolchainInfo>(ToolchainInfo.class, SKYLARK_NAME, SIGNATURE) { @Override - protected ToolchainInfo createInstanceFromSkylark(Object[] args, Location loc) - throws EvalException { + protected ToolchainInfo createInstanceFromSkylark( + Object[] args, Environment env, Location loc) throws EvalException { Map<String, Object> data = SkylarkDict.castSkylarkDictOrNoneToDict(args[0], String.class, Object.class, "data"); return ToolchainInfo.create(data, loc); diff --git a/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java b/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java index 3aae40312f..372d85ec7c 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java +++ b/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java @@ -18,6 +18,7 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization; +import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.FunctionSignature; import com.google.devtools.build.lib.syntax.SkylarkType; @@ -39,7 +40,8 @@ import javax.annotation.Nullable; * </pre> * * To allow construction from Skylark and custom construction logic, override {@link - * #createInstanceFromSkylark(Object[], Location)} (see {@link #STRUCT} for an example. + * Provider#createInstanceFromSkylark(Object[], Environment, Location)} (see {@link #STRUCT} for an + * example. */ @Immutable public abstract class NativeProvider<V extends Info> extends Provider { @@ -78,7 +80,7 @@ public abstract class NativeProvider<V extends Info> extends Provider { } @Override - protected Info createInstanceFromSkylark(Object[] args, Location loc) { + protected Info createInstanceFromSkylark(Object[] args, Environment env, Location loc) { @SuppressWarnings("unchecked") Map<String, Object> kwargs = (Map<String, Object>) args[0]; return SkylarkInfo.createSchemaless(this, kwargs, loc); @@ -165,7 +167,8 @@ public abstract class NativeProvider<V extends Info> extends Provider { } @Override - protected Info createInstanceFromSkylark(Object[] args, Location loc) throws EvalException { + protected Info createInstanceFromSkylark(Object[] args, Environment env, Location loc) + throws EvalException { throw new EvalException( loc, String.format("'%s' cannot be constructed from Skylark", getPrintableName())); } diff --git a/src/main/java/com/google/devtools/build/lib/packages/Provider.java b/src/main/java/com/google/devtools/build/lib/packages/Provider.java index dc06b664ee..698b978976 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/Provider.java +++ b/src/main/java/com/google/devtools/build/lib/packages/Provider.java @@ -106,10 +106,10 @@ public abstract class Provider extends BaseFunction { } @Override - protected Object call(Object[] args, @Nullable FuncallExpression ast, @Nullable Environment env) + protected Object call(Object[] args, @Nullable FuncallExpression ast, Environment env) throws EvalException, InterruptedException { Location loc = ast != null ? ast.getLocation() : Location.BUILTIN; - return createInstanceFromSkylark(args, loc); + return createInstanceFromSkylark(args, env, loc); } /** @@ -121,7 +121,7 @@ public abstract class Provider extends BaseFunction { * * @param args an array of argument values sorted as per the signature ({@see BaseFunction#call}) */ - protected abstract Info createInstanceFromSkylark(Object[] args, Location loc) + protected abstract Info createInstanceFromSkylark(Object[] args, Environment env, Location loc) throws EvalException; /** A serializable representation of {@link Provider}. */ diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkProvider.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkProvider.java index 95e64d9c7a..c981d6e5d3 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkProvider.java +++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkProvider.java @@ -22,6 +22,7 @@ import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.SkylarkInfo.Layout; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; +import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.FunctionSignature; import com.google.devtools.build.lib.syntax.SkylarkType; import java.util.Map; @@ -147,7 +148,7 @@ public class SkylarkProvider extends Provider implements SkylarkExportable { } @Override - protected SkylarkInfo createInstanceFromSkylark(Object[] args, Location loc) { + protected SkylarkInfo createInstanceFromSkylark(Object[] args, Environment env, Location loc) { if (layout == null) { @SuppressWarnings("unchecked") Map<String, Object> kwargs = (Map<String, Object>) args[0]; diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceBrokerInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceBrokerInfo.java index 321dc19b98..840d5026d0 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceBrokerInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceBrokerInfo.java @@ -19,6 +19,7 @@ import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.FunctionSignature; import com.google.devtools.build.lib.syntax.SkylarkType; @@ -43,7 +44,8 @@ public final class AndroidDeviceBrokerInfo extends NativeInfo { new NativeProvider<AndroidDeviceBrokerInfo>( AndroidDeviceBrokerInfo.class, SKYLARK_NAME, SIGNATURE) { @Override - protected AndroidDeviceBrokerInfo createInstanceFromSkylark(Object[] args, Location loc) { + protected AndroidDeviceBrokerInfo createInstanceFromSkylark( + Object[] args, Environment env, Location loc) { return new AndroidDeviceBrokerInfo(/*deviceBrokerType=*/ (String) args[0]); } }; diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDex2OatInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDex2OatInfo.java index a9f092d9be..357be65a8b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDex2OatInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDex2OatInfo.java @@ -19,6 +19,7 @@ import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.FunctionSignature; import com.google.devtools.build.lib.syntax.SkylarkType; @@ -45,7 +46,8 @@ public final class AndroidDex2OatInfo extends NativeInfo { public static final NativeProvider<AndroidDex2OatInfo> PROVIDER = new NativeProvider<AndroidDex2OatInfo>(AndroidDex2OatInfo.class, SKYLARK_NAME, SIGNATURE) { @Override - protected AndroidDex2OatInfo createInstanceFromSkylark(Object[] args, Location loc) { + protected AndroidDex2OatInfo createInstanceFromSkylark( + Object[] args, Environment env, Location loc) { return new AndroidDex2OatInfo(/*dex2OatEnabled=*/ (Boolean) args[0]); } }; diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfo.java index d5a3fa2ef9..9dfe2ef2b7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfo.java @@ -22,6 +22,7 @@ import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; +import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.FunctionSignature; import com.google.devtools.build.lib.syntax.SkylarkType; @@ -56,10 +57,9 @@ public class AndroidInstrumentationInfo extends NativeInfo { AndroidInstrumentationInfo.class, SKYLARK_NAME, SIGNATURE) { @Override protected AndroidInstrumentationInfo createInstanceFromSkylark( - Object[] args, Location loc) { + Object[] args, Environment env, Location loc) { return new AndroidInstrumentationInfo( - /*targetApk=*/ (Artifact) args[0], - /*instrumentationApk=*/ (Artifact) args[1]); + /*targetApk=*/ (Artifact) args[0], /*instrumentationApk=*/ (Artifact) args[1]); } }; diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java index 78c2d87c5f..e6804eee39 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidNativeLibsInfo.java @@ -22,6 +22,7 @@ import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.FunctionSignature; import com.google.devtools.build.lib.syntax.SkylarkNestedSet; import com.google.devtools.build.lib.syntax.SkylarkType; @@ -50,7 +51,8 @@ public final class AndroidNativeLibsInfo extends NativeInfo { new NativeProvider<AndroidNativeLibsInfo>( AndroidNativeLibsInfo.class, SKYLARK_NAME, SIGNATURE) { @Override - protected AndroidNativeLibsInfo createInstanceFromSkylark(Object[] args, Location loc) { + protected AndroidNativeLibsInfo createInstanceFromSkylark( + Object[] args, Environment env, Location loc) { return new AndroidNativeLibsInfo( /*nativeLibs=*/ ((SkylarkNestedSet) args[0]).getSet(Artifact.class)); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java index 1296f56b4e..e8781c935d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java @@ -25,6 +25,7 @@ import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; 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.Environment; import com.google.devtools.build.lib.syntax.EvalException; import java.util.Map; @@ -65,8 +66,8 @@ public class ConfigFeatureFlagProvider extends NativeInfo { } @Override - protected ConfigFeatureFlagProvider createInstanceFromSkylark(Object[] args, Location loc) - throws EvalException { + protected ConfigFeatureFlagProvider createInstanceFromSkylark( + Object[] args, Environment env, Location loc) throws EvalException { @SuppressWarnings("unchecked") Map<String, Object> kwargs = (Map<String, Object>) args[0]; diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java index b7a3039b7a..1a96c66d19 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java @@ -39,6 +39,7 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; import com.google.devtools.build.lib.skylarkinterface.SkylarkValue; +import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.FunctionSignature; import com.google.devtools.build.lib.syntax.Runtime; @@ -299,7 +300,7 @@ public final class JavaInfo extends NativeInfo { @Override @SuppressWarnings("unchecked") - protected JavaInfo createInstanceFromSkylark(Object[] args, Location loc) + protected JavaInfo createInstanceFromSkylark(Object[] args, Environment env, Location loc) throws EvalException { int i = 0; Artifact outputJar = (Artifact) args[i++]; diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java index 793ed26a04..49f4f0cdb3 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/MessageBundleInfo.java @@ -23,6 +23,7 @@ import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization; +import com.google.devtools.build.lib.syntax.Environment; import com.google.devtools.build.lib.syntax.FunctionSignature; import com.google.devtools.build.lib.syntax.SkylarkList; import com.google.devtools.build.lib.syntax.SkylarkType; @@ -48,7 +49,8 @@ public final class MessageBundleInfo extends NativeInfo { new NativeProvider<MessageBundleInfo>(MessageBundleInfo.class, SKYLARK_NAME, SIGNATURE) { @Override @SuppressWarnings("unchecked") - protected MessageBundleInfo createInstanceFromSkylark(Object[] args, Location loc) { + protected MessageBundleInfo createInstanceFromSkylark( + Object[] args, Environment env, Location loc) { return new MessageBundleInfo(ImmutableList.copyOf((SkylarkList<Artifact>) args[0]), loc); } }; diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BaseFunction.java b/src/main/java/com/google/devtools/build/lib/syntax/BaseFunction.java index fea0b8d458..7a7e472790 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/BaseFunction.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/BaseFunction.java @@ -476,7 +476,7 @@ public abstract class BaseFunction implements SkylarkValue { * @throws InterruptedException may be thrown in the function implementations. */ // Don't make it abstract, so that subclasses may be defined that @Override the outer call() only. - protected Object call(Object[] args, @Nullable FuncallExpression ast, @Nullable Environment env) + protected Object call(Object[] args, @Nullable FuncallExpression ast, Environment env) throws EvalException, InterruptedException { throw new EvalException( (ast == null) ? Location.BUILTIN : ast.getLocation(), diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java b/src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java index d623e0f661..10a14a6631 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java @@ -368,8 +368,8 @@ public class BuiltinFunction extends BaseFunction { } @Override - public Object call(Object[] args, @Nullable FuncallExpression ast, @Nullable Environment env) - throws EvalException { + public Object call(Object[] args, @Nullable FuncallExpression ast, Environment env) + throws EvalException { throw new EvalException(null, "tried to invoke a Factory for function " + this); } |