Skip to content

Commit 0fc551a

Browse files
authored
feat: generate overview + include javaType (#80)
* feat: generate overvew + include javaType * chore: fix class pretty-print should be on pre not code * only include javaType if using in template
1 parent 061140e commit 0fc551a

31 files changed

Lines changed: 209 additions & 43 deletions

third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ public YmlFilesBuilder(DocletEnvironment environment, String outputPath,
5959
}
6060

6161
public boolean build() {
62+
MetadataFile projectMetadataFile = new MetadataFile(outputPath,"overview.yml");;
63+
List<MetadataFileItem> packageItems = new ArrayList<>();
6264
List<MetadataFile> packageMetadataFiles = new ArrayList<>();
6365
List<MetadataFile> classMetadataFiles = new ArrayList<>();
6466

@@ -78,6 +80,7 @@ public boolean build() {
7880
}
7981

8082
for (MetadataFile packageFile : packageMetadataFiles) {
83+
packageItems.addAll(packageFile.getItems());
8184
String packageFileName = packageFile.getFileName();
8285
for (MetadataFile classFile : classMetadataFiles) {
8386
String classFileName = classFile.getFileName();
@@ -88,10 +91,11 @@ public boolean build() {
8891
}
8992
}
9093
}
91-
94+
buildProjectMetadataFile(packageItems, projectMetadataFile);
9295
populateUidValues(packageMetadataFiles, classMetadataFiles);
9396
updateExternalReferences(classMetadataFiles);
9497

98+
FileUtil.dumpToFile(projectMetadataFile);
9599
packageMetadataFiles.forEach(FileUtil::dumpToFile);
96100
classMetadataFiles.forEach(FileUtil::dumpToFile);
97101
FileUtil.dumpToFile(tocFile);
@@ -129,6 +133,30 @@ void buildFilesForInnerClasses(Element element, TocTypeMap tocTypeMap, List<Meta
129133
}
130134
}
131135

136+
137+
void buildProjectMetadataFile(List<MetadataFileItem> packageItems, MetadataFile projectMetadataFile) {
138+
MetadataFileItem projectItem = new MetadataFileItem(LANGS, projectName);
139+
projectItem.setNameWithType(projectName);
140+
projectItem.setFullName(projectName);
141+
projectItem.setType("Namespace");
142+
projectItem.setJavaType("overview");
143+
144+
List<String> children = new ArrayList<>();
145+
List<MetadataFileItem> references = new ArrayList<>();
146+
packageItems.stream().forEach(i -> {
147+
children.add(i.getUid());
148+
MetadataFileItem refItem = new MetadataFileItem(i.getUid());
149+
refItem.setName(i.getName());
150+
refItem.setNameWithType(i.getNameWithType());
151+
refItem.setFullName(i.getFullName());
152+
references.add(refItem);
153+
});
154+
155+
projectItem.getChildren().addAll(children);
156+
projectMetadataFile.getReferences().addAll(references);
157+
projectMetadataFile.getItems().add(projectItem);
158+
}
159+
132160
MetadataFile buildPackageMetadataFile(PackageElement packageElement) {
133161
String fileName = packageLookup.extractHref(packageElement);
134162
MetadataFile packageMetadataFile = new MetadataFile(outputPath, fileName);
@@ -159,10 +187,13 @@ MetadataFileItem buildClassReference(TypeElement classElement) {
159187
}
160188

161189
<T extends Element> void populateItemFields(MetadataFileItem item, BaseLookup<T> lookup, T element) {
162-
item.setName(lookup.extractName(element));
190+
String name = lookup.extractName(element);
191+
item.setName(name);
163192
item.setNameWithType(lookup.extractNameWithType(element));
164193
item.setFullName(lookup.extractFullName(element));
165194
item.setType(lookup.extractType(element));
195+
String javatype = lookup.extractJavaType(element,name);
196+
item.setJavaType(javatype);
166197
item.setSummary(lookup.extractSummary(element));
167198
item.setContent(lookup.extractContent(element));
168199
}
@@ -301,12 +332,14 @@ void addReferencesInfo(TypeElement classElement, MetadataFile classMetadataFile)
301332

302333
MetadataFileItem buildMetadataFileItem(Element element) {
303334
return new MetadataFileItem(LANGS, classItemsLookup.extractUid(element)) {{
335+
String name = classItemsLookup.extractName(element);
304336
setId(classItemsLookup.extractId(element));
305337
setParent(classItemsLookup.extractParent(element));
306-
setName(classItemsLookup.extractName(element));
338+
setName(name);
307339
setNameWithType(classItemsLookup.extractNameWithType(element));
308340
setFullName(classItemsLookup.extractFullName(element));
309341
setType(classItemsLookup.extractType(element));
342+
setJavaType(classItemsLookup.extractJavaType(element, name));
310343
setPackageName(classItemsLookup.extractPackageName(element));
311344
setSummary(classItemsLookup.extractSummary(element));
312345
}};

third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/BaseLookup.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
import javax.lang.model.element.Element;
1515
import javax.lang.model.element.ElementKind;
16+
import javax.lang.model.element.Modifier;
17+
import javax.lang.model.element.TypeElement;
1618
import java.util.*;
1719
import java.util.stream.Collectors;
1820
import java.util.stream.Stream;
@@ -117,6 +119,18 @@ public String extractType(T key) {
117119
return resolve(key).getType();
118120
}
119121

122+
public String extractJavaType(T element, String name) {
123+
if (element.getKind().name().equals(ElementKind.CLASS.name()) && name.contains("Exception")){
124+
return "exception";
125+
}
126+
String javatype = element.getKind().name().toLowerCase().replaceAll("_","");
127+
128+
if (javatype.equals("package") || javatype.equals("overview") || javatype.equals("annotationtype")){
129+
return javatype;
130+
}
131+
return null;
132+
}
133+
120134
public String extractContent(T key) {
121135
return resolve(key).getContent();
122136
}

third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassItemsLookup.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ protected ExtendedMetadataFileItem buildMetadataFileItem(Element element) {
4040
setHref(classQName + ".yml");
4141
setName(elementQName);
4242
setType(determineType(element));
43+
setJavaType(extractJavaType(element, elementQName));
4344
setPackageName(packageName);
4445
setSummary(determineComment(element));
4546
}};

third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/ClassLookup.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import javax.lang.model.element.Element;
1515
import javax.lang.model.element.ElementKind;
16+
import javax.lang.model.element.Modifier;
1617
import javax.lang.model.element.TypeElement;
1718
import javax.lang.model.type.TypeKind;
1819
import javax.lang.model.type.TypeMirror;
@@ -45,6 +46,7 @@ protected ExtendedMetadataFileItem buildMetadataFileItem(TypeElement classElemen
4546
result.setNameWithType(classSNameWithGenericsSupport);
4647
result.setFullName(classQNameWithGenericsSupport);
4748
result.setType(determineType(classElement));
49+
result.setJavaType(extractJavaType(classElement, classSNameWithGenericsSupport));
4850
result.setPackageName(packageName);
4951
result.setSummary(determineComment(classElement));
5052
result.setSuperclass(determineNestedSuperclass(classElement, result, inheritedMethods));

third_party/docfx-doclet-143274/src/main/java/com/microsoft/lookup/PackageLookup.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ protected ExtendedMetadataFileItem buildMetadataFileItem(PackageElement packageE
2626
result.setNameWithType(qName);
2727
result.setFullName(qName);
2828
result.setType(determineType(packageElement));
29+
result.setJavaType(extractJavaType(packageElement, qName));
2930
result.setSummary(determineComment(packageElement));
3031
result.setContent(determinePackageContent(packageElement));
3132
return result;

third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/Guide.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
// for including guides with toc items
2020
// [items: [name: Overview,
21-
// href: index.md,
21+
// href: overview.html,
2222
// name: Version history,
2323
// href: history.md,
2424
// name: name,

third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/MetadataFileItem.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import java.util.List;
1010

1111
@JsonPropertyOrder({"uid", "id", "parent", "children", "href", "langs", "isExternal", "name", "nameWithType",
12-
"fullName", "overload", "overridden", "type", "package", "summary", "syntax", "inheritance", "implements", "exceptions",
12+
"fullName", "overload", "overridden", "type", "javatype", "package", "summary", "syntax", "inheritance", "implements", "exceptions",
1313
"spec.java", "inheritedMembers", "status"})
1414
public class MetadataFileItem implements Comparable<MetadataFileItem> {
1515

@@ -25,6 +25,7 @@ public class MetadataFileItem implements Comparable<MetadataFileItem> {
2525
private String overload;
2626
private String overridden;
2727
private String type;
28+
private String javatype;
2829
@JsonProperty("package")
2930
private String packageName;
3031
private String summary;
@@ -140,10 +141,18 @@ public String getType() {
140141
return type;
141142
}
142143

144+
public String getJavaType() {
145+
return javatype;
146+
}
147+
143148
public void setType(String type) {
144149
this.type = type;
145150
}
146151

152+
public void setJavaType(String javaType) {
153+
this.javatype = javaType;
154+
}
155+
147156
public String getPackageName() {
148157
return packageName;
149158
}

third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public TocContents(String projectName, List<TocItem> items) {
3737
private void createTocContents(String projectName, List<TocItem> items) {
3838
List<Object> tocItems = new ArrayList<>();
3939
// combine guides and tocItems
40+
tocItems.add(new Guide("Overview", "overview.html"));
4041
tocItems.add(new Guide("Version history", "history.md"));
4142
tocItems.addAll(items);
4243
// wrap guides + tocItems with product hierarchy

third_party/docfx-doclet-143274/src/main/java/com/microsoft/util/YamlUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public static String cleanupHtml(String text) {
2828
return text;
2929
}
3030
return text.replaceAll("<pre>([^<]+)</pre>","$1")
31-
.replaceAll("<pre><code>", "<pre><code class=\"prettyprint lang-java\">")
31+
.replaceAll("<pre><code>", "<pre class=\"prettyprint lang-java\"><code>")
3232
.replaceAll("`([^`]+)`", "<code>$1</code>")
3333
.replaceAll("\\[([^]]+)]\\(([^)]+)\\)", "<a href=\"$2\">$1</a>")
3434
.replaceAll("\\[([^]]+)]\\[([^]]+)\\]", "<xref uid=\"$2\" data-throw-if-not-resolved=\"false\">$1</xref>")

third_party/docfx-doclet-143274/src/test/java/com/microsoft/lookup/BaseLookupTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,13 @@
1515
import org.mockito.junit.MockitoJUnitRunner;
1616

1717
import javax.lang.model.element.Element;
18+
import javax.lang.model.element.ElementKind;
19+
import javax.lang.model.element.PackageElement;
1820
import javax.lang.model.element.TypeElement;
1921
import javax.lang.model.util.Elements;
2022
import java.util.Arrays;
2123
import java.util.Collections;
24+
import java.util.HashMap;
2225
import java.util.Set;
2326

2427
import static org.junit.Assert.assertEquals;
@@ -38,6 +41,7 @@ public class BaseLookupTest {
3841
private LinkTree linkTree;
3942
private ReferenceTree referenceTree;
4043
private LiteralTree literalTree;
44+
private TypeElement typeElement;
4145
private BaseLookup<Element> baseLookup;
4246
private ExtendedMetadataFileItem lastBuiltItem;
4347

@@ -51,6 +55,7 @@ public void setup() {
5155
linkTree = Mockito.mock(LinkTree.class);
5256
referenceTree = Mockito.mock(ReferenceTree.class);
5357
literalTree = Mockito.mock(LiteralTree.class);
58+
typeElement = Mockito.mock(TypeElement.class);
5459

5560
baseLookup = new BaseLookup<>(environment) {
5661
@Override
@@ -217,6 +222,29 @@ public void testExtractMethods() {
217222
assertEquals("Wrong references", baseLookup.extractReferences(element), lastBuiltItem.getReferences());
218223
}
219224

225+
@Test
226+
public void testExtractJavaType() {
227+
String name = "com.microsoft.samples.google.ValidationException";
228+
when(typeElement.getKind()).thenReturn(ElementKind.CLASS);
229+
assertEquals("Wrong javaType", baseLookup.extractJavaType(typeElement, name), "exception");
230+
231+
name = "com.microsoft.samples.google.BetaApi";
232+
when(typeElement.getKind()).thenReturn(ElementKind.ANNOTATION_TYPE);
233+
assertEquals("Wrong javaType", baseLookup.extractJavaType(typeElement, name), "annotationtype");
234+
235+
name = "com.microsoft.samples.google";
236+
when(typeElement.getKind()).thenReturn(ElementKind.PACKAGE);
237+
assertEquals("Wrong javaType", baseLookup.extractJavaType(typeElement, name), "package");
238+
239+
name = "com.microsoft.samples.google.SpeechClient";
240+
when(typeElement.getKind()).thenReturn(ElementKind.CLASS);
241+
assertEquals("Wrong javaType", baseLookup.extractJavaType(typeElement, name), null);
242+
243+
name = "com.microsoft.samples.google.ValidationException.Supplier";
244+
when(typeElement.getKind()).thenReturn(ElementKind.INTERFACE);
245+
assertEquals("Wrong javaType", baseLookup.extractJavaType(typeElement, name), null);
246+
}
247+
220248
private ExtendedMetadataFileItem buildExtendedMetadataFileItem(Element element) {
221249
ExtendedMetadataFileItem result = new ExtendedMetadataFileItem(String.valueOf(element));
222250
result.setPackageName("Some package name");
@@ -235,6 +263,7 @@ private ExtendedMetadataFileItem buildExtendedMetadataFileItem(Element element)
235263
result.setReturn(new Return("return type", "return desc"));
236264
result.setSummary("Some summary");
237265
result.setType("Some type");
266+
result.setJavaType("Some type");
238267
result.setContent("Some content");
239268
result.setTypeParameters(Arrays.asList(new TypeParameter("type param id")));
240269
result.setSuperclass(Arrays.asList("Some "));

0 commit comments

Comments
 (0)