Skip to content

Commit

Permalink
Contribute 'New Java Project...' command to File/NewFile and File Exp…
Browse files Browse the repository at this point in the history
…lorer menus (#809)

* Contribute 'New Java Project...' command to File/NewFile menus
* Expose 'New Java Project...' command to File Explorer context menu
  • Loading branch information
testforstephen committed Jan 5, 2024
1 parent f236871 commit c7a4296
Show file tree
Hide file tree
Showing 9 changed files with 108 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<unit id="org.eclipse.jdt.source.feature.group" version="0.0.0"/>
<unit id="org.eclipse.sdk.feature.group" version="0.0.0"/>
<unit id="org.eclipse.xtext.xbase.lib" version="0.0.0"/>
<repository location="https://download.eclipse.org/releases/2023-12/202311171000/"/>
<repository location="https://download.eclipse.org/releases/2023-12"/>
</location>
<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
<unit id="org.eclipse.jdt.ls.core" version="0.0.0"/>
Expand Down
18 changes: 9 additions & 9 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

62 changes: 60 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,36 @@
"category": "Java",
"icon": "$(add)"
},
{
"command": "_java.project.create.from.menus.file",
"title": "%contributes.commands.java.project.new%",
"category": "Java",
"icon": "$(add)"
},
{
"command": "_java.project.create.from.fileexplorer.menu",
"title": "%contributes.commands.java.project.new%",
"category": "Java",
"icon": "$(add)"
},
{
"command": "_java.project.create.from.fileexplorer.welcome",
"title": "%contributes.commands.java.project.create%",
"category": "Java",
"icon": "$(add)"
},
{
"command": "_java.project.create.from.javaprojectexplorer.welcome",
"title": "%contributes.commands.java.project.create%",
"category": "Java",
"icon": "$(add)"
},
{
"command": "_java.project.create.from.javaprojectexplorer",
"title": "%contributes.commands.java.project.create%",
"category": "Java",
"icon": "$(add)"
},
{
"command": "java.project.addLibraries",
"title": "%contributes.commands.java.project.addLibraries%",
Expand Down Expand Up @@ -358,6 +388,9 @@
"file/newFile": [
{
"command": "java.view.menus.file.newJavaClass"
},
{
"command": "_java.project.create.from.menus.file"
}
],
"commandPalette": [
Expand Down Expand Up @@ -488,6 +521,26 @@
{
"command": "java.view.package.revealInProjectExplorer",
"when": "false"
},
{
"command": "_java.project.create.from.menus.file",
"when": "false"
},
{
"command": "_java.project.create.from.fileexplorer.menu",
"when": "false"
},
{
"command": "_java.project.create.from.fileexplorer.welcome",
"when": "false"
},
{
"command": "_java.project.create.from.javaprojectexplorer.welcome",
"when": "false"
},
{
"command": "_java.project.create.from.javaprojectexplorer",
"when": "false"
}
],
"explorer/context": [
Expand All @@ -500,6 +553,11 @@
"command": "java.view.package.revealInProjectExplorer",
"when": "resourceExtname == .java && java:serverMode == Standard",
"group": "navigation@100"
},
{
"command": "_java.project.create.from.fileexplorer.menu",
"when": "explorerResourceIsFolder",
"group": "navigation@10"
}
],
"editor/title": [
Expand All @@ -523,7 +581,7 @@
],
"view/title": [
{
"command": "java.project.create",
"command": "_java.project.create.from.javaprojectexplorer",
"when": "view == javaProjectExplorer",
"group": "navigation@10"
},
Expand Down Expand Up @@ -957,7 +1015,7 @@
"@types/node": "^16.18.11",
"@types/semver": "^7.3.13",
"@types/vscode": "1.77.0",
"@vscode/test-electron": "^2.2.2",
"@vscode/test-electron": "^2.3.8",
"copy-webpack-plugin": "^11.0.0",
"glob": "^7.2.3",
"mocha": "^9.2.2",
Expand Down
5 changes: 3 additions & 2 deletions package.nls.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"description": "Manage Java projects in Visual Studio Code",
"contributes.commands.java.project.create": "Create Java Project...",
"contributes.commands.java.project.new": "New Java Project...",
"contributes.commands.java.project.addLibraries": "Add Jar Libraries to Project Classpath...",
"contributes.commands.java.project.addLibraryFolders": "Add Library Folders to Project Classpath...",
"contributes.commands.java.project.removeLibrary": "Remove from Project Classpath",
Expand Down Expand Up @@ -56,8 +57,8 @@
"taskDefinitions.java.project.build.path.workspace": "All the projects in workspace.",
"taskDefinitions.java.project.build.path.exclude": "The path after '!' will be excluded from the paths to be built.",
"taskDefinitions.java.project.build.isFullBuild": "Whether to execute a clean build or not.",
"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)",
"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)",
"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)",
"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)",
"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)",
"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)",
"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)"
Expand Down
5 changes: 3 additions & 2 deletions package.nls.zh-cn.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"description": "在 Visual Studio Code 中管理 Java 项目",
"contributes.commands.java.project.create": "创建 Java 项目...",
"contributes.commands.java.project.new": "创建 Java 项目...",
"contributes.commands.java.project.addLibraries": "添加 Jar 文件至项目 Classpath...",
"contributes.commands.java.project.addLibraryFolders": "添加文件夹至项目 Classpath...",
"contributes.commands.java.project.removeLibrary": "从项目 Classpath 中移除",
Expand Down Expand Up @@ -56,8 +57,8 @@
"taskDefinitions.java.project.build.path.workspace": "工作空间中的所有项目。",
"taskDefinitions.java.project.build.path.exclude": "'!' 后的路径将会从待构建项目路径中移除。",
"taskDefinitions.java.project.build.isFullBuild": "是否要重新构建项目。",
"viewsWelcome.workbench.createNewJavaProject": "您也可以[打开一个 Java 项目目录](command:_java.project.open),或点击下方按钮创建一个新的 Java 项目。\n[创建 Java 项目](command:java.project.create)",
"viewsWelcome.workbench.noJavaProject": "当前工作空间未发现 Java 项目,您可以[打开一个 Java 项目目录](command:_java.project.open),或点击下方按钮创建一个新的 Java 项目。\n[创建 Java 项目](command:java.project.create)",
"viewsWelcome.workbench.createNewJavaProject": "您也可以[打开一个 Java 项目目录](command:_java.project.open),或点击下方按钮创建一个新的 Java 项目。\n[创建 Java 项目](command:_java.project.create.from.fileexplorer.welcome)",
"viewsWelcome.workbench.noJavaProject": "当前工作空间未发现 Java 项目,您可以[打开一个 Java 项目目录](command:_java.project.open),或点击下方按钮创建一个新的 Java 项目。\n[创建 Java 项目](command:_java.project.create.from.javaprojectexplorer.welcome)",
"viewsWelcome.workbench.importFailed": "加载 Java 项目时出现错误,请通过以下方式查看错误相关信息:\n[打开问题视图](command:workbench.panel.markers.view.focus)",
"viewsWelcome.workbench.inLightWeightMode": "要浏览项目信息,你可以将项目导入到工作空间中。\n[导入项目](command:java.server.mode.switch?%5B%22Standard%22,true%5D)",
"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)"
Expand Down
5 changes: 3 additions & 2 deletions package.nls.zh-tw.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"description": "在 Visual Studio Code 中管理 Java 專案",
"contributes.commands.java.project.create": "建立 Java 專案...",
"contributes.commands.java.project.new": "建立 Java 專案...",
"contributes.commands.java.project.addLibraries": "新增 Jar 檔案至專案 Classpath...",
"contributes.commands.java.project.addLibraryFolders": "新增資料夾至專案 Classpath...",
"contributes.commands.java.project.removeLibrary": "從專案 Classpath 中移除",
Expand Down Expand Up @@ -48,8 +49,8 @@
"taskDefinitions.java.project.build.path.workspace": "工作區中的所有專案。",
"taskDefinitions.java.project.build.path.exclude": "'!' 後的路徑將會從待建置專案路徑中移除。",
"taskDefinitions.java.project.build.isFullBuild": "是否要重新建置專案。",
"viewsWelcome.workbench.createNewJavaProject": "您也可以[開啟一個 Java 專案目錄](command:_java.project.open),或點擊下方按鈕建立一個新的 Java 專案。\n[建立 Java 專案](command:java.project.create)",
"viewsWelcome.workbench.noJavaProject": "當前工作區未發現 Java 專案,您可以[開啟一個 Java 專案目錄](command:_java.project.open),或點擊下方按鈕建立一個新的 Java 專案。\n[建立 Java 專案](command:java.project.create)",
"viewsWelcome.workbench.createNewJavaProject": "您也可以[開啟一個 Java 專案目錄](command:_java.project.open),或點擊下方按鈕建立一個新的 Java 專案。\n[建立 Java 專案](command:_java.project.create.from.fileexplorer.welcome)",
"viewsWelcome.workbench.noJavaProject": "當前工作區未發現 Java 專案,您可以[開啟一個 Java 專案目錄](command:_java.project.open),或點擊下方按鈕建立一個新的 Java 專案。\n[建立 Java 專案](command:_java.project.create.from.javaprojectexplorer.welcome)",
"viewsWelcome.workbench.importFailed": "加載 Java 專案時出現錯誤,請通過以下方式查看錯誤相關信息:\n[打開問題視圖](command:workbench.panel.markers.view.focus)",
"viewsWelcome.workbench.inLightWeightMode": "若要檢視各專案,你可以將專案匯入到工作區中。\n[匯入專案](command:java.server.mode.switch?%5B%22Standard%22,true%5D)",
"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)"
Expand Down
10 changes: 10 additions & 0 deletions src/commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,16 @@ export namespace Commands {

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

export const JAVA_PROJECT_CREATE_FROM_MENUS_FILE = "_java.project.create.from.menus.file";

export const JAVA_PROJECT_CREATE_FROM_FILEEXPLORER_MENU = "_java.project.create.from.fileexplorer.menu";

export const JAVA_PROJECT_CREATE_FROM_FILEEXPLORER_WELCOME = "_java.project.create.from.fileexplorer.welcome";

export const JAVA_PROJECT_CREATE_FROM_JAVAPROJECTEXPLORER_WELCOME = "_java.project.create.from.javaprojectexplorer.welcome";

export const JAVA_PROJECT_CREATE_FROM_JAVAPROJECTEXPLORER = "_java.project.create.from.javaprojectexplorer";

export const JAVA_PROJECT_ADD_LIBRARIES = "java.project.addLibraries";

export const JAVA_PROJECT_ADD_LIBRARY_FOLDERS = "java.project.addLibraryFolders";
Expand Down
19 changes: 16 additions & 3 deletions src/controllers/projectController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,17 @@ export class ProjectController implements Disposable {

public constructor(public readonly context: ExtensionContext) {
this.disposable = Disposable.from(
instrumentOperationAsVsCodeCommand(Commands.JAVA_PROJECT_CREATE, () => this.createJavaProject()),
instrumentOperationAsVsCodeCommand(Commands.JAVA_PROJECT_CREATE, () => this.createJavaProject("command")),
instrumentOperationAsVsCodeCommand(Commands.JAVA_PROJECT_CREATE_FROM_MENUS_FILE,
() => this.createJavaProject("menus.file")),
instrumentOperationAsVsCodeCommand(Commands.JAVA_PROJECT_CREATE_FROM_FILEEXPLORER_MENU,
() => this.createJavaProject("fileexplorer.menu")),
instrumentOperationAsVsCodeCommand(Commands.JAVA_PROJECT_CREATE_FROM_FILEEXPLORER_WELCOME,
() => this.createJavaProject("fileexplorer.welcome")),
instrumentOperationAsVsCodeCommand(Commands.JAVA_PROJECT_CREATE_FROM_JAVAPROJECTEXPLORER_WELCOME,
() => this.createJavaProject("javaprojectexplorer.welcome")),
instrumentOperationAsVsCodeCommand(Commands.JAVA_PROJECT_CREATE_FROM_JAVAPROJECTEXPLORER,
() => this.createJavaProject("javaprojectexplorer")),
instrumentOperationAsVsCodeCommand(Commands.JAVA_PROJECT_OPEN, () => this.openJavaProject()),
instrumentOperationAsVsCodeCommand(Commands.INSTALL_EXTENSION, (extensionId: string) => {
commands.executeCommand("workbench.extensions.installExtension", extensionId);
Expand All @@ -40,7 +50,7 @@ export class ProjectController implements Disposable {
return commands.executeCommand(Commands.WORKBENCH_ACTION_FILES_OPENFILEFOLDER);
}

public async createJavaProject() {
public async createJavaProject(triggerFrom : string) {
const items: IProjectTypeQuickPick[] = projectTypes.map((type: IProjectType) => {
return {
label: type.displayName,
Expand All @@ -56,7 +66,10 @@ export class ProjectController implements Disposable {
if (!choice || !await ensureExtension(choice.label, choice.metadata)) {
return;
}
sendInfo("", {projectCreationType: choice.metadata.type});
sendInfo("", {
projectCreationType: choice.metadata.type,
triggerfrom: triggerFrom,
});
if (choice.metadata.type === ProjectType.NoBuildTool) {
await scaffoldSimpleProject(this.context);
} else if (choice.metadata.createCommandId && choice.metadata.createCommandArgs) {
Expand Down
7 changes: 3 additions & 4 deletions test/ui/command.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import * as fse from "fs-extra";
import { platform, tmpdir } from "os";
import * as path from "path";
import * as seleniumWebdriver from "selenium-webdriver";
import { ActivityBar, By, InputBox, ModalDialog, SideBarView, StatusBar, TextEditor, TreeItem, VSBrowser, ViewSection, Workbench } from "vscode-extension-tester";
import { ActivityBar, By, InputBox, ModalDialog, SideBarView, StatusBar, TextEditor, TreeItem, VSBrowser, ViewSection, Workbench } from "vscode-extension-tester";
import { sleep } from "../util";

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

0 comments on commit c7a4296

Please sign in to comment.