Skip to content

Commit c7a4296

Browse files
Contribute 'New Java Project...' command to File/NewFile and File Explorer menus (#809)
* Contribute 'New Java Project...' command to File/NewFile menus * Expose 'New Java Project...' command to File Explorer context menu
1 parent f236871 commit c7a4296

File tree

9 files changed

+108
-25
lines changed

9 files changed

+108
-25
lines changed

jdtls.ext/com.microsoft.jdtls.ext.target/com.microsoft.jdtls.ext.tp.target

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<unit id="org.eclipse.jdt.source.feature.group" version="0.0.0"/>
1616
<unit id="org.eclipse.sdk.feature.group" version="0.0.0"/>
1717
<unit id="org.eclipse.xtext.xbase.lib" version="0.0.0"/>
18-
<repository location="https://download.eclipse.org/releases/2023-12/202311171000/"/>
18+
<repository location="https://download.eclipse.org/releases/2023-12"/>
1919
</location>
2020
<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
2121
<unit id="org.eclipse.jdt.ls.core" version="0.0.0"/>

package-lock.json

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,36 @@
5555
"category": "Java",
5656
"icon": "$(add)"
5757
},
58+
{
59+
"command": "_java.project.create.from.menus.file",
60+
"title": "%contributes.commands.java.project.new%",
61+
"category": "Java",
62+
"icon": "$(add)"
63+
},
64+
{
65+
"command": "_java.project.create.from.fileexplorer.menu",
66+
"title": "%contributes.commands.java.project.new%",
67+
"category": "Java",
68+
"icon": "$(add)"
69+
},
70+
{
71+
"command": "_java.project.create.from.fileexplorer.welcome",
72+
"title": "%contributes.commands.java.project.create%",
73+
"category": "Java",
74+
"icon": "$(add)"
75+
},
76+
{
77+
"command": "_java.project.create.from.javaprojectexplorer.welcome",
78+
"title": "%contributes.commands.java.project.create%",
79+
"category": "Java",
80+
"icon": "$(add)"
81+
},
82+
{
83+
"command": "_java.project.create.from.javaprojectexplorer",
84+
"title": "%contributes.commands.java.project.create%",
85+
"category": "Java",
86+
"icon": "$(add)"
87+
},
5888
{
5989
"command": "java.project.addLibraries",
6090
"title": "%contributes.commands.java.project.addLibraries%",
@@ -358,6 +388,9 @@
358388
"file/newFile": [
359389
{
360390
"command": "java.view.menus.file.newJavaClass"
391+
},
392+
{
393+
"command": "_java.project.create.from.menus.file"
361394
}
362395
],
363396
"commandPalette": [
@@ -488,6 +521,26 @@
488521
{
489522
"command": "java.view.package.revealInProjectExplorer",
490523
"when": "false"
524+
},
525+
{
526+
"command": "_java.project.create.from.menus.file",
527+
"when": "false"
528+
},
529+
{
530+
"command": "_java.project.create.from.fileexplorer.menu",
531+
"when": "false"
532+
},
533+
{
534+
"command": "_java.project.create.from.fileexplorer.welcome",
535+
"when": "false"
536+
},
537+
{
538+
"command": "_java.project.create.from.javaprojectexplorer.welcome",
539+
"when": "false"
540+
},
541+
{
542+
"command": "_java.project.create.from.javaprojectexplorer",
543+
"when": "false"
491544
}
492545
],
493546
"explorer/context": [
@@ -500,6 +553,11 @@
500553
"command": "java.view.package.revealInProjectExplorer",
501554
"when": "resourceExtname == .java && java:serverMode == Standard",
502555
"group": "navigation@100"
556+
},
557+
{
558+
"command": "_java.project.create.from.fileexplorer.menu",
559+
"when": "explorerResourceIsFolder",
560+
"group": "navigation@10"
503561
}
504562
],
505563
"editor/title": [
@@ -523,7 +581,7 @@
523581
],
524582
"view/title": [
525583
{
526-
"command": "java.project.create",
584+
"command": "_java.project.create.from.javaprojectexplorer",
527585
"when": "view == javaProjectExplorer",
528586
"group": "navigation@10"
529587
},
@@ -957,7 +1015,7 @@
9571015
"@types/node": "^16.18.11",
9581016
"@types/semver": "^7.3.13",
9591017
"@types/vscode": "1.77.0",
960-
"@vscode/test-electron": "^2.2.2",
1018+
"@vscode/test-electron": "^2.3.8",
9611019
"copy-webpack-plugin": "^11.0.0",
9621020
"glob": "^7.2.3",
9631021
"mocha": "^9.2.2",

package.nls.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"description": "Manage Java projects in Visual Studio Code",
33
"contributes.commands.java.project.create": "Create Java Project...",
4+
"contributes.commands.java.project.new": "New Java Project...",
45
"contributes.commands.java.project.addLibraries": "Add Jar Libraries to Project Classpath...",
56
"contributes.commands.java.project.addLibraryFolders": "Add Library Folders to Project Classpath...",
67
"contributes.commands.java.project.removeLibrary": "Remove from Project Classpath",
@@ -56,8 +57,8 @@
5657
"taskDefinitions.java.project.build.path.workspace": "All the projects in workspace.",
5758
"taskDefinitions.java.project.build.path.exclude": "The path after '!' will be excluded from the paths to be built.",
5859
"taskDefinitions.java.project.build.isFullBuild": "Whether to execute a clean build or not.",
59-
"viewsWelcome.workbench.createNewJavaProject": "You can also [open a Java project folder](command:_java.project.open), or create a new Java project by clicking the button below.\n[Create Java Project](command:java.project.create)",
60-
"viewsWelcome.workbench.noJavaProject": "No Java projects found in the current workspace. You can [open a Java project folder](command:_java.project.open), or create a new Java project by clicking the button below.\n[Create Java Project](command:java.project.create)",
60+
"viewsWelcome.workbench.createNewJavaProject": "You can also [open a Java project folder](command:_java.project.open), or create a new Java project by clicking the button below.\n[Create Java Project](command:_java.project.create.from.fileexplorer.welcome)",
61+
"viewsWelcome.workbench.noJavaProject": "No Java projects found in the current workspace. You can [open a Java project folder](command:_java.project.open), or create a new Java project by clicking the button below.\n[Create Java Project](command:_java.project.create.from.javaprojectexplorer.welcome)",
6162
"viewsWelcome.workbench.importFailed": "Oops, something went wrong when opening Java projects. Please use the following action for troubleshooting:\n[Open Problems View](command:workbench.panel.markers.view.focus)",
6263
"viewsWelcome.workbench.inLightWeightMode": "To view the projects, you can import the projects into workspace.\n[Import Projects](command:java.server.mode.switch?%5B%22Standard%22,true%5D)",
6364
"viewsWelcome.workbench.installLanguageSupport": "The Java Projects explorer requires [Extension Pack for Java](command:extension.open?%5B%22vscjava.vscode-java-pack%22%5D) to provide full features.\n[Install](command:java.project.installExtension?%5B%22vscjava.vscode-java-pack%22%5D)"

package.nls.zh-cn.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"description": "在 Visual Studio Code 中管理 Java 项目",
33
"contributes.commands.java.project.create": "创建 Java 项目...",
4+
"contributes.commands.java.project.new": "创建 Java 项目...",
45
"contributes.commands.java.project.addLibraries": "添加 Jar 文件至项目 Classpath...",
56
"contributes.commands.java.project.addLibraryFolders": "添加文件夹至项目 Classpath...",
67
"contributes.commands.java.project.removeLibrary": "从项目 Classpath 中移除",
@@ -56,8 +57,8 @@
5657
"taskDefinitions.java.project.build.path.workspace": "工作空间中的所有项目。",
5758
"taskDefinitions.java.project.build.path.exclude": "'!' 后的路径将会从待构建项目路径中移除。",
5859
"taskDefinitions.java.project.build.isFullBuild": "是否要重新构建项目。",
59-
"viewsWelcome.workbench.createNewJavaProject": "您也可以[打开一个 Java 项目目录](command:_java.project.open),或点击下方按钮创建一个新的 Java 项目。\n[创建 Java 项目](command:java.project.create)",
60-
"viewsWelcome.workbench.noJavaProject": "当前工作空间未发现 Java 项目,您可以[打开一个 Java 项目目录](command:_java.project.open),或点击下方按钮创建一个新的 Java 项目。\n[创建 Java 项目](command:java.project.create)",
60+
"viewsWelcome.workbench.createNewJavaProject": "您也可以[打开一个 Java 项目目录](command:_java.project.open),或点击下方按钮创建一个新的 Java 项目。\n[创建 Java 项目](command:_java.project.create.from.fileexplorer.welcome)",
61+
"viewsWelcome.workbench.noJavaProject": "当前工作空间未发现 Java 项目,您可以[打开一个 Java 项目目录](command:_java.project.open),或点击下方按钮创建一个新的 Java 项目。\n[创建 Java 项目](command:_java.project.create.from.javaprojectexplorer.welcome)",
6162
"viewsWelcome.workbench.importFailed": "加载 Java 项目时出现错误,请通过以下方式查看错误相关信息:\n[打开问题视图](command:workbench.panel.markers.view.focus)",
6263
"viewsWelcome.workbench.inLightWeightMode": "要浏览项目信息,你可以将项目导入到工作空间中。\n[导入项目](command:java.server.mode.switch?%5B%22Standard%22,true%5D)",
6364
"viewsWelcome.workbench.installLanguageSupport": "Java 项目视图需要安装并激活 [Extension Pack for Java](command:extension.open?%5B%22vscjava.vscode-java-pack%22%5D) 以提供完整的功能。\n[安装](command:java.project.installExtension?%5B%22vscjava.vscode-java-pack%22%5D)"

package.nls.zh-tw.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"description": "在 Visual Studio Code 中管理 Java 專案",
33
"contributes.commands.java.project.create": "建立 Java 專案...",
4+
"contributes.commands.java.project.new": "建立 Java 專案...",
45
"contributes.commands.java.project.addLibraries": "新增 Jar 檔案至專案 Classpath...",
56
"contributes.commands.java.project.addLibraryFolders": "新增資料夾至專案 Classpath...",
67
"contributes.commands.java.project.removeLibrary": "從專案 Classpath 中移除",
@@ -48,8 +49,8 @@
4849
"taskDefinitions.java.project.build.path.workspace": "工作區中的所有專案。",
4950
"taskDefinitions.java.project.build.path.exclude": "'!' 後的路徑將會從待建置專案路徑中移除。",
5051
"taskDefinitions.java.project.build.isFullBuild": "是否要重新建置專案。",
51-
"viewsWelcome.workbench.createNewJavaProject": "您也可以[開啟一個 Java 專案目錄](command:_java.project.open),或點擊下方按鈕建立一個新的 Java 專案。\n[建立 Java 專案](command:java.project.create)",
52-
"viewsWelcome.workbench.noJavaProject": "當前工作區未發現 Java 專案,您可以[開啟一個 Java 專案目錄](command:_java.project.open),或點擊下方按鈕建立一個新的 Java 專案。\n[建立 Java 專案](command:java.project.create)",
52+
"viewsWelcome.workbench.createNewJavaProject": "您也可以[開啟一個 Java 專案目錄](command:_java.project.open),或點擊下方按鈕建立一個新的 Java 專案。\n[建立 Java 專案](command:_java.project.create.from.fileexplorer.welcome)",
53+
"viewsWelcome.workbench.noJavaProject": "當前工作區未發現 Java 專案,您可以[開啟一個 Java 專案目錄](command:_java.project.open),或點擊下方按鈕建立一個新的 Java 專案。\n[建立 Java 專案](command:_java.project.create.from.javaprojectexplorer.welcome)",
5354
"viewsWelcome.workbench.importFailed": "加載 Java 專案時出現錯誤,請通過以下方式查看錯誤相關信息:\n[打開問題視圖](command:workbench.panel.markers.view.focus)",
5455
"viewsWelcome.workbench.inLightWeightMode": "若要檢視各專案,你可以將專案匯入到工作區中。\n[匯入專案](command:java.server.mode.switch?%5B%22Standard%22,true%5D)",
5556
"viewsWelcome.workbench.installLanguageSupport": "Java 專案視圖需要安裝並啟用 [Extension Pack for Java](command:extension.open?%5B%22vscjava.vscode-java-pack%22%5D) 以提供完整的功能。\n[安裝](command:java.project.installExtension?%5B%22vscjava.vscode-java-pack%22%5D)"

src/commands.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,16 @@ export namespace Commands {
7272

7373
export const JAVA_PROJECT_CREATE = "java.project.create";
7474

75+
export const JAVA_PROJECT_CREATE_FROM_MENUS_FILE = "_java.project.create.from.menus.file";
76+
77+
export const JAVA_PROJECT_CREATE_FROM_FILEEXPLORER_MENU = "_java.project.create.from.fileexplorer.menu";
78+
79+
export const JAVA_PROJECT_CREATE_FROM_FILEEXPLORER_WELCOME = "_java.project.create.from.fileexplorer.welcome";
80+
81+
export const JAVA_PROJECT_CREATE_FROM_JAVAPROJECTEXPLORER_WELCOME = "_java.project.create.from.javaprojectexplorer.welcome";
82+
83+
export const JAVA_PROJECT_CREATE_FROM_JAVAPROJECTEXPLORER = "_java.project.create.from.javaprojectexplorer";
84+
7585
export const JAVA_PROJECT_ADD_LIBRARIES = "java.project.addLibraries";
7686

7787
export const JAVA_PROJECT_ADD_LIBRARY_FOLDERS = "java.project.addLibraryFolders";

src/controllers/projectController.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,17 @@ export class ProjectController implements Disposable {
1616

1717
public constructor(public readonly context: ExtensionContext) {
1818
this.disposable = Disposable.from(
19-
instrumentOperationAsVsCodeCommand(Commands.JAVA_PROJECT_CREATE, () => this.createJavaProject()),
19+
instrumentOperationAsVsCodeCommand(Commands.JAVA_PROJECT_CREATE, () => this.createJavaProject("command")),
20+
instrumentOperationAsVsCodeCommand(Commands.JAVA_PROJECT_CREATE_FROM_MENUS_FILE,
21+
() => this.createJavaProject("menus.file")),
22+
instrumentOperationAsVsCodeCommand(Commands.JAVA_PROJECT_CREATE_FROM_FILEEXPLORER_MENU,
23+
() => this.createJavaProject("fileexplorer.menu")),
24+
instrumentOperationAsVsCodeCommand(Commands.JAVA_PROJECT_CREATE_FROM_FILEEXPLORER_WELCOME,
25+
() => this.createJavaProject("fileexplorer.welcome")),
26+
instrumentOperationAsVsCodeCommand(Commands.JAVA_PROJECT_CREATE_FROM_JAVAPROJECTEXPLORER_WELCOME,
27+
() => this.createJavaProject("javaprojectexplorer.welcome")),
28+
instrumentOperationAsVsCodeCommand(Commands.JAVA_PROJECT_CREATE_FROM_JAVAPROJECTEXPLORER,
29+
() => this.createJavaProject("javaprojectexplorer")),
2030
instrumentOperationAsVsCodeCommand(Commands.JAVA_PROJECT_OPEN, () => this.openJavaProject()),
2131
instrumentOperationAsVsCodeCommand(Commands.INSTALL_EXTENSION, (extensionId: string) => {
2232
commands.executeCommand("workbench.extensions.installExtension", extensionId);
@@ -40,7 +50,7 @@ export class ProjectController implements Disposable {
4050
return commands.executeCommand(Commands.WORKBENCH_ACTION_FILES_OPENFILEFOLDER);
4151
}
4252

43-
public async createJavaProject() {
53+
public async createJavaProject(triggerFrom : string) {
4454
const items: IProjectTypeQuickPick[] = projectTypes.map((type: IProjectType) => {
4555
return {
4656
label: type.displayName,
@@ -56,7 +66,10 @@ export class ProjectController implements Disposable {
5666
if (!choice || !await ensureExtension(choice.label, choice.metadata)) {
5767
return;
5868
}
59-
sendInfo("", {projectCreationType: choice.metadata.type});
69+
sendInfo("", {
70+
projectCreationType: choice.metadata.type,
71+
triggerfrom: triggerFrom,
72+
});
6073
if (choice.metadata.type === ProjectType.NoBuildTool) {
6174
await scaffoldSimpleProject(this.context);
6275
} else if (choice.metadata.createCommandId && choice.metadata.createCommandArgs) {

test/ui/command.test.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import * as fse from "fs-extra";
66
import { platform, tmpdir } from "os";
77
import * as path from "path";
88
import * as seleniumWebdriver from "selenium-webdriver";
9-
import { ActivityBar, By, InputBox, ModalDialog, SideBarView, StatusBar, TextEditor, TreeItem, VSBrowser, ViewSection, Workbench } from "vscode-extension-tester";
9+
import { ActivityBar, By, InputBox, ModalDialog, SideBarView, StatusBar, TextEditor, TreeItem, VSBrowser, ViewSection, Workbench } from "vscode-extension-tester";
1010
import { sleep } from "../util";
1111

1212
// tslint:disable: only-arrow-functions
@@ -57,9 +57,8 @@ describe("Command Tests", function() {
5757
}
5858
while (true) {
5959
try {
60-
const languageStatus = await statusBar.findElement(By.xpath('//*[@id="status.languageStatus"]'));
61-
await languageStatus.click();
62-
await languageStatus.findElement(By.xpath(`//div[contains(@class, 'context-view')]//div[contains(@class, 'hover-language-status')]//span[contains(@class, 'codicon-thumbsup')]`));
60+
const serverStatus = await statusBar.findElement(By.xpath('//*[@id="redhat.java.java.serverStatus"]'));
61+
await serverStatus.findElement(By.xpath('//a[contains(@class, "statusbar-item-label")]//span[contains(@class, "codicon-thumbsup")]'));
6362
break;
6463
} catch (e) {
6564
await sleep(100);

0 commit comments

Comments
 (0)