Skip to content

Commit 092bd4e

Browse files
authored
Support creating module-info.java (#2680)
Signed-off-by: Sheng Chen <[email protected]>
1 parent 5adcabb commit 092bd4e

File tree

7 files changed

+59
-16
lines changed

7 files changed

+59
-16
lines changed

package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1087,6 +1087,11 @@
10871087
"command": "java.action.changeBaseType",
10881088
"title": "%java.action.changeBaseType%",
10891089
"category": "Java"
1090+
},
1091+
{
1092+
"command": "java.project.createModuleInfo.command",
1093+
"title": "%java.project.createModuleInfo.command%",
1094+
"category": "Java"
10901095
}
10911096
],
10921097
"keybindings": [

package.nls.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@
2121
"java.action.showClassHierarchy": "Show Class Hierarchy",
2222
"java.action.showSupertypeHierarchy": "Show Supertype Hierarchy",
2323
"java.action.showSubtypeHierarchy": "Show Subtype Hierarchy",
24-
"java.action.changeBaseType": "Base on this Type"
24+
"java.action.changeBaseType": "Base on this Type",
25+
"java.project.createModuleInfo.command": "Create module-info.java"
2526
}

package.nls.zh-cn.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@
2121
"java.action.showClassHierarchy": "显示类的继承关系",
2222
"java.action.showSupertypeHierarchy": "显示父类层次结构",
2323
"java.action.showSubtypeHierarchy": "显示子类层次结构",
24-
"java.action.changeBaseType": "基于此类型"
24+
"java.action.changeBaseType": "基于此类型",
25+
"java.project.createModuleInfo.command": "创建 module-info.java"
2526
}

package.nls.zh-tw.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@
2121
"java.action.showClassHierarchy": "顯示類別階層結構",
2222
"java.action.showSupertypeHierarchy": "顯示父類別階層結構",
2323
"java.action.showSubtypeHierarchy": "顯示子類別階層結構",
24-
"java.action.changeBaseType": "以此型別為基礎"
25-
}
24+
"java.action.changeBaseType": "以此型別為基礎",
25+
"java.project.createModuleInfo.command": "創建 module-info.java"
26+
}

src/commands.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,4 +277,14 @@ export namespace Commands {
277277
export const UPGRADE_GRADLE_WRAPPER = '_java.gradle.upgradeWrapper';
278278

279279
export const LOMBOK_CONFIGURE = "java.lombokConfigure";
280+
281+
/**
282+
* The JDT.LS command to create module-info.java
283+
*/
284+
export const CREATE_MODULE_INFO = "java.project.createModuleInfo";
285+
286+
/**
287+
* The VS Code command to create module-info.java
288+
*/
289+
export const CREATE_MODULE_INFO_COMMAND = "java.project.createModuleInfo.command";
280290
}

src/standardLanguageClient.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,27 @@ export class StandardLanguageClient {
552552
markdownPreviewProvider.show(context.asAbsolutePath(path.join('document', `${Commands.LEARN_MORE_ABOUT_REFACTORING}.md`)), 'Java Refactoring', sectionId, context);
553553
}));
554554

555+
context.subscriptions.push(commands.registerCommand(Commands.CREATE_MODULE_INFO_COMMAND, async () => {
556+
const uri = await askForProjects(
557+
window.activeTextEditor?.document.uri,
558+
"Please select the project to create module-info.java",
559+
false,
560+
);
561+
if (!uri?.length) {
562+
return;
563+
}
564+
565+
const moduleInfoUri: string = await commands.executeCommand(
566+
Commands.EXECUTE_WORKSPACE_COMMAND,
567+
Commands.CREATE_MODULE_INFO,
568+
uri[0].toString(),
569+
);
570+
571+
if (moduleInfoUri) {
572+
await window.showTextDocument(Uri.parse(moduleInfoUri));
573+
}
574+
}));
575+
555576
languages.registerCodeActionsProvider({
556577
language: "xml",
557578
scheme: "file",

src/standardLanguageClientUtils.ts

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -56,26 +56,30 @@ function isJavaConfigFile(filePath: string) {
5656
* @param activeFileUri the uri of the active file.
5757
* @param placeHolder message to be shown in quick pick.
5858
*/
59-
export async function askForProjects(activeFileUri: Uri | undefined, placeHolder: string): Promise<Uri[]> {
59+
export async function askForProjects(activeFileUri: Uri | undefined, placeHolder: string, canPickMany: boolean = true): Promise<Uri[]> {
6060
const projectPicks: QuickPickItem[] = await generateProjectPicks(activeFileUri);
6161
if (!projectPicks?.length) {
6262
return [];
6363
} else if (projectPicks.length === 1) {
6464
return [Uri.file(projectPicks[0].detail)];
65-
} else {
66-
const choices: QuickPickItem[] | undefined = await window.showQuickPick(projectPicks, {
67-
matchOnDetail: true,
68-
placeHolder: placeHolder,
69-
ignoreFocusOut: true,
70-
canPickMany: true,
71-
});
65+
}
7266

73-
if (choices?.length) {
74-
return choices.map(c => Uri.file(c.detail));
75-
}
67+
const choices: QuickPickItem[] | QuickPickItem | undefined = await window.showQuickPick(projectPicks, {
68+
matchOnDetail: true,
69+
placeHolder: placeHolder,
70+
ignoreFocusOut: true,
71+
canPickMany: canPickMany,
72+
});
73+
74+
if (!choices) {
75+
return [];
76+
}
77+
78+
if (Array.isArray(choices)) {
79+
return choices.map(c => Uri.file(c.detail));
7680
}
7781

78-
return [];
82+
return [Uri.file(choices.detail)];
7983
}
8084

8185
/**

0 commit comments

Comments
 (0)