diff --git a/.gitignore b/.gitignore index 51864e56..9b946029 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,4 @@ out/ vscode-java-*.vsix packages/ dist -.settings \ No newline at end of file +**/.settings \ No newline at end of file diff --git a/javaConfig.json b/javaConfig.json new file mode 100644 index 00000000..c561d892 --- /dev/null +++ b/javaConfig.json @@ -0,0 +1,6 @@ +{ + "projects": [ + "./jdtls.ext/" + ], + "targetPlatform": "./jdtls.ext/target.target" +} diff --git a/jdtls.ext/javaProject.json b/jdtls.ext/javaConfig.json similarity index 100% rename from jdtls.ext/javaProject.json rename to jdtls.ext/javaConfig.json diff --git a/package-lock.json b/package-lock.json index a35734de..614545e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2969,12 +2969,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2989,17 +2991,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -3116,7 +3121,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -3128,6 +3134,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -3142,6 +3149,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -3149,12 +3157,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -3173,6 +3183,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -3253,7 +3264,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -3265,6 +3277,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -3386,6 +3399,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", diff --git a/package.json b/package.json index f2007819..21ec461d 100644 --- a/package.json +++ b/package.json @@ -99,6 +99,11 @@ "description": "%configuration.java.dependency.syncWithFolderExplorer%", "default": true }, + "java.dependency.autoRefresh": { + "type": "boolean", + "description": "%configuration.java.dependency.autoRefresh%", + "default": true + }, "java.dependency.packagePresentation": { "type": "string", "enum": [ diff --git a/package.nls.json b/package.nls.json index 1c1d81b1..8dabb906 100644 --- a/package.nls.json +++ b/package.nls.json @@ -10,5 +10,6 @@ "configuration.java.dependency.title": "Java Dependency Configuration", "configuration.java.dependency.showOutline": "Enable show outline in the Java Dependency explorer", "configuration.java.dependency.syncWithFolderExplorer": "Synchronize dependency viewer selection with folder explorer", + "configuration.java.dependency.autoRefresh": "Synchronize dependency viewer with changes", "configuration.java.dependency.packagePresentation": "Package presentation mode: flat or hierarchical" } diff --git a/package.nls.zh.json b/package.nls.zh.json index 59dfcef1..53a066d8 100644 --- a/package.nls.zh.json +++ b/package.nls.zh.json @@ -10,5 +10,6 @@ "configuration.java.dependency.title": "Java 依赖管理配置", "configuration.java.dependency.showOutline": "在 Java 依赖项资源管理器中显示类成员大纲", "configuration.java.dependency.syncWithFolderExplorer": "在 Java 依赖项资源管理器中同步关联当前打开的文件", + "configuration.java.dependency.autoRefresh": "在 Java 依赖项资源管理器中自动同步修改", "configuration.java.dependency.packagePresentation": "Java 包显示方式: 平行显示或者分层显示" } diff --git a/src/fileWather.ts b/src/fileWather.ts new file mode 100644 index 00000000..6454e2ab --- /dev/null +++ b/src/fileWather.ts @@ -0,0 +1,37 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +import { Disposable, workspace, commands, FileSystemWatcher } from "vscode"; +import { Commands } from "./commands"; + +export class SyncHandler { + + private static javaFileContentWatcher: Disposable = null; + + private static javaFileSystemWatcher: FileSystemWatcher = null; + + public static updateFileWatcher(autoRefresh: boolean): void { + if (autoRefresh) { + SyncHandler.javaFileContentWatcher = workspace.onDidChangeTextDocument((event) => { + if (event.document.languageId === 'java') { + SyncHandler.refresh(); + } + }); + SyncHandler.javaFileSystemWatcher = workspace.createFileSystemWatcher('**/*.{java}'); + SyncHandler.javaFileSystemWatcher.onDidChange(SyncHandler.refresh); + SyncHandler.javaFileSystemWatcher.onDidCreate(SyncHandler.refresh); + SyncHandler.javaFileSystemWatcher.onDidDelete(SyncHandler.refresh); + } else { + if (SyncHandler.javaFileContentWatcher) { + SyncHandler.javaFileContentWatcher.dispose(); + } + if (SyncHandler.javaFileSystemWatcher) { + SyncHandler.javaFileSystemWatcher.dispose(); + } + } + } + + private static refresh(): void { + commands.executeCommand(Commands.VIEW_PACKAGE_REFRESH); + } +} \ No newline at end of file diff --git a/src/settings.ts b/src/settings.ts index cd5e4e2f..6843e680 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -1,9 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -import { commands, ConfigurationChangeEvent, ExtensionContext, workspace, WorkspaceConfiguration } from "vscode"; +import { commands, ConfigurationChangeEvent, ExtensionContext, workspace, WorkspaceConfiguration, window, DocumentHighlight, Disposable } from "vscode"; import { instrumentOperation } from "vscode-extension-telemetry-wrapper"; import { Commands } from "./commands"; +import { SyncHandler } from "./fileWather"; export class Settings { @@ -20,9 +21,13 @@ export class Settings { this._dependencyConfig = updatedConfig; commands.executeCommand(Commands.VIEW_PACKAGE_REFRESH); } else { + if (updatedConfig.autoRefresh !== this._dependencyConfig.autoRefresh) { + SyncHandler.updateFileWatcher(updatedConfig.autoRefresh); + } this._dependencyConfig = updatedConfig; } })); + SyncHandler.updateFileWatcher(Settings.autoRefresh()); context.subscriptions.push(commands.registerCommand(Commands.VIEW_PACKAGE_LINKWITHFOLDER, instrumentOperation(Commands.VIEW_PACKAGE_LINKWITHFOLDER, Settings.linkWithFolderCommand))); @@ -57,6 +62,10 @@ export class Settings { return this._dependencyConfig.get("showOutline"); } + public static autoRefresh(): boolean { + return this._dependencyConfig.get("autoRefresh"); + } + public static syncWithFolderExplorer(): boolean { return this._dependencyConfig.get("syncWithFolderExplorer"); }