2
2
// Licensed under the MIT license.
3
3
4
4
import * as fse from "fs-extra" ;
5
+ import * as _ from "lodash" ;
5
6
import * as path from "path" ;
6
7
import { commands , Disposable , ExtensionContext , TextEditor , TreeView , TreeViewVisibilityChangeEvent , Uri , window } from "vscode" ;
7
8
import { instrumentOperationAsVsCodeCommand } from "vscode-extension-telemetry-wrapper" ;
@@ -14,6 +15,7 @@ import { Jdtls } from "../java/jdtls";
14
15
import { INodeData } from "../java/nodeData" ;
15
16
import { languageServerApiManager } from "../languageServerApi/languageServerApiManager" ;
16
17
import { Settings } from "../settings" ;
18
+ import { Lock } from "../utils/Lock" ;
17
19
import { DataNode } from "./dataNode" ;
18
20
import { DependencyDataProvider } from "./dependencyDataProvider" ;
19
21
import { ExplorerNode } from "./explorerNode" ;
@@ -30,6 +32,8 @@ export class DependencyExplorer implements Disposable {
30
32
31
33
private static _instance : DependencyExplorer ;
32
34
35
+ private _lock : Lock = new Lock ( ) ;
36
+
33
37
private _dependencyViewer : TreeView < ExplorerNode > ;
34
38
35
39
private _dataProvider : DependencyDataProvider ;
@@ -133,21 +137,28 @@ export class DependencyExplorer implements Disposable {
133
137
}
134
138
135
139
public async reveal ( uri : Uri ) : Promise < void > {
136
- if ( ! await languageServerApiManager . isStandardServerReady ( ) ) {
137
- return ;
138
- }
140
+ try {
141
+ await this . _lock . acquire ( ) ;
139
142
140
- let node : DataNode | undefined = explorerNodeCache . getDataNode ( uri ) ;
141
- if ( ! node ) {
142
- const paths : INodeData [ ] = await Jdtls . resolvePath ( uri . toString ( ) ) ;
143
- if ( ! paths || paths . length === 0 ) {
143
+ if ( ! await languageServerApiManager . isStandardServerReady ( ) ) {
144
+ return ;
145
+ }
146
+
147
+ let node : DataNode | undefined = explorerNodeCache . getDataNode ( uri ) ;
148
+ if ( ! node ) {
149
+ const paths : INodeData [ ] = await Jdtls . resolvePath ( uri . toString ( ) ) ;
150
+ if ( ! _ . isEmpty ( paths ) ) {
151
+ node = await this . _dataProvider . revealPaths ( paths ) ;
152
+ }
153
+ }
154
+
155
+ if ( ! node ) {
144
156
return ;
145
157
}
146
- node = await this . _dataProvider . revealPaths ( paths ) ;
147
- }
148
158
149
- if ( this . _dependencyViewer . visible ) {
150
- this . _dependencyViewer . reveal ( node ) ;
159
+ await this . _dependencyViewer . reveal ( node ) ;
160
+ } finally {
161
+ this . _lock . release ( ) ;
151
162
}
152
163
}
153
164
0 commit comments