in customization-base/src/main/java/com/azure/autorest/customization/JavadocCustomization.java [316:381]
private void parseJavadoc(int symbolLine) {
String lineContent = editor.getFileLine(fileName, --symbolLine);
while (lineContent.startsWith(indent + "@")) {
lineContent = editor.getFileLine(fileName, --symbolLine);
}
if (lineContent.endsWith("*/")) {
Position javadocEnd = new Position(symbolLine, lineContent.length());
int currentDocEndLine = symbolLine;
while (!lineContent.contains("/*")) {
if (lineContent.contains("@throws")) {
String type = THROWS_TAG.matcher(lineContent).replaceFirst("");
type = SPACE_THEN_ANYTHING.matcher(type).replaceFirst("");
Position docStart = new Position(symbolLine, lineContent.indexOf("@throws") + 8);
Position docEnd = new Position(currentDocEndLine, editor.getFileLine(fileName, currentDocEndLine).length());
throwsDocs.put(type, readJavadocTextRange(editor, fileName, docStart, docEnd));
currentDocEndLine = symbolLine - 1;
} else if (lineContent.contains("@return")) {
Position docStart = new Position(symbolLine, lineContent.indexOf("@return") + 8);
Position docEnd = new Position(currentDocEndLine, editor.getFileLine(fileName, currentDocEndLine).length());
returnDoc = readJavadocTextRange(editor, fileName, docStart, docEnd);
currentDocEndLine = symbolLine - 1;
} else if (lineContent.contains("@since")) {
Position docStart = new Position(symbolLine, lineContent.indexOf("@since") + 7);
Position docEnd = new Position(currentDocEndLine, editor.getFileLine(fileName, currentDocEndLine).length());
sinceDoc = readJavadocTextRange(editor, fileName, docStart, docEnd);
currentDocEndLine = symbolLine - 1;
} else if (lineContent.contains("@see")) {
Position docStart = new Position(symbolLine, lineContent.indexOf("@see") + 5);
Position docEnd = new Position(currentDocEndLine, editor.getFileLine(fileName, currentDocEndLine).length());
seeDocs.add(readJavadocTextRange(editor, fileName, docStart, docEnd));
currentDocEndLine = symbolLine - 1;
} else if (lineContent.contains("@deprecated")) {
Position docStart = new Position(symbolLine, lineContent.indexOf("@deprecated") + 5);
Position docEnd = new Position(currentDocEndLine, editor.getFileLine(fileName, currentDocEndLine).length());
deprecatedDoc = readJavadocTextRange(editor, fileName, docStart, docEnd);
currentDocEndLine = symbolLine - 1;
} else if (lineContent.contains("@param")) {
String name = PARAM_TAG.matcher(lineContent).replaceFirst("");
name = SPACE_THEN_ANYTHING.matcher(name).replaceFirst("");
Position docStart = new Position(symbolLine, lineContent.indexOf("@param") + 8 + name.length());
Position docEnd = new Position(currentDocEndLine, editor.getFileLine(fileName, currentDocEndLine).length());
paramDocs.put(name, readJavadocTextRange(editor, fileName, docStart, docEnd));
currentDocEndLine = symbolLine - 1;
} else if (EMPTY_JAVADOC_LINE_PATTERN.matcher(lineContent).matches()) {
// empty line
currentDocEndLine--;
}
lineContent = editor.getFileLine(fileName, --symbolLine);
}
Position javadocStart = new Position(symbolLine, indent.length());
javadocRange = new Range(javadocStart, javadocEnd);
if (lineContent.endsWith("/*") || lineContent.endsWith("/**")) {
symbolLine++;
}
Position descriptionStart = new Position(symbolLine, JAVADOC_LINE_WITH_CONTENT.matcher(editor.getFileLine(fileName, symbolLine)).replaceFirst("").length() + 2);
String descriptionEndLineContent = editor.getFileLine(fileName, currentDocEndLine);
while (descriptionEndLineContent.trim().endsWith("*")) {
descriptionEndLineContent = editor.getFileLine(fileName, --currentDocEndLine);
}
Position descriptionEnd = new Position(currentDocEndLine, END_JAVADOC_LINE.matcher(descriptionEndLineContent).replaceFirst("").length());
this.descriptionDocs = JAVADOC_CONTENT.matcher(editor.getTextInRange(fileName, new Range(descriptionStart, descriptionEnd), " "))
.replaceAll(" ").trim();
} else {
initialize(symbolLine);
}
}