diff options
author | jmmv <jmmv@google.com> | 2017-09-06 17:27:13 +0200 |
---|---|---|
committer | Yun Peng <pcloudy@google.com> | 2017-09-07 09:57:10 +0200 |
commit | 313a0e04eb7c173359b1e18a6cbe5dd5915bb0a8 (patch) | |
tree | 01ea3d06385aaf3703099211eb6e7b489297bead /src | |
parent | 1926b519113328c5041fd1044592f030d7580385 (diff) |
Remove the product name from ConfiguredRuleClassProvider.
The RuleClassProvider includes a copy of the product name, parameterized
for both Blaze and Bazel. Apparently, this is exclusively there so that
the standalone docgen binary can "magically" guess the product name.
This is strange and adds additional complexity to the Bazel core codebase
for no strong reason. Instead, just add a new flag to docgen that takes
the product name and pass it in explicitly.
RELNOTES: None.
PiperOrigin-RevId: 167724033
Diffstat (limited to 'src')
11 files changed, 58 insertions, 49 deletions
diff --git a/src/main/java/com/google/devtools/build/docgen/BlazeRuleHelpPrinter.java b/src/main/java/com/google/devtools/build/docgen/BlazeRuleHelpPrinter.java index 789554f312..b34bec81b7 100644 --- a/src/main/java/com/google/devtools/build/docgen/BlazeRuleHelpPrinter.java +++ b/src/main/java/com/google/devtools/build/docgen/BlazeRuleHelpPrinter.java @@ -28,13 +28,12 @@ public class BlazeRuleHelpPrinter { private static Map<String, RuleDocumentation> ruleDocMap = null; - /** - * Returns the documentation of the given rule to be printed on the console. - */ - public static String getRuleDoc(String ruleName, ConfiguredRuleClassProvider provider) { + /** Returns the documentation of the given rule to be printed on the console. */ + public static String getRuleDoc( + String ruleName, String productName, ConfiguredRuleClassProvider provider) { if (ruleDocMap == null) { try { - BuildDocCollector collector = new BuildDocCollector(provider, false); + BuildDocCollector collector = new BuildDocCollector(productName, provider, false); Map<String, RuleDocumentation> ruleDocs = collector.collect( ImmutableList.of("java/com/google/devtools/build/lib/view", "java/com/google/devtools/build/lib/rules"), null); 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 31133cc605..df250d2e2f 100644 --- a/src/main/java/com/google/devtools/build/docgen/BuildDocCollector.java +++ b/src/main/java/com/google/devtools/build/docgen/BuildDocCollector.java @@ -44,10 +44,13 @@ import java.util.TreeMap; public class BuildDocCollector { private static final Splitter SHARP_SPLITTER = Splitter.on('#').limit(2).trimResults(); - private ConfiguredRuleClassProvider ruleClassProvider; - private boolean printMessages; + private final String productName; + private final ConfiguredRuleClassProvider ruleClassProvider; + private final boolean printMessages; - public BuildDocCollector(ConfiguredRuleClassProvider ruleClassProvider, boolean printMessages) { + public BuildDocCollector( + String productName, ConfiguredRuleClassProvider ruleClassProvider, boolean printMessages) { + this.productName = productName; this.ruleClassProvider = ruleClassProvider; this.printMessages = printMessages; } @@ -160,8 +163,7 @@ public class BuildDocCollector { */ public Map<String, RuleDocumentation> collect(List<String> inputDirs, String blackList) throws BuildEncyclopediaDocException, IOException { - RuleLinkExpander expander = new RuleLinkExpander( - ruleClassProvider.getProductName(), /* singlePage */ false); + RuleLinkExpander expander = new RuleLinkExpander(productName, /* singlePage */ false); return collect(inputDirs, blackList, expander); } diff --git a/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaGenerator.java b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaGenerator.java index bc38cfc7e7..52f34478eb 100644 --- a/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaGenerator.java +++ b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaGenerator.java @@ -26,10 +26,11 @@ import java.util.Collections; public class BuildEncyclopediaGenerator { private static void printUsage(OptionsParser parser) { System.err.println( - "Usage: docgen_bin -p rule_class_provider (-i input_dir)+\n" - + " [-o outputdir] [-b blacklist] [-1] [-h]\n\n" - + "Generates the Build Encyclopedia from embedded native rule documentation.\n" - + "The rule class provider (-p) and at least one input_dir (-i) must be specified.\n"); + "Usage: docgen_bin -n product_name -p rule_class_provider (-i input_dir)+\n" + + " [-o outputdir] [-b blacklist] [-1] [-h]\n\n" + + "Generates the Build Encyclopedia from embedded native rule documentation.\n" + + "The product name (-n), rule class provider (-p) and at least one input_dir\n" + + "(-i) must be specified.\n"); System.err.println( parser.describeOptions( Collections.<String, String>emptyMap(), OptionsParser.HelpVerbosity.LONG)); @@ -62,7 +63,9 @@ public class BuildEncyclopediaGenerator { Runtime.getRuntime().exit(0); } - if (options.inputDirs.size() == 0 || options.provider.isEmpty()) { + if (options.productName.isEmpty() + || options.inputDirs.isEmpty() + || options.provider.isEmpty()) { printUsage(parser); Runtime.getRuntime().exit(1); } @@ -70,11 +73,13 @@ public class BuildEncyclopediaGenerator { try { BuildEncyclopediaProcessor processor = null; if (options.singlePage) { - processor = new SinglePageBuildEncyclopediaProcessor( - createRuleClassProvider(options.provider)); + processor = + new SinglePageBuildEncyclopediaProcessor( + options.productName, createRuleClassProvider(options.provider)); } else { - processor = new MultiPageBuildEncyclopediaProcessor( - createRuleClassProvider(options.provider)); + processor = + new MultiPageBuildEncyclopediaProcessor( + options.productName, createRuleClassProvider(options.provider)); } processor.generateDocumentation( options.inputDirs, options.outputDir, options.blacklist); diff --git a/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaOptions.java b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaOptions.java index b7c6b51e73..3c68ccb135 100644 --- a/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaOptions.java +++ b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaOptions.java @@ -24,6 +24,16 @@ import java.util.List; */ public class BuildEncyclopediaOptions extends OptionsBase { @Option( + name = "product_name", + abbrev = 'n', + defaultValue = "", + documentationCategory = OptionDocumentationCategory.UNCATEGORIZED, + effectTags = {OptionEffectTag.UNKNOWN}, + help = "Name of the product to put in the documentation" + ) + public String productName; + + @Option( name = "input_dir", abbrev = 'i', defaultValue = "", diff --git a/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaProcessor.java b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaProcessor.java index 7abe7f12c1..82498d1502 100644 --- a/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaProcessor.java +++ b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaProcessor.java @@ -45,14 +45,19 @@ public abstract class BuildEncyclopediaProcessor { } }; - protected ConfiguredRuleClassProvider ruleClassProvider; + /** Name of the product to insert into the documentation. */ + protected final String productName; + + /** Rule class provider from which to extract the rule class hierarchy and attributes. */ + protected final ConfiguredRuleClassProvider ruleClassProvider; /** - * Creates the BuildEncyclopediaProcessor instance. The ruleClassProvider parameter - * is used for rule class hierarchy and attribute checking. - * + * Creates the BuildEncyclopediaProcessor instance. The ruleClassProvider parameter is used for + * rule class hierarchy and attribute checking. */ - public BuildEncyclopediaProcessor(ConfiguredRuleClassProvider ruleClassProvider) { + public BuildEncyclopediaProcessor( + String productName, ConfiguredRuleClassProvider ruleClassProvider) { + this.productName = productName; this.ruleClassProvider = Preconditions.checkNotNull(ruleClassProvider); } diff --git a/src/main/java/com/google/devtools/build/docgen/MultiPageBuildEncyclopediaProcessor.java b/src/main/java/com/google/devtools/build/docgen/MultiPageBuildEncyclopediaProcessor.java index 64077c91da..b87d1d9c2b 100644 --- a/src/main/java/com/google/devtools/build/docgen/MultiPageBuildEncyclopediaProcessor.java +++ b/src/main/java/com/google/devtools/build/docgen/MultiPageBuildEncyclopediaProcessor.java @@ -24,8 +24,9 @@ import java.util.Map; * Assembles the multi-page version of the Build Encyclopedia with one page per rule family. */ public class MultiPageBuildEncyclopediaProcessor extends BuildEncyclopediaProcessor { - public MultiPageBuildEncyclopediaProcessor(ConfiguredRuleClassProvider ruleClassProvider) { - super(ruleClassProvider); + public MultiPageBuildEncyclopediaProcessor( + String productName, ConfiguredRuleClassProvider ruleClassProvider) { + super(productName, ruleClassProvider); } /** @@ -39,8 +40,8 @@ public class MultiPageBuildEncyclopediaProcessor extends BuildEncyclopediaProces @Override public void generateDocumentation(List<String> inputDirs, String outputDir, String blackList) throws BuildEncyclopediaDocException, IOException { - BuildDocCollector collector = new BuildDocCollector(ruleClassProvider, false); - RuleLinkExpander expander = new RuleLinkExpander(ruleClassProvider.getProductName(), false); + BuildDocCollector collector = new BuildDocCollector(productName, ruleClassProvider, false); + RuleLinkExpander expander = new RuleLinkExpander(productName, false); Map<String, RuleDocumentation> ruleDocEntries = collector.collect( inputDirs, blackList, expander); warnAboutUndocumentedRules( diff --git a/src/main/java/com/google/devtools/build/docgen/SinglePageBuildEncyclopediaProcessor.java b/src/main/java/com/google/devtools/build/docgen/SinglePageBuildEncyclopediaProcessor.java index 56f7d29386..395455bba2 100644 --- a/src/main/java/com/google/devtools/build/docgen/SinglePageBuildEncyclopediaProcessor.java +++ b/src/main/java/com/google/devtools/build/docgen/SinglePageBuildEncyclopediaProcessor.java @@ -24,8 +24,9 @@ import java.util.Map; * Assembles the single-page version of the Build Encyclopedia. */ public class SinglePageBuildEncyclopediaProcessor extends BuildEncyclopediaProcessor { - public SinglePageBuildEncyclopediaProcessor(ConfiguredRuleClassProvider ruleClassProvider) { - super(ruleClassProvider); + public SinglePageBuildEncyclopediaProcessor( + String productName, ConfiguredRuleClassProvider ruleClassProvider) { + super(productName, ruleClassProvider); } /** @@ -39,8 +40,8 @@ public class SinglePageBuildEncyclopediaProcessor extends BuildEncyclopediaProce @Override public void generateDocumentation(List<String> inputDirs, String outputDir, String blackList) throws BuildEncyclopediaDocException, IOException { - BuildDocCollector collector = new BuildDocCollector(ruleClassProvider, false); - RuleLinkExpander expander = new RuleLinkExpander(ruleClassProvider.getProductName(), true); + BuildDocCollector collector = new BuildDocCollector(productName, ruleClassProvider, false); + RuleLinkExpander expander = new RuleLinkExpander(productName, true); Map<String, RuleDocumentation> ruleDocEntries = collector.collect( inputDirs, blackList, expander); warnAboutUndocumentedRules( diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD index 854119b9e6..6149e5fc02 100644 --- a/src/main/java/com/google/devtools/build/lib/BUILD +++ b/src/main/java/com/google/devtools/build/lib/BUILD @@ -1123,6 +1123,7 @@ genrule( cmd = ( "mkdir -p $(@D)/be && " + "$(location //src/main/java/com/google/devtools/build/docgen:docgen_bin)" + + " --product_name=bazel" + " --provider=com.google.devtools.build.lib.bazel.rules.BazelRuleClassProvider" + " --input_dir=$$PWD/src/main/java/com/google/devtools/build/lib" + " --output_dir=$(@D)/be &&" + 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 b929b99ec5..ef01005a9c 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 @@ -195,7 +195,6 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { /** Builder for {@link ConfiguredRuleClassProvider}. */ public static class Builder implements RuleDefinitionEnvironment { - private String productName; private final StringBuilder defaultWorkspaceFilePrefix = new StringBuilder(); private final StringBuilder defaultWorkspaceFileSuffix = new StringBuilder(); private Label preludeLabel; @@ -228,11 +227,6 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { // TODO(pcloudy): Remove this field after Bazel rule definitions are not used internally. private String nativeLauncherLabel; - public Builder setProductName(String productName) { - this.productName = productName; - return this; - } - public Builder setNativeLauncherLabel(String label) { this.nativeLauncherLabel = label; return this; @@ -425,7 +419,6 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { } return new ConfiguredRuleClassProvider( - productName, preludeLabel, runfilesPrefix, toolsRepository, @@ -489,8 +482,6 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { } }); - private final String productName; - /** * Default content that should be added at the beginning of the WORKSPACE file. */ @@ -558,7 +549,6 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { private final Environment.Frame globals; private ConfiguredRuleClassProvider( - String productName, Label preludeLabel, String runfilesPrefix, String toolsRepository, @@ -575,7 +565,6 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { PrerequisiteValidator prerequisiteValidator, ImmutableMap<String, Object> skylarkAccessibleJavaClasses, ImmutableList<Class<?>> skylarkModules) { - this.productName = productName; this.preludeLabel = preludeLabel; this.runfilesPrefix = runfilesPrefix; this.toolsRepository = toolsRepository; @@ -593,10 +582,6 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { this.globals = createGlobals(skylarkAccessibleJavaClasses, skylarkModules); } - public String getProductName() { - return productName; - } - public PrerequisiteValidator getPrerequisiteValidator() { return prerequisiteValidator; } 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 3805c8b0db..d6e4f3eafb 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 @@ -209,7 +209,6 @@ public class BazelRuleClassProvider { @Override public void init(Builder builder) { builder - .setProductName("bazel") .setPrelude("//tools/build_rules:prelude_bazel") .setNativeLauncherLabel("//tools/launcher:launcher") .setRunfilesPrefix(Label.DEFAULT_REPOSITORY_DIRECTORY) diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/HelpCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/HelpCommand.java index 87cc44c09f..5e42732d5e 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/commands/HelpCommand.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/HelpCommand.java @@ -200,7 +200,8 @@ public final class HelpCommand implements BlazeCommand { RuleClass ruleClass = provider.getRuleClassMap().get(helpSubject); if (ruleClass != null && ruleClass.isDocumented()) { // There is a rule with a corresponding name - outErr.printOut(BlazeRuleHelpPrinter.getRuleDoc(helpSubject, provider)); + outErr.printOut( + BlazeRuleHelpPrinter.getRuleDoc(helpSubject, runtime.getProductName(), provider)); return ExitCode.SUCCESS; } else { env.getReporter().handle(Event.error( |