Skip to content

Commit f794a19

Browse files
authored
Track db related to modeled method and react when it closes (#2930)
1 parent e98611f commit f794a19

File tree

4 files changed

+22
-6
lines changed

4 files changed

+22
-6
lines changed

extensions/ql-vscode/src/common/interface-types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -634,7 +634,7 @@ interface SetMethodModelingPanelViewStateMessage {
634634

635635
interface SetMethodMessage {
636636
t: "setMethod";
637-
method: Method;
637+
method: Method | undefined;
638638
}
639639

640640
interface SetMethodModifiedMessage {

extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-panel.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { Method } from "../method";
66
import { ModelingStore } from "../modeling-store";
77
import { ModelEditorViewTracker } from "../model-editor-view-tracker";
88
import { ModelConfigListener } from "../../config";
9+
import { DatabaseItem } from "../../databases/local-databases";
910

1011
export class MethodModelingPanel extends DisposableObject {
1112
private readonly provider: MethodModelingViewProvider;
@@ -36,7 +37,10 @@ export class MethodModelingPanel extends DisposableObject {
3637
);
3738
}
3839

39-
public async setMethod(method: Method): Promise<void> {
40-
await this.provider.setMethod(method);
40+
public async setMethod(
41+
databaseItem: DatabaseItem,
42+
method: Method,
43+
): Promise<void> {
44+
await this.provider.setMethod(databaseItem, method);
4145
}
4246
}

extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { AbstractWebviewViewProvider } from "../../common/vscode/abstract-webvie
1313
import { assertNever } from "../../common/helpers-pure";
1414
import { ModelEditorViewTracker } from "../model-editor-view-tracker";
1515
import { ModelConfigListener } from "../../config";
16+
import { DatabaseItem } from "../../databases/local-databases";
1617

1718
export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
1819
ToMethodModelingMessage,
@@ -21,6 +22,7 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
2122
public static readonly viewType = "codeQLMethodModeling";
2223

2324
private method: Method | undefined = undefined;
25+
private databaseItem: DatabaseItem | undefined = undefined;
2426

2527
constructor(
2628
app: App,
@@ -46,8 +48,12 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
4648
});
4749
}
4850

49-
public async setMethod(method: Method): Promise<void> {
51+
public async setMethod(
52+
databaseItem: DatabaseItem | undefined,
53+
method: Method | undefined,
54+
): Promise<void> {
5055
this.method = method;
56+
this.databaseItem = databaseItem;
5157

5258
if (this.isShowingView) {
5359
await this.postMessage({
@@ -174,6 +180,8 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
174180
this.modelingStore.onSelectedMethodChanged(async (e) => {
175181
if (this.webviewView) {
176182
this.method = e.method;
183+
this.databaseItem = e.databaseItem;
184+
177185
await this.postMessage({
178186
t: "setSelectedMethod",
179187
method: e.method,
@@ -194,13 +202,17 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
194202
);
195203

196204
this.push(
197-
this.modelingStore.onDbClosed(async () => {
205+
this.modelingStore.onDbClosed(async (dbUri) => {
198206
if (!this.modelingStore.anyDbsBeingModeled()) {
199207
await this.postMessage({
200208
t: "setInModelingMode",
201209
inModelingMode: false,
202210
});
203211
}
212+
213+
if (dbUri === this.databaseItem?.databaseUri.toString()) {
214+
await this.setMethod(undefined, undefined);
215+
}
204216
}),
205217
);
206218
}

extensions/ql-vscode/src/model-editor/model-editor-module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ export class ModelEditorModule extends DisposableObject {
105105
usage: Usage,
106106
): Promise<void> {
107107
await this.methodsUsagePanel.revealItem(usage);
108-
await this.methodModelingPanel.setMethod(method);
108+
await this.methodModelingPanel.setMethod(databaseItem, method);
109109
await showResolvableLocation(usage.url, databaseItem, this.app.logger);
110110
}
111111

0 commit comments

Comments
 (0)