diff options
author | Luis Fernando Pino Duque <lpino@google.com> | 2016-04-26 09:31:27 +0000 |
---|---|---|
committer | Yun Peng <pcloudy@google.com> | 2016-04-26 14:39:16 +0000 |
commit | 2b0b5cc078e9acc4f9b4908fb6c835119f295ce1 (patch) | |
tree | aa436c00d72a0a0909162fb90d60a5ad9cd07bfa /src/main/java/com | |
parent | 6fd9bf133c8c1d33c661518e2a23e43a47a113fe (diff) |
Fix the documentation generator to use rule definition instances instead of classes.
--
MOS_MIGRATED_REVID=120794657
Diffstat (limited to 'src/main/java/com')
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") |