aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2018-03-01 13:59:14 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-01 14:01:14 -0800
commitb1e686aeb891d1515e4c44a04f851a810b10968c (patch)
tree246d57d691682b6545583907a9defb80cd60f307
parent6070ba7fb59eabcbeb00fe0812e83bdd400bdfe6 (diff)
Migrate some users of useAst to useLocation
(It's good to avoid passing around more information than one needs, and FuncallExpression is pretty heavy when only a Location is necessary) RELNOTES: None. PiperOrigin-RevId: 187529568
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryModule.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java20
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/SkylarkNativeModule.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java32
4 files changed, 35 insertions, 30 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryModule.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryModule.java
index ef6391b254..ebb131cd36 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryModule.java
@@ -171,7 +171,7 @@ public class SkylarkRepositoryModule {
}
try {
RuleClass ruleClass = builder.build(ruleClassName, ruleClassName);
- PackageContext context = PackageFactory.getContext(env, ast);
+ PackageContext context = PackageFactory.getContext(env, ast.getLocation());
@SuppressWarnings("unchecked")
Map<String, Object> attributeValues = (Map<String, Object>) args[0];
return WorkspaceFactoryHelper.createAndAddRepositoryRule(
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
index 3f3ad09cb1..13e904589f 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
@@ -569,7 +569,7 @@ public final class PackageFactory {
// async glob functions cannot do the same because the Environment is not thread safe.
PackageContext context;
if (originalContext == null) {
- context = getContext(env, ast);
+ context = getContext(env, ast.getLocation());
} else {
context = originalContext;
}
@@ -759,7 +759,7 @@ public final class PackageFactory {
static Runtime.NoneType callExportsFiles(Object srcs, Object visibilityO, Object licensesO,
FuncallExpression ast, Environment env) throws EvalException, ConversionException {
- Package.Builder pkgBuilder = getContext(env, ast).pkgBuilder;
+ Package.Builder pkgBuilder = getContext(env, ast.getLocation()).pkgBuilder;
List<String> files = Type.STRING_LIST.convert(srcs, "'exports_files' operand");
RuleVisibility visibility;
@@ -845,7 +845,7 @@ public final class PackageFactory {
*/
// TODO(bazel-team): Remove in favor of package.distribs.
// TODO(bazel-team): Remove all these new*Function-s and/or have static functions
- // that consult the context dynamically via getContext(env, ast) since we have that,
+ // that consult the context dynamically via getContext(env, loc) since we have that,
// and share the functions with the native package... which requires unifying the List types.
@SkylarkSignature(name = "distribs", returnType = Runtime.NoneType.class,
doc = "Declare the distribution(s) for the code in the current package.",
@@ -929,7 +929,7 @@ public final class PackageFactory {
static SkylarkDict<String, Object> callGetRuleFunction(
String name, FuncallExpression ast, Environment env)
throws EvalException, ConversionException {
- PackageContext context = getContext(env, ast);
+ PackageContext context = getContext(env, ast.getLocation());
Target target = context.pkgBuilder.getTarget(name);
return targetDict(target, ast.getLocation(), env);
@@ -1095,7 +1095,7 @@ public final class PackageFactory {
static SkylarkDict<String, SkylarkDict<String, Object>> callGetRulesFunction(
FuncallExpression ast, Environment env)
throws EvalException {
- PackageContext context = getContext(env, ast);
+ PackageContext context = getContext(env, ast.getLocation());
Collection<Target> targets = context.pkgBuilder.getTargets();
Location loc = ast.getLocation();
@@ -1113,7 +1113,7 @@ public final class PackageFactory {
static Runtime.NoneType callPackageFunction(String name, Object packagesO, Object includesO,
FuncallExpression ast, Environment env) throws EvalException, ConversionException {
- PackageContext context = getContext(env, ast);
+ PackageContext context = getContext(env, ast.getLocation());
List<String> packages = Type.STRING_LIST.convert(
packagesO, "'package_group.packages argument'");
@@ -1169,7 +1169,7 @@ public final class PackageFactory {
public Object call(Object[] arguments, FuncallExpression ast, Environment env)
throws EvalException {
- Package.Builder pkgBuilder = getContext(env, ast).pkgBuilder;
+ Package.Builder pkgBuilder = getContext(env, ast.getLocation()).pkgBuilder;
// Validate parameter list
if (pkgBuilder.isPackageFunctionUsed()) {
@@ -1203,13 +1203,13 @@ public final class PackageFactory {
/**
* Get the PackageContext by looking up in the environment.
*/
- public static PackageContext getContext(Environment env, FuncallExpression ast)
+ public static PackageContext getContext(Environment env, Location location)
throws EvalException {
PackageContext value = (PackageContext) env.lookup(PKG_CONTEXT);
if (value == null) {
// if PKG_CONTEXT is missing, we're not called from a BUILD file. This happens if someone
// uses native.some_func() in the wrong place.
- throw new EvalException(ast.getLocation(),
+ throw new EvalException(location,
"The native module cannot be accessed from here. "
+ "Wrap the function in a macro and call it from a BUILD file");
}
@@ -1247,7 +1247,7 @@ public final class PackageFactory {
throws EvalException, InterruptedException {
env.checkLoadingOrWorkspacePhase(ruleClassName, ast.getLocation());
try {
- addRule(getContext(env, ast), kwargs, ast, env);
+ addRule(getContext(env, ast.getLocation()), kwargs, ast, env);
} catch (RuleFactory.InvalidRuleException | Package.NameConflictException e) {
throw new EvalException(ast.getLocation(), e.getMessage());
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkNativeModule.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkNativeModule.java
index 4f152d7fde..0f23a59ed5 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkNativeModule.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkNativeModule.java
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.packages;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
+import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -219,7 +220,7 @@ public class SkylarkNativeModule {
throws EvalException, ConversionException {
env.checkLoadingPhase("native.package_name", ast.getLocation());
PackageIdentifier packageId =
- PackageFactory.getContext(env, ast).getBuilder().getPackageIdentifier();
+ PackageFactory.getContext(env, ast.getLocation()).getBuilder().getPackageIdentifier();
return packageId.getPackageFragment().getPathString();
}
};
@@ -236,16 +237,16 @@ public class SkylarkNativeModule {
+ "<code>@</code>. This function is equivalent to the deprecated variable "
+ "<code>REPOSITORY_NAME</code>.",
parameters = {},
- useAst = true,
+ useLocation = true,
useEnvironment = true
)
static final BuiltinFunction repositoryName =
new BuiltinFunction("repository_name") {
- public String invoke(FuncallExpression ast, Environment env)
+ public String invoke(Location location, Environment env)
throws EvalException, ConversionException {
- env.checkLoadingPhase("native.repository_name", ast.getLocation());
+ env.checkLoadingPhase("native.repository_name", location);
PackageIdentifier packageId =
- PackageFactory.getContext(env, ast).getBuilder().getPackageIdentifier();
+ PackageFactory.getContext(env, location).getBuilder().getPackageIdentifier();
return packageId.getRepository().toString();
}
};
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
index 0222fd1b9d..702f6afb25 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
@@ -24,6 +24,7 @@ import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.LabelValidator;
import com.google.devtools.build.lib.events.Event;
+import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.events.NullEventHandler;
import com.google.devtools.build.lib.events.StoredEventHandler;
import com.google.devtools.build.lib.packages.Package.NameConflictException;
@@ -326,8 +327,9 @@ public class WorkspaceFactory {
if (errorMessage != null) {
throw new EvalException(ast.getLocation(), errorMessage);
}
- PackageFactory.getContext(env, ast).pkgBuilder.setWorkspaceName(name);
- Package.Builder builder = PackageFactory.getContext(env, ast).pkgBuilder;
+ PackageFactory.getContext(env, ast.getLocation()).pkgBuilder.setWorkspaceName(name);
+ Package.Builder builder =
+ PackageFactory.getContext(env, ast.getLocation()).pkgBuilder;
RuleClass localRepositoryRuleClass = ruleFactory.getRuleClass("local_repository");
RuleClass bindRuleClass = ruleFactory.getRuleClass("bind");
Map<String, Object> kwargs =
@@ -365,7 +367,7 @@ public class WorkspaceFactory {
try {
nameLabel = Label.parseAbsolute("//external:" + name);
try {
- Package.Builder builder = PackageFactory.getContext(env, ast).pkgBuilder;
+ Package.Builder builder = PackageFactory.getContext(env, ast.getLocation()).pkgBuilder;
RuleClass ruleClass = ruleFactory.getRuleClass("bind");
WorkspaceFactoryHelper.addBindRule(
builder,
@@ -400,7 +402,7 @@ public class WorkspaceFactory {
generic1 = String.class,
doc = "The labels of the platforms to register."
),
- useAst = true,
+ useLocation = true,
useEnvironment = true
)
private static final BuiltinFunction.Factory newRegisterExecutionPlatformsFunction =
@@ -409,9 +411,9 @@ public class WorkspaceFactory {
return new BuiltinFunction(
"register_execution_platforms",
FunctionSignature.POSITIONALS,
- BuiltinFunction.USE_AST_ENV) {
+ BuiltinFunction.USE_LOC_ENV) {
public Object invoke(
- SkylarkList<String> platformLabels, FuncallExpression ast, Environment env)
+ SkylarkList<String> platformLabels, Location location, Environment env)
throws EvalException, InterruptedException {
// Collect the platform labels.
@@ -421,7 +423,7 @@ public class WorkspaceFactory {
platforms.add(Label.parseAbsolute(rawLabel));
} catch (LabelSyntaxException e) {
throw new EvalException(
- ast.getLocation(),
+ location,
String.format(
"In register_execution_platforms: unable to parse platform label %s: %s",
rawLabel, e.getMessage()),
@@ -430,7 +432,8 @@ public class WorkspaceFactory {
}
// Add to the package definition for later.
- Package.Builder builder = PackageFactory.getContext(env, ast).pkgBuilder;
+ Package.Builder builder =
+ PackageFactory.getContext(env, location).pkgBuilder;
builder.addRegisteredExecutionPlatformLabels(platforms);
return NONE;
@@ -453,16 +456,16 @@ public class WorkspaceFactory {
generic1 = String.class,
doc = "The labels of the toolchains to register."
),
- useAst = true,
+ useLocation = true,
useEnvironment = true
)
private static final BuiltinFunction.Factory newRegisterToolchainsFunction =
new BuiltinFunction.Factory("register_toolchains") {
public BuiltinFunction create(final RuleFactory ruleFactory) {
return new BuiltinFunction(
- "register_toolchains", FunctionSignature.POSITIONALS, BuiltinFunction.USE_AST_ENV) {
+ "register_toolchains", FunctionSignature.POSITIONALS, BuiltinFunction.USE_LOC_ENV) {
public Object invoke(
- SkylarkList<String> toolchainLabels, FuncallExpression ast, Environment env)
+ SkylarkList<String> toolchainLabels, Location location, Environment env)
throws EvalException, InterruptedException {
// Collect the toolchain labels.
@@ -473,7 +476,7 @@ public class WorkspaceFactory {
toolchains.add(Label.parseAbsolute(rawLabel));
} catch (LabelSyntaxException e) {
throw new EvalException(
- ast.getLocation(),
+ location,
String.format(
"In register_toolchains: unable to parse toolchain label %s: %s",
rawLabel, e.getMessage()),
@@ -482,7 +485,8 @@ public class WorkspaceFactory {
}
// Add to the package definition for later.
- Package.Builder builder = PackageFactory.getContext(env, ast).pkgBuilder;
+ Package.Builder builder =
+ PackageFactory.getContext(env, location).pkgBuilder;
builder.addRegisteredToolchainLabels(toolchains);
return NONE;
@@ -502,7 +506,7 @@ public class WorkspaceFactory {
public Object invoke(Map<String, Object> kwargs, FuncallExpression ast, Environment env)
throws EvalException, InterruptedException {
try {
- Package.Builder builder = PackageFactory.getContext(env, ast).pkgBuilder;
+ Package.Builder builder = PackageFactory.getContext(env, ast.getLocation()).pkgBuilder;
if (!allowOverride
&& kwargs.containsKey("name")
&& builder.targets.containsKey(kwargs.get("name"))) {