Fix skylark aspect issues.
--
MOS_MIGRATED_REVID=109690378
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 e3a673f..252bbfd 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
@@ -14,8 +14,8 @@
package com.google.devtools.build.lib.packages;
-import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition.HOST;
+import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST;
import static com.google.devtools.build.lib.syntax.Type.BOOLEAN;
@@ -1076,6 +1076,7 @@
this.configuredTargetFunction = configuredTargetFunction;
this.externalBindingsFunction = externalBindingsFunction;
this.ruleDefinitionEnvironment = ruleDefinitionEnvironment;
+ validateNoClashInPublicNames(attributes);
this.attributes = ImmutableList.copyOf(attributes);
this.workspaceOnly = workspaceOnly;
this.outputsDefaultExecutable = outputsDefaultExecutable;
@@ -1090,6 +1091,23 @@
}
}
+ private void validateNoClashInPublicNames(Attribute[] attributes) {
+ Map<String, Attribute> publicToPrivateNames = new HashMap<>();
+ for (Attribute attribute : attributes) {
+ String publicName = attribute.getPublicName();
+ if (publicToPrivateNames.containsKey(publicName)) {
+ throw new IllegalStateException(
+ String.format(
+ "Rule %s: Attributes %s and %s have an identical public name: %s",
+ name,
+ attribute.getName(),
+ publicToPrivateNames.get(publicName).getName(),
+ publicName));
+ }
+ publicToPrivateNames.put(publicName, attribute);
+ }
+ }
+
/**
* Returns the function which determines the set of implicit outputs
* generated by a given rule.