Skip to content

Commit e2ea9f4

Browse files
authored
feat: Provide code actions to configure classpath (#684)
1 parent 6eaf515 commit e2ea9f4

2 files changed

Lines changed: 33 additions & 0 deletions

File tree

src/extension.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { JavaExtGuideViewSerializer } from "./ext-guide";
1717
import { ClassPathConfigurationViewSerializer } from "./classpath/classpathConfigurationView";
1818
import { initFormatterSettingsEditorProvider } from "./formatter-settings";
1919
import { initRemoteProfileProvider } from "./formatter-settings/RemoteProfileProvider";
20+
import { CodeActionProvider } from "./providers/CodeActionProvider";
2021

2122
export async function activate(context: vscode.ExtensionContext) {
2223
syncState(context);
@@ -33,6 +34,8 @@ async function initializeExtension(_operationId: string, context: vscode.Extensi
3334
initCommands(context);
3435
initRecommendations(context);
3536

37+
context.subscriptions.push(vscode.languages.registerCodeActionsProvider({scheme: "file", language: "java", pattern: "**/*.java"}, new CodeActionProvider()));
38+
3639
// webview serializers to restore pages
3740
context.subscriptions.push(vscode.window.registerWebviewPanelSerializer("java.extGuide", new JavaExtGuideViewSerializer()));
3841
context.subscriptions.push(vscode.window.registerWebviewPanelSerializer("java.overview", new OverviewViewSerializer()));
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT license.
3+
4+
import * as vscode from "vscode";
5+
6+
// See: https://github.com/eclipse/eclipse.jdt.ls/blob/f0b68a8251b4971cac58eddc731227b66493ffc9/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/BaseDiagnosticsHandler.java#L48
7+
const NOT_ON_CLASSPATH: string = "32";
8+
export class CodeActionProvider implements vscode.CodeActionProvider {
9+
provideCodeActions(_document: vscode.TextDocument, _range: vscode.Range | vscode.Selection, context: vscode.CodeActionContext): vscode.CodeAction[] {
10+
const classPathDiagnostics: vscode.Diagnostic[] = [];
11+
for (const diagnostic of context.diagnostics) {
12+
if (diagnostic.source === "Java" && diagnostic.code === NOT_ON_CLASSPATH) {
13+
classPathDiagnostics.push(diagnostic);
14+
}
15+
}
16+
17+
if (classPathDiagnostics.length === 0) {
18+
return [];
19+
}
20+
21+
const codeAction: vscode.CodeAction = new vscode.CodeAction("Configure classpath");
22+
codeAction.diagnostics = classPathDiagnostics;
23+
codeAction.command = {
24+
title: "Configure classpath",
25+
command: "java.classpathConfiguration"
26+
};
27+
codeAction.kind = vscode.CodeActionKind.QuickFix;
28+
return [codeAction];
29+
}
30+
}

0 commit comments

Comments
 (0)