aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar Luis Fernando Pino Duque <lpino@google.com>2016-04-26 09:31:27 +0000
committerGravatar Yun Peng <pcloudy@google.com>2016-04-26 14:39:16 +0000
commit2b0b5cc078e9acc4f9b4908fb6c835119f295ce1 (patch)
treeaa436c00d72a0a0909162fb90d60a5ad9cd07bfa /src/main/java/com/google/devtools/build
parent6fd9bf133c8c1d33c661518e2a23e43a47a113fe (diff)
Fix the documentation generator to use rule definition instances instead of classes.
-- MOS_MIGRATED_REVID=120794657
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/docgen/BuildDocCollector.java6
-rw-r--r--src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java28
-rw-r--r--src/main/java/com/google/devtools/build/docgen/SourceFileReader.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch1ExtensionRule.java3
5 files changed, 33 insertions, 25 deletions
diff --git a/src/main/java/com/google/devtools/build/docgen/BuildDocCollector.java b/src/main/java/com/google/devtools/build/docgen/BuildDocCollector.java
index 7bb4f71993..870bf9558b 100644
--- a/src/main/java/com/google/devtools/build/docgen/BuildDocCollector.java
+++ b/src/main/java/com/google/devtools/build/docgen/BuildDocCollector.java
@@ -154,7 +154,7 @@ public class BuildDocCollector {
if (ruleClass != null) {
if (ruleClass.isDocumented()) {
Class<? extends RuleDefinition> ruleDefinition =
- ruleClassProvider.getRuleClassDefinition(ruleDoc.getRuleName());
+ ruleClassProvider.getRuleClassDefinition(ruleDoc.getRuleName()).getClass();
for (Attribute attribute : ruleClass.getAttributes()) {
String attrName = attribute.getName();
List<RuleDocumentationAttribute> attributeDocList =
@@ -167,7 +167,9 @@ public class BuildDocCollector {
int minLevel = Integer.MAX_VALUE;
RuleDocumentationAttribute bestAttributeDoc = null;
for (RuleDocumentationAttribute attributeDoc : attributeDocList) {
- int level = attributeDoc.getDefinitionClassAncestryLevel(ruleDefinition);
+ int level = attributeDoc.getDefinitionClassAncestryLevel(
+ ruleDefinition,
+ ruleClassProvider);
if (level >= 0 && level < minLevel) {
bestAttributeDoc = attributeDoc;
minLevel = level;
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);
diff --git a/src/main/java/com/google/devtools/build/docgen/SourceFileReader.java b/src/main/java/com/google/devtools/build/docgen/SourceFileReader.java
index 78f0b6dae0..433d3962aa 100644
--- a/src/main/java/com/google/devtools/build/docgen/SourceFileReader.java
+++ b/src/main/java/com/google/devtools/build/docgen/SourceFileReader.java
@@ -213,7 +213,7 @@ public class SourceFileReader {
final ListMultimap<String, RuleDocumentationAttribute> docAttributes) {
// End of a attribute, create RuleDocumentationAttribute object
docAttributes.put(attributeName, RuleDocumentationAttribute.create(
- ruleClassProvider.getRuleClassDefinition(ruleName),
+ ruleClassProvider.getRuleClassDefinition(ruleName).getClass(),
attributeName, sb.toString(), startLineCnt, javaSourceFilePath, flags));
sb = new StringBuilder();
inBlazeAttributeDocs = false;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
index 56170ba839..e4a4a2c9dc 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
@@ -92,13 +92,10 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
private final List<Class<? extends FragmentOptions>> configurationOptions = new ArrayList<>();
private final Map<String, RuleClass> ruleClassMap = new HashMap<>();
- private final Map<String, Class<? extends RuleDefinition>> ruleDefinitionMap =
- new HashMap<>();
+ private final Map<String, RuleDefinition> ruleDefinitionMap = new HashMap<>();
private final Map<String, Class<? extends NativeAspectFactory>> aspectFactoryMap =
new HashMap<>();
private final Map<Class<? extends RuleDefinition>, RuleClass> ruleMap = new HashMap<>();
- private final Map<Class<? extends RuleDefinition>, RuleDefinition> ruleDefinitionInstanceCache =
- new HashMap<>();
private final Digraph<Class<? extends RuleDefinition>> dependencyGraph =
new Digraph<>();
private ConfigurationCollectionFactory configurationCollectionFactory;
@@ -155,7 +152,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
public Builder addRuleDefinition(RuleDefinition ruleDefinition) {
Class<? extends RuleDefinition> ruleDefinitionClass = ruleDefinition.getClass();
- ruleDefinitionInstanceCache.put(ruleDefinitionClass, ruleDefinition);
+ ruleDefinitionMap.put(ruleDefinitionClass.getName(), ruleDefinition);
dependencyGraph.createNode(ruleDefinitionClass);
for (Class<? extends RuleDefinition> ancestor : ruleDefinition.getMetadata().ancestors()) {
dependencyGraph.addEdge(ancestor, ruleDefinitionClass);
@@ -214,7 +211,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
}
private RuleClass commitRuleDefinition(Class<? extends RuleDefinition> definitionClass) {
- RuleDefinition instance = checkNotNull(ruleDefinitionInstanceCache.get(definitionClass),
+ RuleDefinition instance = checkNotNull(ruleDefinitionMap.get(definitionClass.getName()),
"addRuleDefinition(new %s()) should be called before build()", definitionClass.getName());
RuleDefinition.Metadata metadata = instance.getMetadata();
@@ -250,7 +247,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
RuleClass ruleClass = instance.build(builder, this);
ruleMap.put(definitionClass, ruleClass);
ruleClassMap.put(ruleClass.getName(), ruleClass);
- ruleDefinitionMap.put(ruleClass.getName(), definitionClass);
+ ruleDefinitionMap.put(ruleClass.getName(), instance);
return ruleClass;
}
@@ -340,9 +337,9 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
private final ImmutableMap<String, RuleClass> ruleClassMap;
/**
- * Maps rule class name to the rule definition metaclasses.
+ * Maps rule class name to the rule definition objects.
*/
- private final ImmutableMap<String, Class<? extends RuleDefinition>> ruleDefinitionMap;
+ private final ImmutableMap<String, RuleDefinition> ruleDefinitionMap;
/**
* Maps aspect name to the aspect factory meta class.
@@ -383,7 +380,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
String runfilesPrefix,
String toolsRepository,
ImmutableMap<String, RuleClass> ruleClassMap,
- ImmutableMap<String, Class<? extends RuleDefinition>> ruleDefinitionMap,
+ ImmutableMap<String, RuleDefinition> ruleDefinitionMap,
ImmutableMap<String, Class<? extends NativeAspectFactory>> aspectFactoryMap,
String defaultWorkspaceFilePrefix,
String defaultWorkspaceFileSuffix,
@@ -467,7 +464,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
/**
* Returns the definition of the rule class definition with the specified name.
*/
- public Class<? extends RuleDefinition> getRuleClassDefinition(String ruleClassName) {
+ public RuleDefinition getRuleClassDefinition(String ruleClassName) {
return ruleDefinitionMap.get(ruleClassName);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch1ExtensionRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch1ExtensionRule.java
index 04bf382eec..4adb8e911b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch1ExtensionRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch1ExtensionRule.java
@@ -60,7 +60,7 @@ public class AppleWatch1ExtensionRule implements RuleDefinition {
.mandatory()
.direct_compile_time_input()
.cfg(AppleWatch1Extension.MINIMUM_OS_AND_SPLIT_ARCH_TRANSITION))
- /* <!-- #BLAZE_RULE($apple_watch1_extension).ATTRIBUTE(deps) -->
+ /* <!-- #BLAZE_RULE(apple_watch1_extension).ATTRIBUTE(app_deps) -->
The list of targets whose resources files are bundled together to form final watch
application bundle.
<!-- #END_BLAZE_RULE.ATTRIBUTE -->*/
@@ -73,7 +73,6 @@ public class AppleWatch1ExtensionRule implements RuleDefinition {
}
@Override
-
public Metadata getMetadata() {
return RuleDefinition.Metadata.builder()
.name("apple_watch1_extension")