From b9e0a5b2d7cbe47c4f621b8821153bd3edcff294 Mon Sep 17 00:00:00 2001 From: sheche Date: Thu, 9 Jun 2022 09:40:59 +0800 Subject: [PATCH 1/2] fix: Duplicated tree items show in the explorer Signed-off-by: sheche --- src/views/dependencyExplorer.ts | 47 ++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/src/views/dependencyExplorer.ts b/src/views/dependencyExplorer.ts index 3bfb7f90..6f3e8369 100644 --- a/src/views/dependencyExplorer.ts +++ b/src/views/dependencyExplorer.ts @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +import AwaitLock from "await-lock"; import * as fse from "fs-extra"; import * as _ from "lodash"; import * as path from "path"; @@ -38,9 +39,12 @@ export class DependencyExplorer implements Disposable { private _dataProvider: DependencyDataProvider; + private _revealLock: AwaitLock; + constructor(public readonly context: ExtensionContext) { this._dataProvider = new DependencyDataProvider(context); this._dependencyViewer = window.createTreeView("javaProjectExplorer", { treeDataProvider: this._dataProvider, showCollapseAll: true }); + this._revealLock = new AwaitLock(); // register reveal events context.subscriptions.push( @@ -141,27 +145,32 @@ export class DependencyExplorer implements Disposable { } public async reveal(uri: Uri, needCheckSyncSetting: boolean = true): Promise { - if (needCheckSyncSetting && !Settings.syncWithFolderExplorer()) { - return; - } - - if (!await Utility.isRevealable(uri)) { - return; - } - - let node: DataNode | undefined = explorerNodeCache.getDataNode(uri); - if (!node) { - const paths: INodeData[] = await Jdtls.resolvePath(uri.toString()); - if (!_.isEmpty(paths)) { - node = await this._dataProvider.revealPaths(paths); + try { + await this._revealLock.acquireAsync(); + if (needCheckSyncSetting && !Settings.syncWithFolderExplorer()) { + return; } + + if (!await Utility.isRevealable(uri)) { + return; + } + + let node: DataNode | undefined = explorerNodeCache.getDataNode(uri); + if (!node) { + const paths: INodeData[] = await Jdtls.resolvePath(uri.toString()); + if (!_.isEmpty(paths)) { + node = await this._dataProvider.revealPaths(paths); + } + } + + if (!node) { + return; + } + + await this._dependencyViewer.reveal(node); + } finally { + this._revealLock.release(); } - - if (!node) { - return; - } - - await this._dependencyViewer.reveal(node); } public get dataProvider(): DependencyDataProvider { From 9b617a15df6817ed81184be69150a676e6349e7c Mon Sep 17 00:00:00 2001 From: sheche Date: Thu, 9 Jun 2022 09:45:15 +0800 Subject: [PATCH 2/2] fix tslint --- src/views/dependencyExplorer.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/views/dependencyExplorer.ts b/src/views/dependencyExplorer.ts index 6f3e8369..c891a261 100644 --- a/src/views/dependencyExplorer.ts +++ b/src/views/dependencyExplorer.ts @@ -150,11 +150,11 @@ export class DependencyExplorer implements Disposable { if (needCheckSyncSetting && !Settings.syncWithFolderExplorer()) { return; } - + if (!await Utility.isRevealable(uri)) { return; } - + let node: DataNode | undefined = explorerNodeCache.getDataNode(uri); if (!node) { const paths: INodeData[] = await Jdtls.resolvePath(uri.toString()); @@ -162,11 +162,11 @@ export class DependencyExplorer implements Disposable { node = await this._dataProvider.revealPaths(paths); } } - + if (!node) { return; } - + await this._dependencyViewer.reveal(node); } finally { this._revealLock.release();