aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar jmmv <jmmv@google.com>2017-09-06 17:27:13 +0200
committerGravatar Yun Peng <pcloudy@google.com>2017-09-07 09:57:10 +0200
commit313a0e04eb7c173359b1e18a6cbe5dd5915bb0a8 (patch)
tree01ea3d06385aaf3703099211eb6e7b489297bead /src
parent1926b519113328c5041fd1044592f030d7580385 (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')
-rw-r--r--src/main/java/com/google/devtools/build/docgen/BlazeRuleHelpPrinter.java9
-rw-r--r--src/main/java/com/google/devtools/build/docgen/BuildDocCollector.java12
-rw-r--r--src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaGenerator.java23
-rw-r--r--src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaOptions.java10
-rw-r--r--src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaProcessor.java15
-rw-r--r--src/main/java/com/google/devtools/build/docgen/MultiPageBuildEncyclopediaProcessor.java9
-rw-r--r--src/main/java/com/google/devtools/build/docgen/SinglePageBuildEncyclopediaProcessor.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/BUILD1
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/commands/HelpCommand.java3
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(