diff --git a/src/protocol.ts b/src/protocol.ts index 1786286ab1..c31b5a590e 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -366,6 +366,10 @@ export namespace GetRefactorEditRequest { export const type = new RequestType('java/getRefactorEdit'); } +export namespace GetChangeSignatureInfoRequest { + export const type = new RequestType('java/getChangeSignatureInfo'); +} + export interface SelectionInfo { name: string; length: number; @@ -373,6 +377,16 @@ export interface SelectionInfo { params?: string[]; } +export interface ChangeSignatureInfo { + methodIdentifier: string; + modifier: string; + returnType: string; + methodName: string; + parameters: any; + exceptions: any; + errorMessage: string; +} + export interface InferSelectionParams { command: string; context: CodeActionParams; diff --git a/src/refactorAction.ts b/src/refactorAction.ts index 068998ccb7..f8b37fb54c 100644 --- a/src/refactorAction.ts +++ b/src/refactorAction.ts @@ -6,7 +6,7 @@ import { commands, ExtensionContext, Position, QuickPickItem, TextDocument, Uri, import { FormattingOptions, WorkspaceEdit, RenameFile, DeleteFile, TextDocumentEdit, CodeActionParams, SymbolInformation } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { Commands as javaCommands } from './commands'; -import { GetRefactorEditRequest, MoveRequest, RefactorWorkspaceEdit, RenamePosition, GetMoveDestinationsRequest, SearchSymbols, SelectionInfo, InferSelectionRequest } from './protocol'; +import { GetRefactorEditRequest, MoveRequest, RefactorWorkspaceEdit, RenamePosition, GetMoveDestinationsRequest, SearchSymbols, SelectionInfo, InferSelectionRequest, GetChangeSignatureInfoRequest, ChangeSignatureInfo } from './protocol'; import { ChangeSignaturePanel } from './refactoring/changeSignaturePanel'; import { getExtractInterfaceArguments, revealExtractedInterface } from './refactoring/extractInterface'; @@ -112,7 +112,12 @@ function registerApplyRefactorCommand(languageClient: LanguageClient, context: E } commandArguments.push(...args); } else if (command === 'changeSignature') { - ChangeSignaturePanel.render(context.extensionUri, languageClient, command, params, formattingOptions, commandInfo); + const changeSignatureInfo: ChangeSignatureInfo = await languageClient.sendRequest(GetChangeSignatureInfoRequest.type, params); + if (changeSignatureInfo.errorMessage !== undefined) { + window.showWarningMessage(changeSignatureInfo.errorMessage); + return; + } + ChangeSignaturePanel.render(context.extensionUri, languageClient, command, params, formattingOptions, changeSignatureInfo); return; }