Skip to content
This repository was archived by the owner on Aug 9, 2022. It is now read-only.

Commit 6b05484

Browse files
committed
add step to search if there is any item in super class being overridden by given method, and add yaml. (#38)
1 parent 1175eb2 commit 6b05484

7 files changed

Lines changed: 257 additions & 41 deletions

File tree

src/main/java/com/microsoft/build/YmlFilesBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ void addMethodsInfo(TypeElement classElement, MetadataFile classMetadataFile) {
202202
methodItem.setExceptions(classItemsLookup.extractExceptions(methodElement));
203203
methodItem.setParameters(classItemsLookup.extractParameters(methodElement));
204204
methodItem.setReturn(classItemsLookup.extractReturn(methodElement));
205+
methodItem.setOverridden(classItemsLookup.extractOverridden(methodElement));
205206

206207
classMetadataFile.getItems().add(methodItem);
207208
addExceptionReferences(methodItem, classMetadataFile);
@@ -489,7 +490,7 @@ String resolveUidFromReference(String linkContent, LookupContext lookupContext)
489490
return uid;
490491
}
491492

492-
String resolveUidByLookup(String signature, LookupContext lookupContext){
493+
String resolveUidByLookup(String signature, LookupContext lookupContext) {
493494
if (StringUtils.isBlank(signature) || lookupContext == null) {
494495
return "";
495496
}

src/main/java/com/microsoft/lookup/BaseLookup.java

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.microsoft.model.MethodParameter;
77
import com.microsoft.model.Return;
88
import com.microsoft.model.TypeParameter;
9+
910
import com.sun.source.doctree.DocCommentTree;
1011
import com.sun.source.doctree.DocTree;
1112
import com.sun.source.doctree.LinkTree;
@@ -14,9 +15,12 @@
1415
import java.util.*;
1516
import java.util.stream.Collectors;
1617
import java.util.stream.Stream;
18+
1719
import javax.lang.model.element.Element;
1820
import javax.lang.model.element.ElementKind;
21+
1922
import jdk.javadoc.doclet.DocletEnvironment;
23+
2024
import org.apache.commons.lang3.RegExUtils;
2125
import org.apache.commons.lang3.StringUtils;
2226

@@ -152,6 +156,10 @@ public Set<MetadataFileItem> extractReferences(T key) {
152156
return resolve(key).getReferences();
153157
}
154158

159+
public String extractOverridden(T key) {
160+
return resolve(key).getOverridden();
161+
}
162+
155163
protected String determineType(T element) {
156164
return elementKindLookup.get(element.getKind());
157165
}
@@ -162,9 +170,9 @@ protected String determinePackageName(T element) {
162170

163171
protected String determineComment(T element) {
164172
return getDocCommentTree(element)
165-
.map(DocCommentTree::getFullBody)
166-
.map(this::replaceLinksAndCodes)
167-
.orElse(null);
173+
.map(DocCommentTree::getFullBody)
174+
.map(this::replaceLinksAndCodes)
175+
.orElse(null);
168176
}
169177

170178
/**
@@ -175,19 +183,19 @@ protected String determineComment(T element) {
175183
*/
176184
String replaceLinksAndCodes(List<? extends DocTree> items) {
177185
return items.stream().map(
178-
bodyItem -> {
179-
switch (bodyItem.getKind()) {
180-
case LINK:
181-
case LINK_PLAIN:
182-
return buildXrefTag((LinkTree) bodyItem);
183-
case CODE:
184-
return buildCodeTag((LiteralTree) bodyItem);
185-
case LITERAL:
186-
return expandLiteralBody((LiteralTree) bodyItem);
187-
default:
188-
return String.valueOf(bodyItem);
186+
bodyItem -> {
187+
switch (bodyItem.getKind()) {
188+
case LINK:
189+
case LINK_PLAIN:
190+
return buildXrefTag((LinkTree) bodyItem);
191+
case CODE:
192+
return buildCodeTag((LiteralTree) bodyItem);
193+
case LITERAL:
194+
return expandLiteralBody((LiteralTree) bodyItem);
195+
default:
196+
return String.valueOf(bodyItem);
197+
}
189198
}
190-
}
191199
).collect(Collectors.joining());
192200
}
193201

@@ -223,7 +231,7 @@ public String makeTypeShort(String value) {
223231
return value;
224232
}
225233
return Stream.of(StringUtils.split(value, "<"))
226-
.map(s -> RegExUtils.removeAll(s, "\\b[a-z0-9_.]+\\."))
227-
.collect(Collectors.joining("<"));
234+
.map(s -> RegExUtils.removeAll(s, "\\b[a-z0-9_.]+\\."))
235+
.collect(Collectors.joining("<"));
228236
}
229237
}

src/main/java/com/microsoft/lookup/ClassItemsLookup.java

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,25 @@
44
import com.microsoft.model.ExceptionItem;
55
import com.microsoft.model.MethodParameter;
66
import com.microsoft.model.Return;
7+
import com.microsoft.util.Utils;
78
import com.sun.source.doctree.DocTree.Kind;
89
import com.sun.source.doctree.ParamTree;
910
import com.sun.source.doctree.ReturnTree;
1011
import com.sun.source.doctree.ThrowsTree;
12+
1113
import java.util.List;
1214
import java.util.stream.Collectors;
13-
import javax.lang.model.element.Element;
14-
import javax.lang.model.element.ExecutableElement;
15-
import javax.lang.model.element.TypeElement;
16-
import javax.lang.model.element.VariableElement;
15+
import javax.lang.model.element.*;
1716
import javax.lang.model.type.TypeKind;
17+
1818
import jdk.javadoc.doclet.DocletEnvironment;
1919

2020
public class ClassItemsLookup extends BaseLookup<Element> {
21+
private Utils utils;
2122

2223
public ClassItemsLookup(DocletEnvironment environment) {
2324
super(environment);
25+
utils = new Utils(environment);
2426
}
2527

2628
@Override
@@ -48,18 +50,21 @@ protected ExtendedMetadataFileItem buildMetadataFileItem(Element element) {
4850
ExecutableElement exeElement = (ExecutableElement) element;
4951
List<MethodParameter> parameters = extractParameters(exeElement);
5052
String paramsString = parameters.stream()
51-
.map(parameter -> String.format("%s %s", makeTypeShort(parameter.getType()), parameter.getId()))
52-
.collect(Collectors.joining(", "));
53+
.map(parameter -> String.format("%s %s", makeTypeShort(parameter.getType()), parameter.getId()))
54+
.collect(Collectors.joining(", "));
5355
String nameWithoutBrackets = elementQName.replaceAll("\\(.*\\)", "");
5456
String methodName = String.format("%s(%s)", nameWithoutBrackets, paramsString);
5557

5658
result.setName(methodName);
5759
result.setMethodContent(String.format("%s %s %s", modifiers,
58-
makeTypeShort(String.valueOf(exeElement.getReturnType())), result.getName()));
60+
makeTypeShort(String.valueOf(exeElement.getReturnType())), result.getName()));
5961
result.setConstructorContent(String.format("%s %s", modifiers, result.getName()));
6062
result.setParameters(parameters);
6163
result.setExceptions(extractExceptions(exeElement));
6264
result.setReturn(extractReturn(exeElement));
65+
if (exeElement.getKind() == ElementKind.METHOD) {
66+
result.setOverridden(extractOverriddenUid(utils.overriddenMethod(exeElement)));
67+
}
6368
}
6469
result.setNameWithType(String.format("%s.%s", classSNameWithGenericsSupport, result.getName()));
6570
result.setFullName(String.format("%s.%s", classQNameWithGenericsSupport, result.getName()));
@@ -83,11 +88,11 @@ List<MethodParameter> extractParameters(ExecutableElement element) {
8388

8489
String extractParameterDescription(ExecutableElement method, String paramName) {
8590
return getDocCommentTree(method).map(docTree -> docTree.getBlockTags().stream()
86-
.filter(o -> o.getKind() == Kind.PARAM)
87-
.map(o -> (ParamTree) o)
88-
.filter(o -> paramName.equals(String.valueOf(o.getName())))
89-
.map(o -> replaceLinksAndCodes(o.getDescription()))
90-
.findFirst().orElse(null)
91+
.filter(o -> o.getKind() == Kind.PARAM)
92+
.map(o -> (ParamTree) o)
93+
.filter(o -> paramName.equals(String.valueOf(o.getName())))
94+
.map(o -> replaceLinksAndCodes(o.getDescription()))
95+
.findFirst().orElse(null)
9196
).orElse(null);
9297
}
9398

@@ -100,10 +105,10 @@ List<ExceptionItem> extractExceptions(ExecutableElement methodElement) {
100105

101106
String extractExceptionDescription(ExecutableElement methodElement) {
102107
return getDocCommentTree(methodElement).map(docTree -> docTree.getBlockTags().stream()
103-
.filter(o -> o.getKind() == Kind.THROWS)
104-
.map(o -> (ThrowsTree) o)
105-
.map(o -> replaceLinksAndCodes(o.getDescription()))
106-
.findFirst().orElse(null)
108+
.filter(o -> o.getKind() == Kind.THROWS)
109+
.map(o -> (ThrowsTree) o)
110+
.map(o -> replaceLinksAndCodes(o.getDescription()))
111+
.findFirst().orElse(null)
107112
).orElse(null);
108113
}
109114

@@ -116,10 +121,10 @@ Return extractReturn(ExecutableElement methodElement) {
116121

117122
String extractReturnDescription(ExecutableElement methodElement) {
118123
return getDocCommentTree(methodElement).map(docTree -> docTree.getBlockTags().stream()
119-
.filter(o -> o.getKind() == Kind.RETURN)
120-
.map(o -> (ReturnTree)o)
121-
.map(o -> replaceLinksAndCodes(o.getDescription()))
122-
.findFirst().orElse(null)
124+
.filter(o -> o.getKind() == Kind.RETURN)
125+
.map(o -> (ReturnTree) o)
126+
.map(o -> replaceLinksAndCodes(o.getDescription()))
127+
.findFirst().orElse(null)
123128
).orElse(null);
124129
}
125130

@@ -130,4 +135,14 @@ Return extractReturn(VariableElement fieldElement) {
130135
String convertFullNameToOverload(String fullName) {
131136
return fullName.replaceAll("\\(.*\\)", "*");
132137
}
138+
139+
String extractOverriddenUid(ExecutableElement ovr) {
140+
if (ovr != null) {
141+
TypeElement te = utils.getEnclosingTypeElement(ovr);
142+
String uid = te.getQualifiedName().toString().concat(".") + String.valueOf(ovr);
143+
return uid;
144+
}
145+
146+
return "";
147+
}
133148
}

src/main/java/com/microsoft/model/MetadataFileItem.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import org.apache.commons.lang3.RegExUtils;
1212

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

@@ -25,6 +25,7 @@ public class MetadataFileItem implements Comparable<MetadataFileItem> {
2525
private String nameWithType;
2626
private String fullName;
2727
private String overload;
28+
private String overridden;
2829
private String type;
2930
@JsonProperty("package")
3031
private String packageName;
@@ -232,6 +233,14 @@ public void setReturn(Return returnValue) {
232233
syntax.setReturnValue(returnValue);
233234
}
234235

236+
public void setOverridden(String overridden) {
237+
this.overridden = overridden;
238+
}
239+
240+
public String getOverridden() {
241+
return overridden;
242+
}
243+
235244
@Override
236245
public boolean equals(Object o) {
237246
if (this == o) {

0 commit comments

Comments
 (0)