diff options
author | 2018-03-01 13:59:14 -0800 | |
---|---|---|
committer | 2018-03-01 14:01:14 -0800 | |
commit | b1e686aeb891d1515e4c44a04f851a810b10968c (patch) | |
tree | 246d57d691682b6545583907a9defb80cd60f307 | |
parent | 6070ba7fb59eabcbeb00fe0812e83bdd400bdfe6 (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
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"))) { |