Skip to content

Commit c45a815

Browse files
Merge pull request #3395 from github/robertbrignull/set-modeled-and-modified-methods
Set modeled methods and modified methods together
2 parents 6e61ddb + a74e363 commit c45a815

File tree

8 files changed

+56
-123
lines changed

8 files changed

+56
-123
lines changed

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -529,9 +529,10 @@ interface SetMethodsMessage {
529529
methods: Method[];
530530
}
531531

532-
interface SetModeledMethodsMessage {
533-
t: "setModeledMethods";
532+
interface SetModeledAndModifiedMethodsMessage {
533+
t: "setModeledAndModifiedMethods";
534534
methods: Record<string, ModeledMethod[]>;
535+
modifiedMethodSignatures: string[];
535536
}
536537

537538
interface SetModifiedMethodsMessage {
@@ -647,7 +648,7 @@ interface SetModelEvaluationRunMessage {
647648
export type ToModelEditorMessage =
648649
| SetExtensionPackStateMessage
649650
| SetMethodsMessage
650-
| SetModeledMethodsMessage
651+
| SetModeledAndModifiedMethodsMessage
651652
| SetModifiedMethodsMessage
652653
| SetInProgressMethodsMessage
653654
| SetProcessedByAutoModelMethodsMessage

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

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,7 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
126126
this.databaseItem,
127127
msg.methodSignature,
128128
msg.modeledMethods,
129-
);
130-
this.modelingStore.addModifiedMethod(
131-
this.databaseItem,
132-
msg.methodSignature,
129+
true,
133130
);
134131
break;
135132
}
@@ -164,7 +161,7 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
164161

165162
private registerToModelingEvents(): void {
166163
this.push(
167-
this.modelingEvents.onModeledMethodsChanged(async (e) => {
164+
this.modelingEvents.onModeledAndModifiedMethodsChanged(async (e) => {
168165
if (this.webviewView && e.isActiveDb && this.method) {
169166
const modeledMethods = e.modeledMethods[this.method.signature];
170167
if (modeledMethods) {
@@ -174,17 +171,10 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider<
174171
modeledMethods,
175172
});
176173
}
177-
}
178-
}),
179-
);
180174

181-
this.push(
182-
this.modelingEvents.onModifiedMethodsChanged(async (e) => {
183-
if (this.webviewView && e.isActiveDb && this.method) {
184-
const isModified = e.modifiedMethods.has(this.method.signature);
185175
await this.postMessage({
186176
t: "setMethodModified",
187-
isModified,
177+
isModified: e.modifiedMethodSignatures.has(this.method.signature),
188178
});
189179
}
190180
}),

extensions/ql-vscode/src/model-editor/methods-usage/methods-usage-panel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ export class MethodsUsagePanel extends DisposableObject {
102102
);
103103

104104
this.push(
105-
this.modelingEvents.onModifiedMethodsChanged(async (event) => {
105+
this.modelingEvents.onModeledAndModifiedMethodsChanged(async (event) => {
106106
if (event.isActiveDb) {
107107
await this.handleStateChangeEvent();
108108
}

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

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -910,22 +910,12 @@ export class ModelEditorView extends AbstractWebview<
910910
);
911911

912912
this.push(
913-
this.modelingEvents.onModeledMethodsChanged(async (event) => {
913+
this.modelingEvents.onModeledAndModifiedMethodsChanged(async (event) => {
914914
if (event.dbUri === this.databaseItem.databaseUri.toString()) {
915915
await this.postMessage({
916-
t: "setModeledMethods",
916+
t: "setModeledAndModifiedMethods",
917917
methods: event.modeledMethods,
918-
});
919-
}
920-
}),
921-
);
922-
923-
this.push(
924-
this.modelingEvents.onModifiedMethodsChanged(async (event) => {
925-
if (event.dbUri === this.databaseItem.databaseUri.toString()) {
926-
await this.postMessage({
927-
t: "setModifiedMethods",
928-
methodSignatures: [...event.modifiedMethods],
918+
modifiedMethodSignatures: [...event.modifiedMethodSignatures],
929919
});
930920
}
931921
}),
@@ -981,11 +971,10 @@ export class ModelEditorView extends AbstractWebview<
981971
}
982972

983973
private addModeledMethods(modeledMethods: Record<string, ModeledMethod[]>) {
984-
this.modelingStore.addModeledMethods(this.databaseItem, modeledMethods);
985-
986-
this.modelingStore.addModifiedMethods(
974+
this.modelingStore.addModeledMethods(
987975
this.databaseItem,
988-
new Set(Object.keys(modeledMethods)),
976+
modeledMethods,
977+
true,
989978
);
990979
}
991980

@@ -1008,8 +997,8 @@ export class ModelEditorView extends AbstractWebview<
1008997
this.databaseItem,
1009998
signature,
1010999
methods,
1000+
true,
10111001
);
1012-
this.modelingStore.addModifiedMethod(this.databaseItem, signature);
10131002
}
10141003

10151004
private async updateModelEvaluationRun(run: ModelEvaluationRunState) {

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

Lines changed: 12 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,9 @@ interface ModeChangedEvent {
2424
readonly isActiveDb: boolean;
2525
}
2626

27-
interface ModeledMethodsChangedEvent {
27+
interface ModeledAndModifiedMethodsChangedEvent {
2828
readonly modeledMethods: Readonly<Record<string, ModeledMethod[]>>;
29-
readonly dbUri: string;
30-
readonly isActiveDb: boolean;
31-
}
32-
33-
interface ModifiedMethodsChangedEvent {
34-
readonly modifiedMethods: ReadonlySet<string>;
29+
readonly modifiedMethodSignatures: ReadonlySet<string>;
3530
readonly dbUri: string;
3631
readonly isActiveDb: boolean;
3732
}
@@ -77,8 +72,7 @@ export class ModelingEvents extends DisposableObject {
7772
public readonly onMethodsChanged: AppEvent<MethodsChangedEvent>;
7873
public readonly onHideModeledMethodsChanged: AppEvent<HideModeledMethodsChangedEvent>;
7974
public readonly onModeChanged: AppEvent<ModeChangedEvent>;
80-
public readonly onModeledMethodsChanged: AppEvent<ModeledMethodsChangedEvent>;
81-
public readonly onModifiedMethodsChanged: AppEvent<ModifiedMethodsChangedEvent>;
75+
public readonly onModeledAndModifiedMethodsChanged: AppEvent<ModeledAndModifiedMethodsChangedEvent>;
8276
public readonly onSelectedMethodChanged: AppEvent<SelectedMethodChangedEvent>;
8377
public readonly onInProgressMethodsChanged: AppEvent<InProgressMethodsChangedEvent>;
8478
public readonly onProcessedByAutoModelMethodsChanged: AppEvent<ProcessedByAutoModelMethodsChangedEvent>;
@@ -92,8 +86,7 @@ export class ModelingEvents extends DisposableObject {
9286
private readonly onMethodsChangedEventEmitter: AppEventEmitter<MethodsChangedEvent>;
9387
private readonly onHideModeledMethodsChangedEventEmitter: AppEventEmitter<HideModeledMethodsChangedEvent>;
9488
private readonly onModeChangedEventEmitter: AppEventEmitter<ModeChangedEvent>;
95-
private readonly onModeledMethodsChangedEventEmitter: AppEventEmitter<ModeledMethodsChangedEvent>;
96-
private readonly onModifiedMethodsChangedEventEmitter: AppEventEmitter<ModifiedMethodsChangedEvent>;
89+
private readonly onModeledAndModifiedMethodsChangedEventEmitter: AppEventEmitter<ModeledAndModifiedMethodsChangedEvent>;
9790
private readonly onSelectedMethodChangedEventEmitter: AppEventEmitter<SelectedMethodChangedEvent>;
9891
private readonly onInProgressMethodsChangedEventEmitter: AppEventEmitter<InProgressMethodsChangedEvent>;
9992
private readonly onProcessedByAutoModelMethodsChangedEventEmitter: AppEventEmitter<ProcessedByAutoModelMethodsChangedEvent>;
@@ -133,17 +126,11 @@ export class ModelingEvents extends DisposableObject {
133126
);
134127
this.onModeChanged = this.onModeChangedEventEmitter.event;
135128

136-
this.onModeledMethodsChangedEventEmitter = this.push(
137-
app.createEventEmitter<ModeledMethodsChangedEvent>(),
129+
this.onModeledAndModifiedMethodsChangedEventEmitter = this.push(
130+
app.createEventEmitter<ModeledAndModifiedMethodsChangedEvent>(),
138131
);
139-
this.onModeledMethodsChanged =
140-
this.onModeledMethodsChangedEventEmitter.event;
141-
142-
this.onModifiedMethodsChangedEventEmitter = this.push(
143-
app.createEventEmitter<ModifiedMethodsChangedEvent>(),
144-
);
145-
this.onModifiedMethodsChanged =
146-
this.onModifiedMethodsChangedEventEmitter.event;
132+
this.onModeledAndModifiedMethodsChanged =
133+
this.onModeledAndModifiedMethodsChangedEventEmitter.event;
147134

148135
this.onSelectedMethodChangedEventEmitter = this.push(
149136
app.createEventEmitter<SelectedMethodChangedEvent>(),
@@ -223,25 +210,15 @@ export class ModelingEvents extends DisposableObject {
223210
});
224211
}
225212

226-
public fireModeledMethodsChangedEvent(
213+
public fireModeledAndModifiedMethodsChangedEvent(
227214
modeledMethods: Record<string, ModeledMethod[]>,
215+
modifiedMethodSignatures: ReadonlySet<string>,
228216
dbUri: string,
229217
isActiveDb: boolean,
230218
) {
231-
this.onModeledMethodsChangedEventEmitter.fire({
219+
this.onModeledAndModifiedMethodsChangedEventEmitter.fire({
232220
modeledMethods,
233-
dbUri,
234-
isActiveDb,
235-
});
236-
}
237-
238-
public fireModifiedMethodsChangedEvent(
239-
modifiedMethods: ReadonlySet<string>,
240-
dbUri: string,
241-
isActiveDb: boolean,
242-
) {
243-
this.onModifiedMethodsChangedEventEmitter.fire({
244-
modifiedMethods,
221+
modifiedMethodSignatures,
245222
dbUri,
246223
isActiveDb,
247224
});

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

Lines changed: 24 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,9 @@ export class ModelingStore extends DisposableObject {
227227
public addModeledMethods(
228228
dbItem: DatabaseItem,
229229
methods: Record<string, ModeledMethod[]>,
230+
setModified: boolean,
230231
) {
231-
this.changeModeledMethods(dbItem, (state) => {
232+
this.changeModeledAndModifiedMethods(dbItem, (state) => {
232233
const newModeledMethods = {
233234
...methods,
234235
// Keep all methods that are already modeled in some form in the state
@@ -239,14 +240,22 @@ export class ModelingStore extends DisposableObject {
239240
),
240241
};
241242
state.modeledMethods = newModeledMethods;
243+
244+
if (setModified) {
245+
const newModifiedMethods = new Set([
246+
...state.modifiedMethodSignatures,
247+
...new Set(Object.keys(methods)),
248+
]);
249+
state.modifiedMethodSignatures = newModifiedMethods;
250+
}
242251
});
243252
}
244253

245254
public setModeledMethods(
246255
dbItem: DatabaseItem,
247256
methods: Record<string, ModeledMethod[]>,
248257
) {
249-
this.changeModeledMethods(dbItem, (state) => {
258+
this.changeModeledAndModifiedMethods(dbItem, (state) => {
250259
state.modeledMethods = { ...methods };
251260
});
252261
}
@@ -255,45 +264,28 @@ export class ModelingStore extends DisposableObject {
255264
dbItem: DatabaseItem,
256265
signature: string,
257266
modeledMethods: ModeledMethod[],
267+
setModified: boolean,
258268
) {
259-
this.changeModeledMethods(dbItem, (state) => {
269+
this.changeModeledAndModifiedMethods(dbItem, (state) => {
260270
const newModeledMethods = { ...state.modeledMethods };
261271
newModeledMethods[signature] = modeledMethods;
262272
state.modeledMethods = newModeledMethods;
263-
});
264-
}
265-
266-
public setModifiedMethods(
267-
dbItem: DatabaseItem,
268-
methodSignatures: Set<string>,
269-
) {
270-
this.changeModifiedMethods(dbItem, (state) => {
271-
state.modifiedMethodSignatures = new Set(methodSignatures);
272-
});
273-
}
274273

275-
public addModifiedMethods(
276-
dbItem: DatabaseItem,
277-
methodSignatures: Iterable<string>,
278-
) {
279-
this.changeModifiedMethods(dbItem, (state) => {
280-
const newModifiedMethods = new Set([
281-
...state.modifiedMethodSignatures,
282-
...methodSignatures,
283-
]);
284-
state.modifiedMethodSignatures = newModifiedMethods;
274+
if (setModified) {
275+
const newModifiedMethods = new Set([
276+
...state.modifiedMethodSignatures,
277+
signature,
278+
]);
279+
state.modifiedMethodSignatures = newModifiedMethods;
280+
}
285281
});
286282
}
287283

288-
public addModifiedMethod(dbItem: DatabaseItem, methodSignature: string) {
289-
this.addModifiedMethods(dbItem, [methodSignature]);
290-
}
291-
292284
public removeModifiedMethods(
293285
dbItem: DatabaseItem,
294286
methodSignatures: string[],
295287
) {
296-
this.changeModifiedMethods(dbItem, (state) => {
288+
this.changeModeledAndModifiedMethods(dbItem, (state) => {
297289
const newModifiedMethods = Array.from(
298290
state.modifiedMethodSignatures,
299291
).filter((s) => !methodSignatures.includes(s));
@@ -447,31 +439,17 @@ export class ModelingStore extends DisposableObject {
447439
);
448440
}
449441

450-
private changeModifiedMethods(
442+
private changeModeledAndModifiedMethods(
451443
dbItem: DatabaseItem,
452444
updateState: (state: InternalDbModelingState) => void,
453445
) {
454446
const state = this.getState(dbItem);
455447

456448
updateState(state);
457449

458-
this.modelingEvents.fireModifiedMethodsChangedEvent(
459-
state.modifiedMethodSignatures,
460-
dbItem.databaseUri.toString(),
461-
dbItem.databaseUri.toString() === this.activeDb,
462-
);
463-
}
464-
465-
private changeModeledMethods(
466-
dbItem: DatabaseItem,
467-
updateState: (state: InternalDbModelingState) => void,
468-
) {
469-
const state = this.getState(dbItem);
470-
471-
updateState(state);
472-
473-
this.modelingEvents.fireModeledMethodsChangedEvent(
450+
this.modelingEvents.fireModeledAndModifiedMethodsChangedEvent(
474451
state.modeledMethods,
452+
state.modifiedMethodSignatures,
475453
dbItem.databaseUri.toString(),
476454
dbItem.databaseUri.toString() === this.activeDb,
477455
);

extensions/ql-vscode/src/view/model-editor/ModelEditor.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,8 +198,9 @@ export function ModelEditor({
198198
case "setMethods":
199199
setMethods(msg.methods);
200200
break;
201-
case "setModeledMethods":
201+
case "setModeledAndModifiedMethods":
202202
setModeledMethods(msg.methods);
203+
setModifiedSignatures(new Set(msg.modifiedMethodSignatures));
203204
break;
204205
case "setModifiedMethods":
205206
setModifiedSignatures(new Set(msg.methodSignatures));

extensions/ql-vscode/test/__mocks__/model-editor/modelingEventsMock.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ export function createMockModelingEvents({
77
onMethodsChanged = jest.fn(),
88
onHideModeledMethodsChanged = jest.fn(),
99
onModeChanged = jest.fn(),
10-
onModeledMethodsChanged = jest.fn(),
11-
onModifiedMethodsChanged = jest.fn(),
10+
onModeledAndModifiedMethodsChanged = jest.fn(),
1211
onInProgressMethodsChanged = jest.fn(),
1312
onProcessedByAutoModelMethodsChanged = jest.fn(),
1413
onRevealInModelEditor = jest.fn(),
@@ -20,8 +19,7 @@ export function createMockModelingEvents({
2019
onMethodsChanged?: ModelingEvents["onMethodsChanged"];
2120
onHideModeledMethodsChanged?: ModelingEvents["onHideModeledMethodsChanged"];
2221
onModeChanged?: ModelingEvents["onModeChanged"];
23-
onModeledMethodsChanged?: ModelingEvents["onModeledMethodsChanged"];
24-
onModifiedMethodsChanged?: ModelingEvents["onModifiedMethodsChanged"];
22+
onModeledAndModifiedMethodsChanged?: ModelingEvents["onModeledAndModifiedMethodsChanged"];
2523
onInProgressMethodsChanged?: ModelingEvents["onInProgressMethodsChanged"];
2624
onProcessedByAutoModelMethodsChanged?: ModelingEvents["onProcessedByAutoModelMethodsChanged"];
2725
onRevealInModelEditor?: ModelingEvents["onRevealInModelEditor"];
@@ -34,8 +32,7 @@ export function createMockModelingEvents({
3432
onMethodsChanged,
3533
onHideModeledMethodsChanged,
3634
onModeChanged,
37-
onModeledMethodsChanged,
38-
onModifiedMethodsChanged,
35+
onModeledAndModifiedMethodsChanged,
3936
onInProgressMethodsChanged,
4037
onProcessedByAutoModelMethodsChanged,
4138
onRevealInModelEditor,

0 commit comments

Comments
 (0)