aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java')
-rw-r--r--src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java b/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java
index b1b60fb1bd..2182269a83 100644
--- a/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java
+++ b/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java
@@ -16,6 +16,7 @@ package com.google.devtools.build.docgen;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Attribute;
@@ -219,7 +220,8 @@ public class RuleDocumentationAttribute implements Comparable<RuleDocumentationA
* RuleDocumentationAttribute in the rule definition ancestry graph. Returns -1
* if definitionClass is not the ancestor (transitively) of usingClass.
*/
- int getDefinitionClassAncestryLevel(Class<? extends RuleDefinition> usingClass) {
+ int getDefinitionClassAncestryLevel(Class<? extends RuleDefinition> usingClass,
+ ConfiguredRuleClassProvider ruleClassProvider) {
if (usingClass.equals(definitionClass)) {
return 0;
}
@@ -231,7 +233,7 @@ public class RuleDocumentationAttribute implements Comparable<RuleDocumentationA
// Searching the shortest path from usingClass to this.definitionClass using BFS
do {
Class<? extends RuleDefinition> ancestor = toVisit.removeFirst();
- visitAncestor(ancestor, visited, toVisit);
+ visitAncestor(ancestor, visited, toVisit, ruleClassProvider);
if (ancestor.equals(definitionClass)) {
return visited.get(ancestor);
}
@@ -242,13 +244,9 @@ public class RuleDocumentationAttribute implements Comparable<RuleDocumentationA
private void visitAncestor(
Class<? extends RuleDefinition> usingClass,
Map<Class<? extends RuleDefinition>, Integer> visited,
- LinkedList<Class<? extends RuleDefinition>> toVisit) {
- RuleDefinition instance;
- try {
- instance = usingClass.newInstance();
- } catch (IllegalAccessException | InstantiationException e) {
- throw new IllegalStateException(e);
- }
+ LinkedList<Class<? extends RuleDefinition>> toVisit,
+ ConfiguredRuleClassProvider ruleClassProvider) {
+ RuleDefinition instance = getRuleDefinition(usingClass, ruleClassProvider);
for (Class<? extends RuleDefinition> ancestor : instance.getMetadata().ancestors()) {
if (!visited.containsKey(ancestor)) {
toVisit.addLast(ancestor);
@@ -257,6 +255,18 @@ public class RuleDocumentationAttribute implements Comparable<RuleDocumentationA
}
}
+ private RuleDefinition getRuleDefinition(Class<? extends RuleDefinition> usingClass,
+ ConfiguredRuleClassProvider ruleClassProvider) {
+ if (ruleClassProvider == null) {
+ try {
+ return usingClass.newInstance();
+ } catch (IllegalAccessException | InstantiationException e) {
+ throw new IllegalStateException(e);
+ }
+ }
+ return ruleClassProvider.getRuleClassDefinition(usingClass.getName());
+ }
+
private int getAttributeOrderingPriority(RuleDocumentationAttribute attribute) {
if (DocgenConsts.ATTRIBUTE_ORDERING.containsKey(attribute.attributeName)) {
return DocgenConsts.ATTRIBUTE_ORDERING.get(attribute.attributeName);