aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/AttributeMap.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/Package.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/test/TestSuite.java4
11 files changed, 27 insertions, 17 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java
index 37f06c3bd4..3ded47d104 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisUtils.java
@@ -25,7 +25,6 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
-import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.TriState;
import com.google.devtools.build.lib.packages.Type;
import com.google.devtools.build.lib.syntax.Label;
@@ -53,9 +52,7 @@ public final class AnalysisUtils {
*/
public static boolean isStampingEnabled(RuleContext ruleContext) {
BuildConfiguration config = ruleContext.getConfiguration();
- Rule rule = ruleContext.getRule();
- if (config.isHostConfiguration()
- || !rule.getRuleClassObject().hasAttr("stamp", Type.TRISTATE)) {
+ if (config.isHostConfiguration() || !ruleContext.attributes().has("stamp", Type.TRISTATE)) {
return false;
}
TriState stamp = ruleContext.attributes().get("stamp", Type.TRISTATE);
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java
index f03ee6bf08..c13c362b28 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java
@@ -209,4 +209,10 @@ public abstract class AbstractAttributeMapper implements AttributeMap {
protected void checkType(String attrName, Type<?> type) {
getIndexWithTypeCheck(attrName, type);
}
+
+ @Override
+ public boolean has(String attrName, Type<?> type) {
+ Attribute attribute = ruleClass.getAttributeByNameMaybe(attrName);
+ return attribute != null && attribute.getType() == type;
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java
index 2aef2242bb..def32b58bb 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java
@@ -213,6 +213,8 @@ public class AggregatingAttributeMapper extends AbstractAttributeMapper {
@Override public boolean isAttributeValueExplicitlySpecified(String attributeName) {
return owner.isAttributeValueExplicitlySpecified(attributeName);
}
+ @Override
+ public boolean has(String attrName, Type<?> type) { return owner.has(attrName, type); }
};
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AttributeMap.java b/src/main/java/com/google/devtools/build/lib/packages/AttributeMap.java
index eeb6951c39..52aecd1655 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AttributeMap.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AttributeMap.java
@@ -105,4 +105,9 @@ public interface AttributeMap {
String getPackageDefaultDeprecation();
ImmutableList<String> getPackageDefaultCopts();
+
+ /**
+ * @return true if an attribute with the given name and type is present
+ */
+ boolean has(String attrName, Type<?> type);
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Package.java b/src/main/java/com/google/devtools/build/lib/packages/Package.java
index b65e35858f..900f901891 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Package.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Package.java
@@ -1348,7 +1348,7 @@ public class Package implements Serializable {
AttributeMap attributes = NonconfigurableAttributeMapper.of(rule);
if (rule.getRuleClass().equals("test_suite")
&& attributes.get("tests", Type.LABEL_LIST).isEmpty()
- && (!rule.getRuleClassObject().hasAttr("suites", Type.LABEL_LIST)
+ && (!attributes.has("suites", Type.LABEL_LIST)
|| attributes.get("suites", Type.LABEL_LIST).isEmpty())) {
rule.setAttributeValueByName("$implicit_tests", allTests);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
index c44aac0ce0..6f545ac0e4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java
@@ -436,7 +436,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory {
* Returns "true" if the {@code linkshared} attribute exists and is set.
*/
private static final boolean isLinkShared(RuleContext context) {
- return context.getRule().getRuleClassObject().hasAttr("linkshared", Type.BOOLEAN)
+ return context.attributes().has("linkshared", Type.BOOLEAN)
&& context.attributes().get("linkshared", Type.BOOLEAN);
}
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 b265d2362a..871053703c 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
@@ -147,7 +147,7 @@ public final class CcCommon {
}
private boolean hasAttribute(String name, Type<?> type) {
- return ruleContext.getRule().getRuleClassObject().hasAttr(name, type);
+ return ruleContext.attributes().has(name, type);
}
private static NestedSet<Artifact> collectExecutionDynamicLibraryArtifacts(
@@ -179,10 +179,10 @@ public final class CcCommon {
deps.addAll(ruleContext.getPrerequisites("deps", Mode.TARGET));
- if (ruleContext.getRule().getRuleClassObject().hasAttr("malloc", Type.LABEL)) {
+ if (ruleContext.attributes().has("malloc", Type.LABEL)) {
deps.add(CppHelper.mallocForTarget(ruleContext));
}
- if (ruleContext.getRule().getRuleClassObject().hasAttr("implementation", Type.LABEL_LIST)) {
+ if (ruleContext.attributes().has("implementation", Type.LABEL_LIST)) {
deps.addAll(ruleContext.getPrerequisites("implementation", Mode.TARGET));
}
@@ -596,7 +596,7 @@ public final class CcCommon {
RuleContext ruleContext, CppCompilationContext context) {
// TODO(bazel-team): Use context.getCompilationPrerequisites() instead.
NestedSetBuilder<Artifact> prerequisites = NestedSetBuilder.stableOrder();
- if (ruleContext.getRule().getRuleClassObject().hasAttr("srcs", Type.LABEL_LIST)) {
+ if (ruleContext.attributes().has("srcs", Type.LABEL_LIST)) {
for (FileProvider provider : ruleContext
.getPrerequisites("srcs", Mode.TARGET, FileProvider.class)) {
prerequisites.addAll(FileType.filter(provider.getFilesToBuild(), SOURCE_TYPES));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
index e028cbb7be..fe93ba41d2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java
@@ -338,7 +338,7 @@ public abstract class CcLibrary implements RuleConfiguredTargetFactory {
}
private static ImmutableList<Label> getImplementedCcPublicLibraries(RuleContext context) {
- if (context.getRule().getRuleClassObject().hasAttr("implements", Type.LABEL_LIST)) {
+ if (context.attributes().has("implements", Type.LABEL_LIST)) {
return ImmutableList.copyOf(context.attributes().get("implements", Type.LABEL_LIST));
} else {
return ImmutableList.of();
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 62c7f1fdcc..1ff7dd3545 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
@@ -346,7 +346,7 @@ public class CppHelper {
scannableBuilder.addTransitive(dep.getTransitiveIncludeScannables());
}
- if (ruleContext.getRule().getRuleClassObject().hasAttr("malloc", Type.LABEL)) {
+ if (ruleContext.attributes().has("malloc", Type.LABEL)) {
TransitiveInfoCollection malloc = mallocForTarget(ruleContext);
TransitiveLipoInfoProvider provider = malloc.getProvider(TransitiveLipoInfoProvider.class);
if (provider != null) {
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 4b7ffacaf5..ee15d33cf6 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
@@ -225,7 +225,7 @@ public class JavaCommon {
public static List<TransitiveInfoCollection> getExports(RuleContext ruleContext) {
// We need to check here because there are classes inheriting from this class that implement
// rules that don't have this attribute.
- if (ruleContext.getRule().getRuleClassObject().hasAttr("exports", Type.LABEL_LIST)) {
+ if (ruleContext.attributes().has("exports", Type.LABEL_LIST)) {
return ImmutableList.copyOf(ruleContext.getPrerequisites("exports", Mode.TARGET));
} else {
return ImmutableList.of();
@@ -391,7 +391,7 @@ public class JavaCommon {
private static List<TransitiveInfoCollection> getRuntimeDeps(RuleContext ruleContext) {
// We need to check here because there are classes inheriting from this class that implement
// rules that don't have this attribute.
- if (ruleContext.getRule().getRuleClassObject().hasAttr("runtime_deps", Type.LABEL_LIST)) {
+ if (ruleContext.attributes().has("runtime_deps", Type.LABEL_LIST)) {
return ImmutableList.copyOf(ruleContext.getPrerequisites("runtime_deps", Mode.TARGET));
} else {
return ImmutableList.of();
@@ -573,7 +573,7 @@ public class JavaCommon {
Iterable<JavaPluginInfoProvider> getPluginInfoProvidersForAttribute(String attribute,
Mode mode) {
- if (ruleContext.getRule().getRuleClassObject().hasAttr(attribute, Type.LABEL_LIST)) {
+ if (ruleContext.attributes().has(attribute, Type.LABEL_LIST)) {
return ruleContext.getPrerequisites(attribute, mode, JavaPluginInfoProvider.class);
}
return ImmutableList.of();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/TestSuite.java b/src/main/java/com/google/devtools/build/lib/rules/test/TestSuite.java
index b0cb6e9986..acf3ded639 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/test/TestSuite.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/test/TestSuite.java
@@ -88,7 +88,7 @@ public class TestSuite implements RuleConfiguredTargetFactory {
private Iterable<? extends TransitiveInfoCollection> getPrerequisites(
RuleContext ruleContext, String attributeName) {
- if (ruleContext.getRule().getRuleClassObject().hasAttr(attributeName, Type.LABEL_LIST)) {
+ if (ruleContext.attributes().has(attributeName, Type.LABEL_LIST)) {
return ruleContext.getPrerequisites(attributeName, Mode.TARGET);
} else {
return ImmutableList.<TransitiveInfoCollection>of();
@@ -96,7 +96,7 @@ public class TestSuite implements RuleConfiguredTargetFactory {
}
private void checkTestsAndSuites(RuleContext ruleContext, String attributeName) {
- if (!ruleContext.getRule().getRuleClassObject().hasAttr(attributeName, Type.LABEL_LIST)) {
+ if (!ruleContext.attributes().has(attributeName, Type.LABEL_LIST)) {
return;
}
for (TransitiveInfoCollection dep : ruleContext.getPrerequisites(attributeName, Mode.TARGET)) {