diff --git a/package.json b/package.json index 8b961032..57997f69 100644 --- a/package.json +++ b/package.json @@ -377,32 +377,22 @@ }, { "command": "java.view.package.renameFile", - "when": "view == javaProjectExplorer && viewItem =~ /java:(package|packageRoot)(?=.*?\\b\\+source\\b)(?=.*?\\b\\+uri\\b)/", - "group": "7_modification@10" - }, - { - "command": "java.view.package.renameFile", - "when": "view == javaProjectExplorer && viewItem =~ /java:file(?=.*?\\b\\+uri\\b)/", + "when": "view == javaProjectExplorer && viewItem =~ /java:(package|packageRoot)(?=.*?\\b\\+(source|resource)\\b)(?=.*?\\b\\+uri\\b)/", "group": "7_modification@10" }, { "command": "java.view.package.renameFile", - "when": "view == javaProjectExplorer && viewItem =~ /java:type(?=.*?\\b\\+uri\\b)/", + "when": "view == javaProjectExplorer && viewItem =~ /java:(file|type|folder)(?=.*?\\b\\+uri\\b)/", "group": "7_modification@10" }, { "command": "java.view.package.moveFileToTrash", - "when": "view == javaProjectExplorer && viewItem =~ /java:(package|packageRoot)(?=.*?\\b\\+source\\b)(?=.*?\\b\\+uri\\b)/", - "group": "7_modification@20" - }, - { - "command": "java.view.package.moveFileToTrash", - "when": "view == javaProjectExplorer && viewItem =~ /java:file(?=.*?\\b\\+uri\\b)/", + "when": "view == javaProjectExplorer && viewItem =~ /java:(package|packageRoot)(?=.*?\\b\\+(source|resource)\\b)(?=.*?\\b\\+uri\\b)/", "group": "7_modification@20" }, { "command": "java.view.package.moveFileToTrash", - "when": "view == javaProjectExplorer && viewItem =~ /java:type(?=.*?\\b\\+uri\\b)/", + "when": "view == javaProjectExplorer && viewItem =~ /java:(file|type|folder)(?=.*?\\b\\+uri\\b)/", "group": "7_modification@20" }, { diff --git a/src/constants.ts b/src/constants.ts index 5cc5031b..0cd11895 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -16,6 +16,7 @@ export namespace Explorer { Jar = "jar", File = "file", Type = "type", + Folder = "folder", } } diff --git a/src/explorerCommands/utils.ts b/src/explorerCommands/utils.ts index 3bf4a4ab..8fd3019a 100644 --- a/src/explorerCommands/utils.ts +++ b/src/explorerCommands/utils.ts @@ -5,10 +5,9 @@ import { DataNode } from "../views/dataNode"; export function isMutable(node: DataNode): boolean { // avoid modify dependency files - const packageExp = /java:(package|packageRoot)(?=.*?\b\+source\b)(?=.*?\b\+uri\b)/; - const fileExp = /java:file(?=.*?\b\+uri\b)/; - const typeExp = /java:type(?=.*?\b\+uri\b)/; + const packageExp = /java:(package|packageRoot)(?=.*?\b\+(source|resource)\b)(?=.*?\b\+uri\b)/; + const resourceOrTypeExp = /java:(file|type|folder)(?=.*?\b\+uri\b)/; const contextValue = node.computeContextValue(); - return packageExp.test(contextValue) || fileExp.test(contextValue) || typeExp.test(contextValue); + return packageExp.test(contextValue) || resourceOrTypeExp.test(contextValue); } diff --git a/src/views/folderNode.ts b/src/views/folderNode.ts index 69e7ce8e..5b3d6a8c 100644 --- a/src/views/folderNode.ts +++ b/src/views/folderNode.ts @@ -2,6 +2,7 @@ // Licensed under the MIT license. import { ThemeIcon } from "vscode"; +import { Explorer } from "../constants"; import { Jdtls } from "../java/jdtls"; import { INodeData, NodeKind } from "../java/nodeData"; import { DataNode } from "./dataNode"; @@ -41,4 +42,8 @@ export class FolderNode extends DataNode { protected get iconPath(): ThemeIcon { return new ThemeIcon("folder"); } + + protected get contextValue(): string { + return Explorer.ContextValueType.Folder; + } } diff --git a/test/explorer/contextValue.test.ts b/test/explorer/contextValue.test.ts index 44b040c0..3059cc3a 100644 --- a/test/explorer/contextValue.test.ts +++ b/test/explorer/contextValue.test.ts @@ -7,6 +7,7 @@ import { INodeData, NodeKind, TypeKind } from "../../src/java/nodeData"; import { PackageRootKind } from "../../src/java/packageRootNodeData"; import { ContainerNode } from "../../src/views/containerNode"; import { FileNode } from "../../src/views/fileNode"; +import { FolderNode } from "../../src/views/folderNode"; import { PackageNode } from "../../src/views/packageNode"; import { PackageRootNode } from "../../src/views/packageRootNode"; import { PrimaryTypeNode } from "../../src/views/PrimaryTypeNode"; @@ -84,6 +85,10 @@ suite("Context Value Tests", () => { test("test interface type node", async function() { assert.equal((await interfaceType.getTreeItem()).contextValue, "java:type+interface+uri"); }); + + test("test folder node", async function() { + assert.equal((await folder.getTreeItem()).contextValue, "java:folder+uri"); + }); }); // below are faked nodes only for test purpose @@ -211,3 +216,9 @@ const interfaceType: PrimaryTypeNode = new PrimaryTypeNode({ TypeKind: TypeKind.Interface, }, }, sourcePackage); + +const folder: FolderNode = new FolderNode({ + name: "static", + uri: Uri.file(__dirname).toString(), + kind: NodeKind.Package, +}, resourceRoot, mavenProject, resourceRoot);