diff options
author | 2017-09-29 08:59:44 -0400 | |
---|---|---|
committer | 2017-09-29 12:14:52 -0400 | |
commit | 078601363a2b814ce20c24ec0451e70214b92078 (patch) | |
tree | 8e264a50882957c3a623d079aa2b0987dfef214f /src/main/java/com/google/devtools/build/lib/rules | |
parent | 3dc2f544d8362091ed33c1c486d64d201e65ee7e (diff) |
Move expansion functionality to a new class
Progress on #2475.
PiperOrigin-RevId: 170473111
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
18 files changed, 49 insertions, 45 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java index 39041a2d6b..bfa807401d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java @@ -246,7 +246,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { resourceDeps, ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_R_TXT), ResourceFilter.fromRuleContext(ruleContext), - ruleContext.getTokenizedStringListAttr("nocompress_extensions"), + ruleContext.getExpander().withDataLocations().tokenized("nocompress_extensions"), ruleContext.attributes().get("crunch_png", Type.BOOLEAN), ProguardHelper.getProguardConfigArtifact(ruleContext, ""), createMainDexProguardSpec(ruleContext), @@ -266,7 +266,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { ruleContext, getDxArtifact(ruleContext, "android_instant_run.ap_"), resourceDeps, - ruleContext.getTokenizedStringListAttr("nocompress_extensions"), + ruleContext.getExpander().withDataLocations().tokenized("nocompress_extensions"), ruleContext.attributes().get("crunch_png", Type.BOOLEAN), ProguardHelper.getProguardConfigArtifact(ruleContext, "instant_run")); ruleContext.assertNoErrors(); @@ -894,7 +894,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { .setTargetAaptVersion(AndroidAaptVersion.chooseTargetAaptVersion(ruleContext)) .setResourceFilter(ResourceFilter.fromRuleContext(ruleContext)) .setUncompressedExtensions( - ruleContext.getTokenizedStringListAttr("nocompress_extensions")) + ruleContext.getExpander().withDataLocations().tokenized("nocompress_extensions")) .build(); filesBuilder.add(ruleContext.getImplicitOutputArtifact( AndroidRuleClasses.ANDROID_RESOURCE_SHRINKER_LOG)); @@ -938,7 +938,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { Function<Artifact, Artifact> derivedJarFunction, @Nullable Artifact proguardOutputMap) throws InterruptedException, RuleErrorException { - List<String> dexopts = ruleContext.getTokenizedStringListAttr("dexopts"); + List<String> dexopts = ruleContext.getExpander().withDataLocations().tokenized("dexopts"); MultidexMode multidexMode = getMultidexMode(ruleContext); if (!supportsMultidexMode(ruleContext, multidexMode)) { ruleContext.throwWithRuleError("Multidex mode \"" + multidexMode.getAttributeValue() @@ -1456,7 +1456,9 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { .addExecPath(mainDexList) .addExecPath(strippedJar) .addExecPath(jar) - .addAll(ruleContext.getTokenizedStringListAttr("main_dex_list_opts")) + .addAll( + ruleContext + .getExpander().withDataLocations().tokenized("main_dex_list_opts")) .build()) .build(ruleContext)); return mainDexList; diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java index 4cde375390..a8eb438270 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryMobileInstall.java @@ -78,7 +78,7 @@ public final class AndroidBinaryMobileInstall { ruleContext.getImplicitOutputArtifact( AndroidRuleClasses.ANDROID_INCREMENTAL_RESOURCES_APK), resourceDeps, - ruleContext.getTokenizedStringListAttr("nocompress_extensions"), + ruleContext.getExpander().withDataLocations().tokenized("nocompress_extensions"), ruleContext.attributes().get("crunch_png", Type.BOOLEAN), ProguardHelper.getProguardConfigArtifact(ruleContext, "incremental")); ruleContext.assertNoErrors(); @@ -90,7 +90,7 @@ public final class AndroidBinaryMobileInstall { ruleContext, getMobileInstallArtifact(ruleContext, "android_resources.ap_"), resourceDeps, - ruleContext.getTokenizedStringListAttr("nocompress_extensions"), + ruleContext.getExpander().withDataLocations().tokenized("nocompress_extensions"), ruleContext.attributes().get("crunch_png", Type.BOOLEAN), ProguardHelper.getProguardConfigArtifact(ruleContext, "incremental_split")); ruleContext.assertNoErrors(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidHostServiceFixture.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidHostServiceFixture.java index dbe0034f58..676a9ee6df 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidHostServiceFixture.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidHostServiceFixture.java @@ -52,7 +52,7 @@ public class AndroidHostServiceFixture implements RuleConfiguredTargetFactory { .addNativeDeclaredProvider( new AndroidHostServiceFixtureInfoProvider( executable.getExecutable(), - ruleContext.getTokenizedStringListAttr("service_names"), + ruleContext.getExpander().withDataLocations().tokenized("service_names"), AndroidCommon.getSupportApks(ruleContext), ruleContext.attributes().get("provides_test_args", Type.BOOLEAN), ruleContext.attributes().get("daemon", Type.BOOLEAN))) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java index c7abbb81f6..8391c5efa1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java @@ -332,7 +332,7 @@ public class ApkActionsBuilder { } ImmutableList<String> noCompressExtensions = - ruleContext.getTokenizedStringListAttr("nocompress_extensions"); + ruleContext.getExpander().withDataLocations().tokenized("nocompress_extensions"); if (!noCompressExtensions.isEmpty()) { compressedApkCommandLine.addAll("--nocompress_suffixes", noCompressExtensions); singleJarCommandLine.addAll("--nocompress_suffixes", noCompressExtensions); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java index e70bf42bf5..bf89607b82 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java @@ -213,7 +213,7 @@ public final class ApplicationManifest { for (String variable : manifestValues.keySet()) { manifestValues.put( - variable, context.expandMakeVariables("manifest_values", manifestValues.get(variable))); + variable, context.getExpander().expand("manifest_values", manifestValues.get(variable))); } return ImmutableMap.copyOf(manifestValues); } @@ -805,7 +805,7 @@ public final class ApplicationManifest { ResourceFilter resourceFilter = ResourceFilter.fromRuleContext(ruleContext); List<String> uncompressedExtensions = - ruleContext.getTokenizedStringListAttr("nocompress_extensions"); + ruleContext.getExpander().withDataLocations().tokenized("nocompress_extensions"); ImmutableList.Builder<String> additionalAaptOpts = ImmutableList.builder(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java index 36278ef9c9..2bd0e14767 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java @@ -353,7 +353,7 @@ public final class CcCommon { if (!ruleContext.getRule().isAttrDefined(NO_COPTS_ATTRIBUTE, Type.STRING)) { return null; } - String nocoptsAttr = ruleContext.expandedMakeVariables(NO_COPTS_ATTRIBUTE); + String nocoptsAttr = ruleContext.getExpander().expand(NO_COPTS_ATTRIBUTE); try { return Pattern.compile(nocoptsAttr); } catch (PatternSyntaxException e) { @@ -388,7 +388,7 @@ public final class CcCommon { */ public List<String> getDefines() { List<String> defines = new ArrayList<>(); - for (String define : ruleContext.expandedMakeVariablesList(DEFINES_ATTRIBUTE)) { + for (String define : ruleContext.getExpander().list(DEFINES_ATTRIBUTE)) { List<String> tokens = new ArrayList<>(); try { ShellUtils.tokenize(tokens, define); @@ -447,7 +447,7 @@ public final class CcCommon { List<PathFragment> result = new ArrayList<>(); PackageIdentifier packageIdentifier = ruleContext.getLabel().getPackageIdentifier(); PathFragment packageFragment = packageIdentifier.getPathUnderExecRoot(); - for (String includesAttr : ruleContext.expandedMakeVariablesList("includes")) { + for (String includesAttr : ruleContext.getExpander().list("includes")) { if (includesAttr.startsWith("/")) { ruleContext.attributeWarning("includes", "ignoring invalid absolute path '" + includesAttr + "'"); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java index e5c871ef8a..6a21ba0b9d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java @@ -27,6 +27,7 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.MiddlemanFactory; import com.google.devtools.build.lib.actions.ParameterFile; import com.google.devtools.build.lib.analysis.AnalysisUtils; +import com.google.devtools.build.lib.analysis.Expander; import com.google.devtools.build.lib.analysis.FileProvider; import com.google.devtools.build.lib.analysis.PlatformConfiguration; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; @@ -155,23 +156,22 @@ public class CppHelper { !ruleContext.getFeatures().contains("no_copts_tokenization"); List<String> tokens = new ArrayList<>(); + Expander expander = ruleContext.getExpander().withDataExecLocations(); for (String token : input) { - try { - // Legacy behavior: tokenize all items. - if (tokenization) { - ruleContext.tokenizeAndExpandMakeVars(tokens, attributeName, token); - } else { - String exp = - ruleContext.expandSingleMakeVariable(attributeName, token); - if (exp != null) { + // Legacy behavior: tokenize all items. + if (tokenization) { + expander.tokenizeAndExpandMakeVars(tokens, attributeName, token); + } else { + String exp = expander.expandSingleMakeVariable(attributeName, token); + if (exp != null) { + try { ShellUtils.tokenize(tokens, exp); - } else { - tokens.add( - ruleContext.expandMakeVariables(attributeName, token)); + } catch (ShellUtils.TokenizationException e) { + ruleContext.attributeError(attributeName, e.getMessage()); } + } else { + tokens.add(expander.expand(attributeName, token)); } - } catch (ShellUtils.TokenizationException e) { - ruleContext.attributeError(attributeName, e.getMessage()); } } return ImmutableList.copyOf(tokens); @@ -202,13 +202,14 @@ public class CppHelper { public static List<String> expandLinkopts( RuleContext ruleContext, String attrName, Iterable<String> values) { List<String> result = new ArrayList<>(); + Expander expander = ruleContext.getExpander().withDataExecLocations(); for (String value : values) { if (isLinkoptLabel(value)) { if (!expandLabel(ruleContext, result, value)) { ruleContext.attributeError(attrName, "could not resolve label '" + value + "'"); } } else { - ruleContext + expander .tokenizeAndExpandMakeVars( result, attrName, diff --git a/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBase.java b/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBase.java index f91bcdec48..2a59bffbc7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBase.java +++ b/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBase.java @@ -270,10 +270,9 @@ public abstract class GenRuleBase implements RuleConfiguredTargetFactory { */ protected String resolveCommand(String command, final RuleContext ruleContext, final NestedSet<Artifact> resolvedSrcs, final NestedSet<Artifact> filesToBuild) { - return ruleContext.expandMakeVariables( - "cmd", - command, - new CommandResolverContext(ruleContext, resolvedSrcs, filesToBuild)); + return ruleContext + .getExpander(new CommandResolverContext(ruleContext, resolvedSrcs, filesToBuild)) + .expand("cmd", command); } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java index b394ef6aaf..489844c265 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java @@ -461,7 +461,7 @@ public class JavaCommon { return Streams.concat( JavaToolchainProvider.fromRuleContext(ruleContext).getJavacOptions().stream(), Streams.stream(extraJavacOpts), - ruleContext.getTokenizedStringListAttr("javacopts").stream()) + ruleContext.getExpander().withDataLocations().tokenized("javacopts").stream()) .collect(toImmutableList()); } @@ -569,7 +569,7 @@ public class JavaCommon { public static List<String> getJvmFlags(RuleContext ruleContext) { List<String> jvmFlags = new ArrayList<>(); jvmFlags.addAll(ruleContext.getFragment(JavaConfiguration.class).getDefaultJvmFlags()); - jvmFlags.addAll(ruleContext.getExpandedStringListAttr("jvm_flags")); + jvmFlags.addAll(ruleContext.getExpander().withDataLocations().list("jvm_flags")); return jvmFlags; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java index b1629f0063..e235cd5d10 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java @@ -721,7 +721,7 @@ public final class JavaCompilationHelper { return ImmutableList.copyOf( Iterables.concat( JavaToolchainProvider.fromRuleContext(ruleContext).getJavacOptions(), - ruleContext.getTokenizedStringListAttr("javacopts"))); + ruleContext.getExpander().withDataLocations().tokenized("javacopts"))); } public void setTranslations(Collection<Artifact> translations) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java index 5f0cbdbcb3..004ce3e5c6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntime.java @@ -47,7 +47,7 @@ public class JavaRuntime implements RuleConfiguredTargetFactory { PathFragment javaHome = defaultJavaHome(ruleContext.getLabel()); if (ruleContext.attributes().isAttributeValueExplicitlySpecified("java_home")) { PathFragment javaHomeAttribute = - PathFragment.create(ruleContext.expandedMakeVariables("java_home")); + PathFragment.create(ruleContext.getExpander().expand("java_home")); if (!filesToBuild.isEmpty() && javaHomeAttribute.isAbsolute()) { ruleContext.ruleError("'java_home' with an absolute path requires 'srcs' to be empty."); } 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 1c87c48911..9e46ef9f34 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 @@ -512,7 +512,8 @@ public class JavaSkylarkCommon { (ConfiguredTarget) skylarkRuleContext.getAttr().getValue(javaToolchainAttr); JavaToolchainProvider toolchain = getJavaToolchainProvider(javaToolchainConfigTarget); return ImmutableList.copyOf(Iterables.concat( - toolchain.getJavacOptions(), ruleContext.getTokenizedStringListAttr("javacopts"))); + toolchain.getJavacOptions(), + ruleContext.getExpander().withDataLocations().tokenized("javacopts"))); } @SkylarkCallable( diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java index 06d6fa7561..35102f374e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchain.java @@ -54,7 +54,7 @@ public final class JavaToolchain implements RuleConfiguredTargetFactory { ruleContext, "extclasspath", Mode.HOST); String encoding = ruleContext.attributes().get("encoding", Type.STRING); List<String> xlint = ruleContext.attributes().get("xlint", Type.STRING_LIST); - List<String> misc = ruleContext.getTokenizedStringListAttr("misc"); + List<String> misc = ruleContext.getExpander().withDataLocations().tokenized("misc"); boolean javacSupportsWorkers = ruleContext.attributes().get("javac_supports_workers", Type.BOOLEAN); Artifact javac = ruleContext.getPrerequisiteArtifact("javac", Mode.HOST); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java index 2d027bc0a2..43ea21958b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStubBinary.java @@ -194,7 +194,8 @@ public class AppleStubBinary implements RuleConfiguredTargetFactory { AppleStubBinaryRule.XCENV_BASED_PATH_ATTR, PATH_NOT_NORMALIZED_ERROR); } - return ruleContext.expandMakeVariables( - AppleStubBinaryRule.XCENV_BASED_PATH_ATTR, pathString, makeVariableContext); + return ruleContext + .getExpander(makeVariableContext) + .expand(AppleStubBinaryRule.XCENV_BASED_PATH_ATTR, pathString); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java index 6700f31512..39c28b750a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationAttributes.java @@ -253,11 +253,11 @@ final class CompilationAttributes { private static void addCompileOptionsFromRuleContext(Builder builder, RuleContext ruleContext) { if (ruleContext.attributes().has("copts", Type.STRING_LIST)) { - builder.addCopts(ruleContext.getTokenizedStringListAttr("copts")); + builder.addCopts(ruleContext.getExpander().withDataLocations().tokenized("copts")); } if (ruleContext.attributes().has("linkopts", Type.STRING_LIST)) { - builder.addLinkopts(ruleContext.getTokenizedStringListAttr("linkopts")); + builder.addLinkopts(ruleContext.getExpander().withDataLocations().tokenized("linkopts")); } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java index b6561b1304..9b5d87a897 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java @@ -260,7 +260,7 @@ public final class IosTest implements RuleConfiguredTargetFactory { CompilationAttributes.Builder.fromRuleContext(ruleContext).build()) .setCompilationArtifacts(compilationArtifacts) .setResourceAttributes(new ResourceAttributes(ruleContext)) - .addDefines(ruleContext.getTokenizedStringListAttr("defines")) + .addDefines(ruleContext.getExpander().withDataLocations().tokenized("defines")) .addDeps(ruleContext.getPrerequisites("deps", Mode.TARGET)) .addRuntimeDeps(ruleContext.getPrerequisites("runtime_deps", Mode.TARGET)) .addDeps(ruleContext.getPrerequisites("bundles", Mode.TARGET)) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java index f6b0efe577..c104bf072a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java @@ -645,7 +645,7 @@ public final class ObjcCommon { static Iterable<String> getNonCrosstoolCopts(RuleContext ruleContext) { return Iterables.concat( ruleContext.getFragment(ObjcConfiguration.class).getCopts(), - ruleContext.getTokenizedStringListAttr("copts")); + ruleContext.getExpander().withDataLocations().tokenized("copts")); } static ImmutableSet<PathFragment> userHeaderSearchPaths( diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java index b93baea714..be449de555 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java @@ -41,7 +41,7 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory { .setCompilationAttributes( CompilationAttributes.Builder.fromRuleContext(ruleContext).build()) .setResourceAttributes(new ResourceAttributes(ruleContext)) - .addDefines(ruleContext.getTokenizedStringListAttr("defines")) + .addDefines(ruleContext.getExpander().withDataLocations().tokenized("defines")) .setCompilationArtifacts(CompilationSupport.compilationArtifacts(ruleContext)) .addDeps(ruleContext.getPrerequisites("deps", Mode.TARGET)) .addRuntimeDeps(ruleContext.getPrerequisites("runtime_deps", Mode.TARGET)) |