Skip to content

Commit 3b75af2

Browse files
authored
feat: Support create different kind of resources from inline new button. (#754)
1 parent 100b677 commit 3b75af2

File tree

7 files changed

+69
-8
lines changed

7 files changed

+69
-8
lines changed

package.json

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,12 @@
168168
"title": "%contributes.commands.java.view.package.copyRelativeFilePath%",
169169
"category": "Java"
170170
},
171+
{
172+
"command": "java.view.package.new",
173+
"title": "%contributes.commands.java.view.package.new%",
174+
"category": "Java",
175+
"icon": "$(add)"
176+
},
171177
{
172178
"command": "java.view.menus.file.newJavaClass",
173179
"title": "%contributes.commands.java.view.menus.file.newJavaClass%",
@@ -382,6 +388,10 @@
382388
"command": "java.project.refreshLibraries",
383389
"when": "false"
384390
},
391+
{
392+
"command": "java.view.package.new",
393+
"when": "false"
394+
},
385395
{
386396
"command": "java.view.package.newJavaClass",
387397
"when": "false"
@@ -576,13 +586,8 @@
576586
"group": "1_new@10"
577587
},
578588
{
579-
"command": "java.view.package.newJavaClass",
580-
"when": "view == javaProjectExplorer && viewItem =~ /java:project(?=.*?\\b\\+java\\b)(?=.*?\\b\\+uri\\b)/",
581-
"group": "inline@add_0"
582-
},
583-
{
584-
"command": "java.view.package.newJavaClass",
585-
"when": "view == javaProjectExplorer && viewItem =~ /java:(package|packageRoot)(?=.*?\\b\\+source\\b)(?=.*?\\b\\+uri\\b)/",
589+
"command": "java.view.package.new",
590+
"when": "view == javaProjectExplorer && viewItem =~ /java(?!:container)(?!:jar)(?!.*?\\b\\+binary\\b)(?=.*?\\b\\+uri\\b)/",
586591
"group": "inline@add_0"
587592
},
588593
{

package.nls.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"contributes.commands.java.view.package.exportJar": "Export Jar...",
2121
"contributes.commands.java.view.package.copyFilePath": "Copy Path",
2222
"contributes.commands.java.view.package.copyRelativeFilePath": "Copy Relative Path",
23+
"contributes.commands.java.view.package.new": "New...",
2324
"contributes.commands.java.view.package.newJavaClass": "Java Class",
2425
"contributes.commands.java.view.package.newPackage": "Package",
2526
"contributes.commands.java.view.package.newFile": "File",

package.nls.zh-cn.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"contributes.commands.java.view.package.exportJar": "导出到 Jar 文件...",
2121
"contributes.commands.java.view.package.copyFilePath": "复制路径",
2222
"contributes.commands.java.view.package.copyRelativeFilePath": "复制相对路径",
23+
"contributes.commands.java.view.package.new": "创建...",
2324
"contributes.commands.java.view.package.newJavaClass": "Java 类",
2425
"contributes.commands.java.view.package.newPackage": "",
2526
"contributes.commands.java.view.package.newFile": "文件",

package.nls.zh-tw.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
"contributes.commands.java.view.package.exportJar": "匯出成 Jar 檔案...",
2020
"contributes.commands.java.view.package.copyFilePath": "複製路徑",
2121
"contributes.commands.java.view.package.copyRelativeFilePath": "複製相對路徑",
22+
"contributes.commands.java.view.package.new": "建立...",
2223
"contributes.commands.java.view.package.newJavaClass": "Java 類別",
2324
"contributes.commands.java.view.package.newPackage": "套件",
2425
"contributes.commands.java.view.package.newFile": "檔案",

src/commands.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ export namespace Commands {
3636

3737
export const EXPORT_JAR_REPORT = "java.view.package.exportJarReport";
3838

39+
export const VIEW_PACKAGE_NEW = "java.view.package.new";
40+
3941
export const VIEW_PACKAGE_NEW_JAVA_CLASS = "java.view.package.newJavaClass";
4042

4143
export const VIEW_PACKAGE_NEW_JAVA_PACKAGE = "java.view.package.newPackage";

src/explorerCommands/new.ts

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,54 @@ import { resourceRoots } from "../views/packageRootNode";
1313
import { checkJavaQualifiedName } from "./utility";
1414
import { sendError, setUserError } from "vscode-extension-telemetry-wrapper";
1515

16+
export async function newResource(node: DataNode): Promise<void> {
17+
const availableTypes: string[] = [];
18+
// add options for Java nodes
19+
if (node.nodeData.kind === NodeKind.Project ||
20+
(node.nodeData.kind === NodeKind.PackageRoot && !resourceRoots.includes(node.nodeData.name)) ||
21+
node.nodeData.kind === NodeKind.Package ||
22+
node.nodeData.kind === NodeKind.PrimaryType ||
23+
node.nodeData.kind === NodeKind.CompilationUnit) {
24+
availableTypes.push("$(symbol-class) Java Class", "$(symbol-namespace) Package");
25+
}
26+
27+
// add new file option
28+
availableTypes.push("$(file) File");
29+
30+
// add new folder option
31+
if (node.nodeData.kind === NodeKind.Project ||
32+
(node.nodeData.kind === NodeKind.PackageRoot && resourceRoots.includes(node.nodeData.name)) ||
33+
node.nodeData.kind === NodeKind.Folder ||
34+
node.nodeData.kind === NodeKind.File) {
35+
availableTypes.push("$(folder) Folder");
36+
}
37+
38+
const type = await window.showQuickPick(
39+
availableTypes,
40+
{
41+
placeHolder: "Select resource type to create.",
42+
ignoreFocusOut: true,
43+
}
44+
);
45+
46+
switch (type) {
47+
case "$(symbol-class) Java Class":
48+
await newJavaClass(node);
49+
break;
50+
case "$(symbol-namespace) Package":
51+
await newPackage(node);
52+
break;
53+
case "$(file) File":
54+
await newFile(node);
55+
break;
56+
case "$(folder) Folder":
57+
await newFolder(node);
58+
break;
59+
default:
60+
break;
61+
}
62+
}
63+
1664
// TODO: separate to two function to handle creation from menu bar and explorer.
1765
export async function newJavaClass(node?: DataNode): Promise<void> {
1866
let packageFsPath: string | undefined;

src/views/dependencyExplorer.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
import { instrumentOperationAsVsCodeCommand, sendInfo } from "vscode-extension-telemetry-wrapper";
1313
import { Commands } from "../commands";
1414
import { deleteFiles } from "../explorerCommands/delete";
15-
import { newFile, newFolder, newJavaClass, newPackage } from "../explorerCommands/new";
15+
import { newFile, newFolder, newJavaClass, newPackage, newResource } from "../explorerCommands/new";
1616
import { renameFile } from "../explorerCommands/rename";
1717
import { getCmdNode } from "../explorerCommands/utility";
1818
import { Jdtls } from "../java/jdtls";
@@ -125,6 +125,9 @@ export class DependencyExplorer implements Disposable {
125125

126126
// register keybinding commands
127127
context.subscriptions.push(
128+
instrumentOperationAsVsCodeCommand(Commands.VIEW_PACKAGE_NEW, async (node: DataNode) => {
129+
newResource(node);
130+
}),
128131
instrumentOperationAsVsCodeCommand(Commands.VIEW_PACKAGE_NEW_JAVA_CLASS, async (node?: DataNode) => {
129132
newJavaClass(node);
130133
}),

0 commit comments

Comments
 (0)