aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java36
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryModule.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/RuleClass.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/repository/WorkspaceBaseRule.java2
7 files changed, 44 insertions, 14 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
index ebffbf8e42..8739918377 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
@@ -151,6 +151,7 @@ public class BaseRuleClasses {
return RuleDefinition.Metadata.builder()
.name("$test_base_rule")
.type(RuleClassType.ABSTRACT)
+ .ancestors(RootRule.class)
.build();
}
}
@@ -160,8 +161,6 @@ public class BaseRuleClasses {
*/
public static RuleClass.Builder commonCoreAndSkylarkAttributes(RuleClass.Builder builder) {
return builder
- .add(attr("name", STRING)
- .nonconfigurable("Rule name"))
// The visibility attribute is special: it is a nodep label, and loading the
// necessary package groups is handled by {@link LabelVisitor#visitTargetVisibility}.
// Package groups always have the null configuration so that they are not duplicated
@@ -198,15 +197,38 @@ public class BaseRuleClasses {
);
}
+ public static RuleClass.Builder nameAttribute(RuleClass.Builder builder) {
+ return builder.add(attr("name", STRING).nonconfigurable("Rule name"));
+ }
+
/**
- * Common parts of rules.
+ * Ancestor of every rule.
+ *
+ * <p>Adds the name attribute to every rule.
+ */
+ public static final class RootRule implements RuleDefinition {
+
+ @Override
+ public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) {
+ return nameAttribute(builder).build();
+ }
+
+ @Override
+ public Metadata getMetadata() {
+ return RuleDefinition.Metadata.builder()
+ .name("$root_rule")
+ .type(RuleClassType.ABSTRACT)
+ .build();
+ }
+ }
+
+ /**
+ * Common parts of some rules.
*/
public static final class BaseRule implements RuleDefinition {
@Override
public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment env) {
return commonCoreAndSkylarkAttributes(builder)
- // The name attribute is handled specially, so it does not appear here.
- //
// Aggregates the labels of all {@link ConfigRuleClasses} rules this rule uses (e.g.
// keys for configurable attributes). This is specially populated in
// {@RuleClass#populateRuleAttributeValues}.
@@ -233,12 +255,13 @@ public class BaseRuleClasses {
return RuleDefinition.Metadata.builder()
.name("$base_rule")
.type(RuleClassType.ABSTRACT)
+ .ancestors(RootRule.class)
.build();
}
}
/**
- * Common ancestor class for all rules.
+ * Common ancestor class for some rules.
*/
public static final class RuleBase implements RuleDefinition {
@Override
@@ -283,6 +306,7 @@ public class BaseRuleClasses {
return RuleDefinition.Metadata.builder()
.name("$binary_base_rule")
.type(RuleClassType.ABSTRACT)
+ .ancestors(RootRule.class)
.build();
}
}
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 c325ba81bb..339bdc5ec5 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
@@ -124,6 +124,7 @@ public class SkylarkRepositoryModule {
builder.addOrOverrideAttribute(attr("$local", BOOLEAN).defaultValue(local).build());
builder.addOrOverrideAttribute(attr("$environ", STRING_LIST)
.defaultValue(environ).build());
+ BaseRuleClasses.nameAttribute(builder);
BaseRuleClasses.commonCoreAndSkylarkAttributes(builder);
builder.add(attr("expect_failure", STRING));
if (attrs != Runtime.NONE) {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
index 18cc9fa2a3..90b963bb79 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
@@ -320,6 +320,7 @@ public class BazelRuleClassProvider {
new RuleSet() {
@Override
public void init(Builder builder) {
+ builder.addRuleDefinition(new BaseRuleClasses.RootRule());
builder.addRuleDefinition(new BaseRuleClasses.BaseRule());
builder.addRuleDefinition(new BaseRuleClasses.RuleBase());
builder.addRuleDefinition(new BaseRuleClasses.BinaryBaseRule());
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
index 5bd4d83f60..1b3ea9c061 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
@@ -1421,11 +1421,6 @@ public final class RuleClass {
Rule rule, AttributeValuesMap attributeValues, EventHandler eventHandler) {
BitSet definedAttrIndices = new BitSet();
for (String attributeName : attributeValues.getAttributeNames()) {
- // The attribute named "name" was handled in a special way already.
- if (attributeName.equals("name")) {
- continue;
- }
-
Object attributeValue = attributeValues.getAttributeValue(attributeName);
// Ignore all None values.
if (attributeValue == Runtime.NONE) {
diff --git a/src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java b/src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java
index 7b053163cc..81f2dd1183 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java
@@ -418,6 +418,12 @@ public abstract class OutputFormatter implements Serializable {
RawAttributeMapper attributeMap = RawAttributeMapper.of(rule);
for (Attribute attr : rule.getAttributes()) {
+ // Ignore the "name" attribute here, as we already print it above.
+ // This is not strictly necessary, but convention has it that the
+ // name attribute is printed first.
+ if ("name".equals(attr.getName())) {
+ continue;
+ }
if (attributeMap.isConfigurable(attr.getName(), attr.getType())) {
continue; // TODO(bazel-team): handle configurable attributes.
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java
index 36648c4701..3cc9decfe6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java
@@ -122,9 +122,10 @@ public class SkylarkRuleClassFunctions {
/** Parent rule class for non-executable non-test Skylark rules. */
public static final RuleClass baseRule =
BaseRuleClasses.commonCoreAndSkylarkAttributes(
- new RuleClass.Builder("$base_rule", RuleClassType.ABSTRACT, true))
- .add(attr("expect_failure", STRING))
- .build();
+ BaseRuleClasses.nameAttribute(
+ new RuleClass.Builder("$base_rule", RuleClassType.ABSTRACT, true))
+ .add(attr("expect_failure", STRING)))
+ .build();
/** Parent rule class for executable non-test Skylark rules. */
public static final RuleClass binaryBaseRule =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/WorkspaceBaseRule.java b/src/main/java/com/google/devtools/build/lib/rules/repository/WorkspaceBaseRule.java
index 581559ca39..2130d1a67a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/WorkspaceBaseRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/WorkspaceBaseRule.java
@@ -17,6 +17,7 @@ package com.google.devtools.build.lib.rules.repository;
import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.syntax.Type.STRING;
+import com.google.devtools.build.lib.analysis.BaseRuleClasses.RootRule;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -42,6 +43,7 @@ public class WorkspaceBaseRule implements RuleDefinition {
return RuleDefinition.Metadata.builder()
.name("$workspace_base_rule")
.type(RuleClassType.ABSTRACT)
+ .ancestors(RootRule.class)
.build();
}
}