in customization-base/src/main/java/com/azure/autorest/customization/MethodCustomization.java [224:303]
public MethodCustomization setReturnType(String newReturnType, String returnValueFormatter,
boolean replaceReturnStatement) {
List<TextEdit> edits = new ArrayList<>();
int line = symbol.getLocation().getRange().getStart().getLine();
Position start = new Position(line, 0);
String oldLineContent = editor.getFileLine(fileName, line);
Position end = new Position(line, oldLineContent.length());
String newLineContent = oldLineContent.replaceFirst("(\\w.* )?(\\w+) " + methodName + "\\(",
"$1" + newReturnType + " " + methodName + "(");
TextEdit signatureEdit = new TextEdit();
signatureEdit.setNewText(newLineContent);
signatureEdit.setRange(new Range(start, end));
edits.add(signatureEdit);
String methodIndent = Utils.getIndent(editor.getFileLine(fileName, line));
String methodContentIndent = Utils.getIndent(editor.getFileLine(fileName, line + 1));
String oldReturnType = oldLineContent.replaceAll(" " + methodName + "\\(.*", "")
.replaceFirst(methodIndent + "(\\w.* )?", "").trim();
int returnLine = -1;
while (!oldLineContent.startsWith(methodIndent + "}")) {
if (oldLineContent.contains("return ")) {
returnLine = line;
}
oldLineContent = editor.getFileLine(fileName, ++line);
}
if (returnLine == -1) {
// no return statement, originally void return type
editor.insertBlankLine(fileName, line, false);
FileEvent blankLineEvent = new FileEvent();
blankLineEvent.setUri(fileUri);
blankLineEvent.setType(FileChangeType.Changed);
languageClient.notifyWatchedFilesChanged(Collections.singletonList(blankLineEvent));
TextEdit returnEdit = new TextEdit();
returnEdit.setRange(new Range(new Position(line, 0), new Position(line, 0)));
returnEdit.setNewText(methodContentIndent + "return " + returnValueFormatter + ";");
edits.add(returnEdit);
} else if (newReturnType.equals("void")) {
// remove return statement
TextEdit returnEdit = new TextEdit();
returnEdit.setNewText("");
returnEdit.setRange(new Range(new Position(returnLine, 0), new Position(line, 0)));
edits.add(returnEdit);
} else {
// replace return statement
TextEdit returnValueEdit = new TextEdit();
String returnLineText = editor.getFileLine(fileName, returnLine);
returnValueEdit.setRange(new Range(new Position(returnLine, 0), new Position(returnLine, returnLineText.length())));
returnValueEdit.setNewText(returnLineText.replace("return ", oldReturnType + " returnValue = "));
edits.add(returnValueEdit);
editor.insertBlankLine(fileName, line, false);
FileEvent blankLineEvent = new FileEvent();
blankLineEvent.setUri(fileUri);
blankLineEvent.setType(FileChangeType.Changed);
languageClient.notifyWatchedFilesChanged(Collections.singletonList(blankLineEvent));
TextEdit returnEdit = new TextEdit();
returnEdit.setRange(new Range(new Position(line, 0), new Position(line, 0)));
if (replaceReturnStatement) {
returnEdit.setNewText(String.format(returnValueFormatter, "returnValue"));
} else {
returnEdit.setNewText(methodContentIndent + "return " + String.format(returnValueFormatter, "returnValue") + ";");
}
edits.add(returnEdit);
}
WorkspaceEdit workspaceEdit = new WorkspaceEdit();
workspaceEdit.setChanges(Collections.singletonMap(fileUri, edits));
Utils.applyWorkspaceEdit(workspaceEdit, editor, languageClient);
Utils.organizeImportsOnRange(languageClient, editor, fileUri, new Range(start, end));
String newMethodSignature = methodSignature.replace(oldReturnType + " " + methodName, newReturnType + " " + methodName);
return refreshCustomization(newMethodSignature);
}