Refactor ProviderInfo into a proto
RELNOTES: None.
PiperOrigin-RevId: 252652040
diff --git a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
index b14030b..ae0d6f0 100644
--- a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
+++ b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
@@ -105,8 +105,9 @@
import com.google.devtools.build.skydoc.rendering.DocstringParseException;
import com.google.devtools.build.skydoc.rendering.FunctionUtil;
import com.google.devtools.build.skydoc.rendering.MarkdownRenderer;
-import com.google.devtools.build.skydoc.rendering.ProviderInfo;
+import com.google.devtools.build.skydoc.rendering.ProviderInfoWrapper;
import com.google.devtools.build.skydoc.rendering.RuleInfoWrapper;
+import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.ProviderInfo;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.RuleInfo;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.UserDefinedFunctionInfo;
import com.google.devtools.common.options.OptionsParser;
@@ -204,7 +205,7 @@
Label targetFileLabel = Label.parseAbsolute(targetFileLabelString, ImmutableMap.of());
ImmutableMap.Builder<String, RuleInfo> ruleInfoMap = ImmutableMap.builder();
- ImmutableMap.Builder<String, ProviderInfo> providerInfoMap = ImmutableMap.builder();
+ ImmutableMap.Builder<String, ProviderInfoWrapper> providerInfoMap = ImmutableMap.builder();
ImmutableMap.Builder<String, UserDefinedFunction> userDefinedFunctions = ImmutableMap.builder();
try {
@@ -226,7 +227,7 @@
ruleInfoMap.build().entrySet().stream()
.filter(entry -> validSymbolName(symbolNames, entry.getKey()))
.collect(ImmutableMap.toImmutableMap(Entry::getKey, Entry::getValue));
- Map<String, ProviderInfo> filteredProviderInfos =
+ Map<String, ProviderInfoWrapper> filteredProviderInfos =
providerInfoMap.build().entrySet().stream()
.filter(entry -> validSymbolName(symbolNames, entry.getKey()))
.collect(ImmutableMap.toImmutableMap(Entry::getKey, Entry::getValue));
@@ -273,10 +274,13 @@
}
private static void printProviderInfos(
- PrintWriter printWriter, MarkdownRenderer renderer, Map<String, ProviderInfo> providerInfos)
+ PrintWriter printWriter,
+ MarkdownRenderer renderer,
+ Map<String, ProviderInfoWrapper> providerInfos)
throws IOException {
- for (Entry<String, ProviderInfo> entry : providerInfos.entrySet()) {
- printProviderInfo(printWriter, renderer, entry.getKey(), entry.getValue());
+ for (Entry<String, ProviderInfoWrapper> entry : providerInfos.entrySet()) {
+ ProviderInfoWrapper infoWrapper = entry.getValue();
+ printProviderInfo(printWriter, renderer, entry.getKey(), infoWrapper.getProviderInfo());
printWriter.println();
}
}
@@ -286,6 +290,7 @@
MarkdownRenderer renderer,
Map<String, UserDefinedFunction> userDefinedFunctions)
throws IOException {
+
for (Entry<String, UserDefinedFunction> entry : userDefinedFunctions.entrySet()) {
try {
UserDefinedFunctionInfo functionInfo =
@@ -342,22 +347,24 @@
StarlarkSemantics semantics,
Label label,
ImmutableMap.Builder<String, RuleInfo> ruleInfoMap,
- ImmutableMap.Builder<String, ProviderInfo> providerInfoMap,
+ ImmutableMap.Builder<String, ProviderInfoWrapper> providerInfoMap,
ImmutableMap.Builder<String, UserDefinedFunction> userDefinedFunctionMap)
throws InterruptedException, IOException, LabelSyntaxException, EvalException,
StarlarkEvaluationException {
List<RuleInfoWrapper> ruleInfoList = new ArrayList<>();
- List<ProviderInfo> providerInfoList = new ArrayList<>();
+
+ List<ProviderInfoWrapper> providerInfoList = new ArrayList<>();
Environment env = recursiveEval(semantics, label, ruleInfoList, providerInfoList);
Map<BaseFunction, RuleInfoWrapper> ruleFunctions =
ruleInfoList.stream()
.collect(
Collectors.toMap(RuleInfoWrapper::getIdentifierFunction, Functions.identity()));
- Map<BaseFunction, ProviderInfo> providerInfos =
+
+ Map<BaseFunction, ProviderInfoWrapper> providerInfos =
providerInfoList.stream()
- .collect(Collectors.toMap(ProviderInfo::getIdentifier, Functions.identity()));
+ .collect(Collectors.toMap(ProviderInfoWrapper::getIdentifier, Functions.identity()));
// Sort the bindings so their ordering is deterministic.
TreeMap<String, Object> sortedBindings = new TreeMap<>(env.getGlobals().getExportedBindings());
@@ -368,7 +375,7 @@
ruleInfoMap.put(envEntry.getKey(), ruleInfo);
}
if (providerInfos.containsKey(envEntry.getValue())) {
- ProviderInfo providerInfo = providerInfos.get(envEntry.getValue());
+ ProviderInfoWrapper providerInfo = providerInfos.get(envEntry.getValue());
providerInfoMap.put(envEntry.getKey(), providerInfo);
}
if (envEntry.getValue() instanceof UserDefinedFunction) {
@@ -403,7 +410,7 @@
StarlarkSemantics semantics,
Label label,
List<RuleInfoWrapper> ruleInfoList,
- List<ProviderInfo> providerInfoList)
+ List<ProviderInfoWrapper> providerInfoList)
throws InterruptedException, IOException, LabelSyntaxException, StarlarkEvaluationException {
Path path = pathOfLabel(label);
@@ -471,7 +478,7 @@
BuildFileAST buildFileAST,
Map<String, Extension> imports,
List<RuleInfoWrapper> ruleInfoList,
- List<ProviderInfo> providerInfoList)
+ List<ProviderInfoWrapper> providerInfoList)
throws InterruptedException, StarlarkEvaluationException {
Environment env =
@@ -496,7 +503,7 @@
* invocation information will be added
*/
private static GlobalFrame globalFrame(
- List<RuleInfoWrapper> ruleInfoList, List<ProviderInfo> providerInfoList) {
+ List<RuleInfoWrapper> ruleInfoList, List<ProviderInfoWrapper> providerInfoList) {
TopLevelBootstrap topLevelBootstrap =
new TopLevelBootstrap(
new FakeBuildApiGlobals(),
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java
index 1a3e9fc..87f63cb 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java
@@ -33,12 +33,14 @@
import com.google.devtools.build.lib.syntax.SkylarkDict;
import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.SkylarkType;
-import com.google.devtools.build.skydoc.rendering.ProviderInfo;
+import com.google.devtools.build.skydoc.rendering.ProviderInfoWrapper;
import com.google.devtools.build.skydoc.rendering.RuleInfoWrapper;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AttributeInfo;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AttributeType;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.ProviderFieldInfo;
+import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.ProviderInfo;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.RuleInfo;
+import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
@@ -56,7 +58,8 @@
private static final FakeDescriptor IMPLICIT_NAME_ATTRIBUTE_DESCRIPTOR =
new FakeDescriptor(AttributeType.NAME, "A unique name for this target.", true);
private final List<RuleInfoWrapper> ruleInfoList;
- private final List<ProviderInfo> providerInfoList;
+
+ private final List<ProviderInfoWrapper> providerInfoList;
/**
* Constructor.
@@ -67,7 +70,7 @@
* information will be added
*/
public FakeSkylarkRuleFunctionsApi(
- List<RuleInfoWrapper> ruleInfoList, List<ProviderInfo> providerInfoList) {
+ List<RuleInfoWrapper> ruleInfoList, List<ProviderInfoWrapper> providerInfoList) {
this.ruleInfoList = ruleInfoList;
this.providerInfoList = providerInfoList;
}
@@ -98,7 +101,7 @@
} else {
// fields is NONE, so there is no field information to add.
}
- providerInfoList.add(new ProviderInfo(fakeProvider, doc, providerFieldInfos.build()));
+ providerInfoList.add(forProviderInfo(fakeProvider, doc, providerFieldInfos.build()));
return fakeProvider;
}
@@ -107,6 +110,12 @@
return ProviderFieldInfo.newBuilder().setName(name).setDocString(docString).build();
}
+ /** Constructor for ProviderInfoWrapper. */
+ public ProviderInfoWrapper forProviderInfo(
+ BaseFunction identifier, String docString, Collection<ProviderFieldInfo> fieldInfos) {
+ return new ProviderInfoWrapper(identifier, docString, fieldInfos);
+ }
+
@Override
public BaseFunction rule(
BaseFunction implementation,
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownRenderer.java b/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownRenderer.java
index f6fd3ef..c6f8f2a 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownRenderer.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownRenderer.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.skydoc.rendering;
+import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.ProviderInfo;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.RuleInfo;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.UserDefinedFunctionInfo;
import java.io.IOException;
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownUtil.java b/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownUtil.java
index 251b78d..fe19424 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownUtil.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/MarkdownUtil.java
@@ -18,6 +18,7 @@
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AttributeInfo;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.AttributeType;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.FunctionParamInfo;
+import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.ProviderInfo;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.RuleInfo;
import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.UserDefinedFunctionInfo;
import java.util.List;
@@ -51,9 +52,10 @@
*/
@SuppressWarnings("unused") // Used by markdown template.
public String providerSummary(String providerName, ProviderInfo providerInfo) {
- List<String> fieldNames = providerInfo.getFields().stream()
- .map(field -> field.getName())
- .collect(Collectors.toList());
+ List<String> fieldNames =
+ providerInfo.getFieldInfosList().stream()
+ .map(field -> field.getName())
+ .collect(Collectors.toList());
return summary(providerName, fieldNames);
}
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/ProviderInfo.java b/src/main/java/com/google/devtools/build/skydoc/rendering/ProviderInfo.java
deleted file mode 100644
index 34b4d8e..0000000
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/ProviderInfo.java
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2018 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.skydoc.rendering;
-
-import com.google.devtools.build.lib.syntax.BaseFunction;
-import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.ProviderFieldInfo;
-import java.util.Collection;
-
-/**
- * Stores information about a starlark provider definition.
- *
- * For example, in <pre>FooInfo = provider(doc = 'My provider', fields = {'bar' : 'a bar'})</pre>,
- * this contains all information about the definition of FooInfo for purposes of generating its
- * documentation.
- */
-public class ProviderInfo {
-
- private final BaseFunction identifier;
- private final String docString;
- private final Collection<ProviderFieldInfo> fieldInfos;
-
- public ProviderInfo(BaseFunction identifier,
- String docString,
- Collection<ProviderFieldInfo> fieldInfos) {
- this.identifier = identifier;
- this.docString = docString;
- this.fieldInfos = fieldInfos;
- }
-
- public BaseFunction getIdentifier() {
- return identifier;
- }
-
- public String getDocString() {
- return docString;
- }
-
- public Collection<ProviderFieldInfo> getFields() {
- return fieldInfos;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/ProviderInfoWrapper.java b/src/main/java/com/google/devtools/build/skydoc/rendering/ProviderInfoWrapper.java
new file mode 100644
index 0000000..ed7ec25
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/ProviderInfoWrapper.java
@@ -0,0 +1,52 @@
+// Copyright 2019 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.skydoc.rendering;
+
+import com.google.devtools.build.lib.syntax.BaseFunction;
+import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.ProviderFieldInfo;
+import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.ProviderInfo;
+import java.util.Collection;
+
+/**
+ * Stores information about a starlark provider definition, comprised of BaseFunction identifier and
+ * a {@link ProviderInfo} proto.
+ *
+ * <p>For example, in
+ *
+ * <pre>FooInfo = provider(doc = 'My provider', fields = {'bar' : 'a bar'})</pre>
+ *
+ * , this contains all information about the definition of FooInfo for purposes of generating its
+ * documentation, as well as a unique BaseFunction identifier.
+ */
+public class ProviderInfoWrapper {
+
+ private final BaseFunction identifier;
+ private final ProviderInfo providerInfo;
+
+ public ProviderInfoWrapper(
+ BaseFunction identifier, String docString, Collection<ProviderFieldInfo> fieldInfos) {
+ this.identifier = identifier;
+ this.providerInfo =
+ ProviderInfo.newBuilder().setDocString(docString).addAllFieldInfos(fieldInfos).build();
+ }
+
+ public BaseFunction getIdentifier() {
+ return identifier;
+ }
+
+ public ProviderInfo getProviderInfo() {
+ return providerInfo;
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/proto/stardoc_output.proto b/src/main/java/com/google/devtools/build/skydoc/rendering/proto/stardoc_output.proto
index fa9d011..539245a 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/proto/stardoc_output.proto
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/proto/stardoc_output.proto
@@ -115,3 +115,12 @@
// The description of the provider.
string doc_string = 2;
}
+
+// Representation of a Starlark provider definition.
+message ProviderInfo {
+ // The description of the provider.
+ string doc_string = 1;
+
+ // The fields of the provider.
+ repeated ProviderFieldInfo field_infos = 2;
+}
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/templates/provider.vm b/src/main/java/com/google/devtools/build/skydoc/rendering/templates/provider.vm
index 3d13b02..2910576 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/templates/provider.vm
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/templates/provider.vm
@@ -8,7 +8,7 @@
${providerInfo.docString}
-#if (!$providerInfo.fields.isEmpty())
+#if (!$providerInfo.fieldInfosList.isEmpty())
#[[###]]# Fields
<table class="params-table">
@@ -17,7 +17,7 @@
<col class="col-description" />
</colgroup>
<tbody>
-#foreach ($field in $providerInfo.fields)
+#foreach ($field in $providerInfo.fieldInfosList)
<tr id="${providerName}-${field.name}">
<td><code>${field.name}</code></td>
<td>