Skip to content

Commit 77bb978

Browse files
committed
Fix confusion between modeling store an view states
This fixes three bugs related to the modeling store and view states: - In the model editor view, when `setModeledMethods` was called, it would do it on the active database, instead of the database that the view was showing. This should not result in any visible bugs since the active database is always the one that is being shown (in theory), but I can imagine that it could cause issues if showing multiple model editors next to each other. - In the method modeling panel, the "reveal in editor" button would always show the already active model editor. Therefore, if you had multiple open and were still viewing the method of the first one, it would always show the second one. - In the method modeling panel, the same bug would cause the incorrect modeled methods to be updated.
1 parent bb88c14 commit 77bb978

File tree

3 files changed

+13
-22
lines changed

3 files changed

+13
-22
lines changed

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

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { extLogger } from "../../common/logging/vscode/loggers";
88
import { App } from "../../common/app";
99
import { redactableError } from "../../common/errors";
1010
import { Method } from "../method";
11-
import { DbModelingState, ModelingStore } from "../modeling-store";
11+
import { ModelingStore } from "../modeling-store";
1212
import { AbstractWebviewViewProvider } from "../../common/vscode/abstract-webview-view-provider";
1313
import { assertNever } from "../../common/helpers-pure";
1414
import { ModelEditorViewTracker } from "../model-editor-view-tracker";
@@ -111,15 +111,17 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
111111
break;
112112

113113
case "setModeledMethod": {
114-
const activeState = this.ensureActiveState();
114+
if (!this.databaseItem) {
115+
return;
116+
}
115117

116118
this.modelingStore.updateModeledMethods(
117-
activeState.databaseItem,
119+
this.databaseItem,
118120
msg.method.signature,
119121
convertFromLegacyModeledMethod(msg.method),
120122
);
121123
this.modelingStore.addModifiedMethod(
122-
activeState.databaseItem,
124+
this.databaseItem,
123125
msg.method.signature,
124126
);
125127
break;
@@ -140,10 +142,12 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
140142
}
141143

142144
private async revealInModelEditor(method: Method): Promise<void> {
143-
const activeState = this.ensureActiveState();
145+
if (!this.databaseItem) {
146+
return;
147+
}
144148

145149
const views = this.editorViewTracker.getViews(
146-
activeState.databaseItem.databaseUri.toString(),
150+
this.databaseItem.databaseUri.toString(),
147151
);
148152
if (views.length === 0) {
149153
return;
@@ -152,15 +156,6 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
152156
await Promise.all(views.map((view) => view.revealMethod(method)));
153157
}
154158

155-
private ensureActiveState(): DbModelingState {
156-
const activeState = this.modelingStore.getStateForActiveDb();
157-
if (!activeState) {
158-
throw new Error("No active state found in modeling store");
159-
}
160-
161-
return activeState;
162-
}
163-
164159
private registerToModelingStoreEvents(): void {
165160
this.push(
166161
this.modelingStore.onModeledMethodsChanged(async (e) => {

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

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -664,16 +664,11 @@ export class ModelEditorView extends AbstractWebview<
664664
}
665665

666666
private setModeledMethods(signature: string, methods: ModeledMethod[]) {
667-
const state = this.modelingStore.getStateForActiveDb();
668-
if (!state) {
669-
throw new Error("Attempting to set modeled method without active db");
670-
}
671-
672667
this.modelingStore.updateModeledMethods(
673-
state.databaseItem,
668+
this.databaseItem,
674669
signature,
675670
methods,
676671
);
677-
this.modelingStore.addModifiedMethod(state.databaseItem, signature);
672+
this.modelingStore.addModifiedMethod(this.databaseItem, signature);
678673
}
679674
}

extensions/ql-vscode/src/model-editor/modeling-store.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,7 @@ export class ModelingStore extends DisposableObject {
347347
}
348348

349349
return {
350+
databaseItem: dbState.databaseItem,
350351
method: selectedMethod,
351352
usage: dbState.selectedUsage,
352353
modeledMethods: dbState.modeledMethods[selectedMethod.signature] ?? [],

0 commit comments

Comments
 (0)