Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { workspace, ExtensionContext, window, StatusBarAlignment, commands, View
import { LanguageClient, LanguageClientOptions, Position as LSPosition, Location as LSLocation } from 'vscode-languageclient';
import { runServer, awaitServerConnection } from './javaServerStarter';
import { Commands } from './commands';
import { StatusNotification, ClassFileContentsRequest, ProjectConfigurationUpdateRequest, MessageType, ActionableNotification, FeatureStatus, ActionableMessage, DebugSessionRequest, ClasspathResolveRequest, ClasspathResolveRequestParams } from './protocol';
import { StatusNotification, ClassFileContentsRequest, ProjectConfigurationUpdateRequest, MessageType, ActionableNotification, FeatureStatus, ActionableMessage, DebugSessionRequest, ClasspathResolveRequest, ClasspathResolveRequestParams, BuildWorkspaceRequest, BuildWorkspaceResult, BuildWorkspaceStatus } from './protocol';

let os = require('os');
let oldConfig;
Expand Down Expand Up @@ -105,6 +105,25 @@ export function activate(context: ExtensionContext) {
lastStatus = item.text;
resolve();
commands.registerCommand(Commands.START_DEBUG_SESSION, async (config) => {
if (!config.request) { // if 'request' is missing interpret this as a missing launch.json
config.type = 'java';
config.name = 'Java Debug';
config.request = 'launch';
const editor = vscode.window.activeTextEditor;
if (editor && editor.document.languageId === 'java') {
const fullpath = editor.document.fileName;
const cur = path.dirname(fullpath);
config.startupClass = path.basename(fullpath, '.java');
config.sourcePath = [cur];
config.cwd = cur;
config.stopOnEntry = true;
const buildResult = await languageClient.sendRequest(BuildWorkspaceRequest.type, '');
if (buildResult.status === BuildWorkspaceStatus.FAILURE) {
vscode.window.showErrorMessage('Build failed, please fix build error first.');
return;
}
}
}
if (!config.startupClass) {
vscode.window.showErrorMessage('Please specify startupClass on launch.json firstly.');
} else {
Expand Down
13 changes: 13 additions & 0 deletions src/protocol.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,15 @@ export interface ClasspathResolveRequestParams {
projectName?: string;
}

export enum BuildWorkspaceStatus {
FAILURE = 0,
SUCCESS = 1,
}

export interface BuildWorkspaceResult {
status: BuildWorkspaceStatus;
}

export namespace StatusNotification {
export const type = new NotificationType<StatusReport,void >('language/status');
}
Expand All @@ -82,4 +91,8 @@ export namespace DebugSessionRequest {

export namespace ClasspathResolveRequest {
export const type = new RequestType<ClasspathResolveRequestParams, string, void, void>('java/resolveClasspaths');
}

export namespace BuildWorkspaceRequest {
export const type = new RequestType<string, BuildWorkspaceResult, void, void>('java/buildWorkspace');
}