Skip to content

Commit 153424a

Browse files
Only include method signature in JumpToUsageMessage
1 parent 623df4c commit 153424a

File tree

7 files changed

+24
-18
lines changed

7 files changed

+24
-18
lines changed

extensions/ql-vscode/src/common/commands.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import type {
1212
} from "../variant-analysis/shared/variant-analysis";
1313
import type { QLDebugConfiguration } from "../debugger/debug-configuration";
1414
import type { QueryTreeViewItem } from "../queries-panel/query-tree-view-item";
15-
import type { Method, Usage } from "../model-editor/method";
1615

1716
// A command function matching the signature that VS Code calls when
1817
// a command is invoked from a context menu on a TreeView with
@@ -325,8 +324,7 @@ export type ModelEditorCommands = {
325324
"codeQL.openModelEditor": () => Promise<void>;
326325
"codeQL.openModelEditorFromModelingPanel": () => Promise<void>;
327326
"codeQLModelEditor.jumpToUsageLocation": (
328-
method: Method,
329-
usage: Usage,
327+
methodSignature: string,
330328
databaseItem: DatabaseItem,
331329
) => Promise<void>;
332330
};

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import {
1717
} from "../variant-analysis/shared/variant-analysis-filter-sort";
1818
import { ErrorLike } from "../common/errors";
1919
import { DataFlowPaths } from "../variant-analysis/shared/data-flow-paths";
20-
import { Method, Usage } from "../model-editor/method";
20+
import { Method } from "../model-editor/method";
2121
import { ModeledMethod } from "../model-editor/modeled-method";
2222
import {
2323
MethodModelingPanelViewState,
@@ -528,8 +528,7 @@ interface SwitchModeMessage {
528528

529529
interface JumpToUsageMessage {
530530
t: "jumpToUsage";
531-
method: Method;
532-
usage: Usage;
531+
methodSignature: string;
533532
}
534533

535534
interface OpenDatabaseMessage {

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ export class MethodsUsageDataProvider
8383
};
8484
} else {
8585
const method = this.getParent(item);
86+
if (!method || !isExternalApiUsage(method)) {
87+
throw new Error("Parent not found for tree item");
88+
}
8689
return {
8790
label: item.label,
8891
description: `${this.relativePathWithinDatabase(item.url.uri)} [${
@@ -92,7 +95,7 @@ export class MethodsUsageDataProvider
9295
command: {
9396
title: "Show usage",
9497
command: "codeQLModelEditor.jumpToUsageLocation",
95-
arguments: [method, item, this.databaseItem],
98+
arguments: [method.signature, this.databaseItem],
9699
},
97100
};
98101
}

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,10 @@ export class ModelEditorModule extends DisposableObject {
7878
"codeQL.openModelEditorFromModelingPanel":
7979
this.openModelEditor.bind(this),
8080
"codeQLModelEditor.jumpToUsageLocation": async (
81-
method: Method,
82-
usage: Usage,
81+
methodSignature: string,
8382
databaseItem: DatabaseItem,
8483
) => {
85-
this.modelingStore.setSelectedMethod(databaseItem, method, usage);
84+
this.modelingStore.setSelectedMethod(databaseItem, methodSignature);
8685
},
8786
};
8887
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import {
3131
externalApiQueriesProgressMaxStep,
3232
runExternalApiQueries,
3333
} from "./external-api-usage-queries";
34-
import { Method, Usage } from "./method";
34+
import { Method } from "./method";
3535
import { ModeledMethod } from "./modeled-method";
3636
import { ExtensionPack } from "./shared/extension-pack";
3737
import { ModelConfigListener } from "../config";
@@ -198,7 +198,7 @@ export class ModelEditorView extends AbstractWebview<
198198

199199
break;
200200
case "jumpToUsage":
201-
await this.handleJumpToUsage(msg.method, msg.usage);
201+
await this.handleJumpToUsage(msg.methodSignature);
202202
void telemetryListener?.sendUIInteraction("model-editor-jump-to-usage");
203203

204204
break;
@@ -361,8 +361,8 @@ export class ModelEditorView extends AbstractWebview<
361361
});
362362
}
363363

364-
protected async handleJumpToUsage(method: Method, usage: Usage) {
365-
this.modelingStore.setSelectedMethod(this.databaseItem, method, usage);
364+
protected async handleJumpToUsage(methodSignature: string) {
365+
this.modelingStore.setSelectedMethod(this.databaseItem, methodSignature);
366366
}
367367

368368
protected async loadExistingModeledMethods(): Promise<void> {

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,9 +306,18 @@ export class ModelingStore extends DisposableObject {
306306
});
307307
}
308308

309-
public setSelectedMethod(dbItem: DatabaseItem, method: Method, usage: Usage) {
309+
public setSelectedMethod(dbItem: DatabaseItem, methodSignature: string) {
310310
const dbState = this.getState(dbItem);
311311

312+
const method = dbState.methods.find((m) => m.signature === methodSignature);
313+
if (method === undefined) {
314+
throw new Error(
315+
`No method with signature "${methodSignature}" found in modeling store`,
316+
);
317+
}
318+
319+
const usage = method.usages[0];
320+
312321
dbState.selectedMethod = method;
313322
dbState.selectedUsage = usage;
314323

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,6 @@ UnmodelableMethodRow.displayName = "UnmodelableMethodRow";
213213
function sendJumpToUsageMessage(method: Method) {
214214
vscode.postMessage({
215215
t: "jumpToUsage",
216-
method,
217-
// In framework mode, the first and only usage is the definition of the method
218-
usage: method.usages[0],
216+
methodSignature: method.signature,
219217
});
220218
}

0 commit comments

Comments
 (0)