From 097eba7f5b687f3a3a6de3c1295569a972ed97d2 Mon Sep 17 00:00:00 2001 From: ulfjack Date: Wed, 27 Sep 2017 10:57:52 -0400 Subject: Simplify make variable expansion call sites Progress on #2475. PiperOrigin-RevId: 170197341 --- .../com/google/devtools/build/lib/analysis/RuleContext.java | 12 ++++++++++++ .../build/lib/bazel/rules/python/BazelPythonSemantics.java | 4 +--- .../com/google/devtools/build/lib/rules/cpp/CcCommon.java | 12 ++++-------- .../google/devtools/build/lib/rules/java/JavaRuntime.java | 5 ++--- 4 files changed, 19 insertions(+), 14 deletions(-) (limited to 'src/main') diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java index 64be9bbb4a..8aaaaa44e0 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java @@ -1129,6 +1129,18 @@ public final class RuleContext extends TargetContext return configurationMakeVariableContext; } + /** + * Expands the make variables in {@code expression}. + * + * @param attributeName the name of the attribute from which "expression" comes; used for error + * reporting. + * @return the expanded string. + */ + public String expandedMakeVariables(String attributeName) { + String expression = attributes().get(attributeName, Type.STRING); + return expandMakeVariables(attributeName, expression, getConfigurationMakeVariableContext()); + } + /** * Expands the make variables in {@code expression}. * diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java index bf03b95333..a11dbe2de4 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonSemantics.java @@ -41,7 +41,6 @@ import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore; import com.google.devtools.build.lib.rules.python.PyCommon; import com.google.devtools.build.lib.rules.python.PythonConfiguration; import com.google.devtools.build.lib.rules.python.PythonSemantics; -import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.util.FileTypeSet; import com.google.devtools.build.lib.util.OS; import com.google.devtools.build.lib.vfs.PathFragment; @@ -102,8 +101,7 @@ public class BazelPythonSemantics implements PythonSemantics { // adjusted to be relative to the workspace name. packageFragment = PathFragment.create(ruleContext.getWorkspaceName()) .getRelative(packageFragment); - for (String importsAttr : ruleContext.attributes().get("imports", Type.STRING_LIST)) { - importsAttr = ruleContext.expandMakeVariables("includes", importsAttr); + for (String importsAttr : ruleContext.expandedMakeVariablesList("imports")) { if (importsAttr.startsWith("/")) { ruleContext.attributeWarning("imports", "ignoring invalid absolute path '" + importsAttr + "'"); 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 343d3c7dd0..602b5d4ed6 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 @@ -360,9 +360,7 @@ public final class CcCommon { if (!ruleContext.getRule().isAttrDefined(NO_COPTS_ATTRIBUTE, Type.STRING)) { return null; } - String nocoptsAttr = - ruleContext.expandMakeVariables( - NO_COPTS_ATTRIBUTE, ruleContext.attributes().get(NO_COPTS_ATTRIBUTE, Type.STRING)); + String nocoptsAttr = ruleContext.expandedMakeVariables(NO_COPTS_ATTRIBUTE); try { return Pattern.compile(nocoptsAttr); } catch (PatternSyntaxException e) { @@ -397,11 +395,10 @@ public final class CcCommon { */ public List getDefines() { List defines = new ArrayList<>(); - for (String define : - ruleContext.attributes().get(DEFINES_ATTRIBUTE, Type.STRING_LIST)) { + for (String define : ruleContext.expandedMakeVariablesList(DEFINES_ATTRIBUTE)) { List tokens = new ArrayList<>(); try { - ShellUtils.tokenize(tokens, ruleContext.expandMakeVariables(DEFINES_ATTRIBUTE, define)); + ShellUtils.tokenize(tokens, define); if (tokens.size() == 1) { defines.add(tokens.get(0)); } else if (tokens.isEmpty()) { @@ -457,8 +454,7 @@ public final class CcCommon { List result = new ArrayList<>(); PackageIdentifier packageIdentifier = ruleContext.getLabel().getPackageIdentifier(); PathFragment packageFragment = packageIdentifier.getPathUnderExecRoot(); - for (String includesAttr : ruleContext.attributes().get("includes", Type.STRING_LIST)) { - includesAttr = ruleContext.expandMakeVariables("includes", includesAttr); + for (String includesAttr : ruleContext.expandedMakeVariablesList("includes")) { if (includesAttr.startsWith("/")) { ruleContext.attributeWarning("includes", "ignoring invalid absolute path '" + includesAttr + "'"); 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 fe73990891..5f0cbdbcb3 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 @@ -30,7 +30,6 @@ import com.google.devtools.build.lib.analysis.RunfilesProvider; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.nestedset.NestedSet; -import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.util.OsUtils; import com.google.devtools.build.lib.vfs.PathFragment; @@ -47,8 +46,8 @@ public class JavaRuntime implements RuleConfiguredTargetFactory { PrerequisiteArtifacts.nestedSet(ruleContext, "srcs", Mode.TARGET); PathFragment javaHome = defaultJavaHome(ruleContext.getLabel()); if (ruleContext.attributes().isAttributeValueExplicitlySpecified("java_home")) { - PathFragment javaHomeAttribute = PathFragment.create(ruleContext.expandMakeVariables( - "java_home", ruleContext.attributes().get("java_home", Type.STRING))); + PathFragment javaHomeAttribute = + PathFragment.create(ruleContext.expandedMakeVariables("java_home")); if (!filesToBuild.isEmpty() && javaHomeAttribute.isAbsolute()) { ruleContext.ruleError("'java_home' with an absolute path requires 'srcs' to be empty."); } -- cgit v1.2.3