Skip to content

Commit f598b79

Browse files
Feature discovery - Provide quick fix to 'Configure static import...' (#3339)
1 parent 3ac1335 commit f598b79

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

src/clientCodeActionProvider.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { CancellationToken, CodeAction, CodeActionContext, CodeActionKind, CodeActionProvider, Command, ExtensionContext, ProviderResult, Range, Selection, TextDocument, commands } from "vscode";
2+
import { apiManager } from "./apiManager";
3+
4+
const configureStaticImportsCommand = "java.action.configureFavoriteStaticMembers";
5+
const UNDEFINED_METHOD = "67108964";
6+
export class ClientCodeActionProvider implements CodeActionProvider<CodeAction> {
7+
constructor(readonly context: ExtensionContext) {
8+
context.subscriptions.push(commands.registerCommand(configureStaticImportsCommand, async () => {
9+
commands.executeCommand("workbench.action.openSettings", "java.completion.favoriteStaticMembers");
10+
apiManager.fireTraceEvent({
11+
name: "java.ls.command",
12+
properties: {
13+
command: configureStaticImportsCommand,
14+
},
15+
});
16+
}));
17+
}
18+
19+
provideCodeActions(document: TextDocument, range: Range | Selection, context: CodeActionContext, token: CancellationToken): ProviderResult<(CodeAction | Command)[]> {
20+
const codeActions = [];
21+
if (context.diagnostics?.some(diagnostic => diagnostic.code === UNDEFINED_METHOD)
22+
|| document.lineAt(range.start.line)?.text?.startsWith("import ")) {
23+
const action = new CodeAction("Configure static import...", CodeActionKind.QuickFix);
24+
action.command = {
25+
title: "Configure static import...",
26+
command: configureStaticImportsCommand,
27+
};
28+
codeActions.push(action);
29+
}
30+
return codeActions;
31+
}
32+
}

src/standardLanguageClient.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import { Telemetry } from "./telemetry";
3939
import { TelemetryEvent } from "@redhat-developer/vscode-redhat-telemetry/lib";
4040
import { registerDocumentValidationListener } from './diagnostic';
4141
import { listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils';
42+
import { ClientCodeActionProvider } from './clientCodeActionProvider';
4243

4344
const extensionName = 'Language Support for Java';
4445
const GRADLE_CHECKSUM = "gradle/checksum/prompt";
@@ -618,6 +619,10 @@ export class StandardLanguageClient {
618619
pattern: "**/{gradle/wrapper/gradle-wrapper.properties,build.gradle,build.gradle.kts,settings.gradle,settings.gradle.kts}"
619620
}, new GradleCodeActionProvider(), gradleCodeActionMetadata);
620621

622+
languages.registerCodeActionsProvider({
623+
scheme: 'file',
624+
language: 'java'
625+
}, new ClientCodeActionProvider(context));
621626
}
622627

623628
private showGradleCompatibilityIssueNotification(message: string, options: string[], projectUri: string, gradleVersion: string, newJavaHome: string) {

0 commit comments

Comments
 (0)