diff --git a/extensions/ql-vscode/src/common/interface-types.ts b/extensions/ql-vscode/src/common/interface-types.ts index 083c8a528..dcbd3b22e 100644 --- a/extensions/ql-vscode/src/common/interface-types.ts +++ b/extensions/ql-vscode/src/common/interface-types.ts @@ -577,6 +577,11 @@ interface SetModeledMethodMessage { method: ModeledMethod; } +interface SetMultipleModeledMethodsMessage { + t: "setMultipleModeledMethods"; + modeledMethods: ModeledMethod[]; +} + interface SetInModelingModeMessage { t: "setInModelingMode"; inModelingMode: boolean; @@ -643,14 +648,14 @@ interface SetMethodModifiedMessage { interface SetSelectedMethodMessage { t: "setSelectedMethod"; method: Method; - modeledMethod?: ModeledMethod; + modeledMethods: ModeledMethod[]; isModified: boolean; } export type ToMethodModelingMessage = | SetMethodModelingPanelViewStateMessage | SetMethodMessage - | SetModeledMethodMessage + | SetMultipleModeledMethodsMessage | SetMethodModifiedMessage | SetSelectedMethodMessage | SetInModelingModeMessage; diff --git a/extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts b/extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts index 571db56d7..95bf5b785 100644 --- a/extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts +++ b/extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts @@ -14,10 +14,7 @@ import { assertNever } from "../../common/helpers-pure"; import { ModelEditorViewTracker } from "../model-editor-view-tracker"; import { ModelConfigListener } from "../../config"; import { DatabaseItem } from "../../databases/local-databases"; -import { - convertFromLegacyModeledMethod, - convertToLegacyModeledMethod, -} from "../shared/modeled-methods-legacy"; +import { convertFromLegacyModeledMethod } from "../shared/modeled-methods-legacy"; export class MethodModelingViewProvider extends AbstractWebviewViewProvider< ToMethodModelingMessage, @@ -77,9 +74,7 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider< await this.postMessage({ t: "setSelectedMethod", method: selectedMethod.method, - modeledMethod: convertToLegacyModeledMethod( - selectedMethod.modeledMethods, - ), + modeledMethods: selectedMethod.modeledMethods, isModified: selectedMethod.isModified, }); } @@ -165,13 +160,10 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider< if (this.webviewView && e.isActiveDb) { const modeledMethods = e.modeledMethods[this.method?.signature ?? ""]; if (modeledMethods) { - const modeledMethod = convertToLegacyModeledMethod(modeledMethods); - if (modeledMethod) { - await this.postMessage({ - t: "setModeledMethod", - method: modeledMethod, - }); - } + await this.postMessage({ + t: "setMultipleModeledMethods", + modeledMethods, + }); } } }), @@ -198,7 +190,7 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider< await this.postMessage({ t: "setSelectedMethod", method: e.method, - modeledMethod: convertToLegacyModeledMethod(e.modeledMethods), + modeledMethods: e.modeledMethods, isModified: e.isModified, }); } diff --git a/extensions/ql-vscode/src/model-editor/method.ts b/extensions/ql-vscode/src/model-editor/method.ts index bc60afd92..6f2d377be 100644 --- a/extensions/ql-vscode/src/model-editor/method.ts +++ b/extensions/ql-vscode/src/model-editor/method.ts @@ -68,12 +68,12 @@ export function getArgumentsList(methodParameters: string): string[] { export function canMethodBeModeled( method: Method, - modeledMethod: ModeledMethod | undefined, + modeledMethods: ModeledMethod[], methodIsUnsaved: boolean, ): boolean { return ( !method.supported || - (modeledMethod && modeledMethod?.type !== "none") || + modeledMethods.some((modeledMethod) => modeledMethod.type !== "none") || methodIsUnsaved ); } diff --git a/extensions/ql-vscode/src/view/method-modeling/MethodModelingView.tsx b/extensions/ql-vscode/src/view/method-modeling/MethodModelingView.tsx index f1a8d8d13..d004222be 100644 --- a/extensions/ql-vscode/src/view/method-modeling/MethodModelingView.tsx +++ b/extensions/ql-vscode/src/view/method-modeling/MethodModelingView.tsx @@ -10,7 +10,6 @@ import { vscode } from "../vscode-api"; import { NotInModelingMode } from "./NotInModelingMode"; import { NoMethodSelected } from "./NoMethodSelected"; import { MethodModelingPanelViewState } from "../../model-editor/shared/view-state"; -import { convertFromLegacyModeledMethod } from "../../model-editor/shared/modeled-methods-legacy"; import { MethodAlreadyModeled } from "./MethodAlreadyModeled"; type Props = { @@ -25,19 +24,13 @@ export function MethodModelingView({ initialViewState }: Props): JSX.Element { const [method, setMethod] = useState(undefined); - const [modeledMethod, setModeledMethod] = React.useState< - ModeledMethod | undefined - >(undefined); + const [modeledMethods, setModeledMethods] = useState([]); const [isMethodModified, setIsMethodModified] = useState(false); const modelingStatus = useMemo( - () => - getModelingStatus( - convertFromLegacyModeledMethod(modeledMethod), - isMethodModified, - ), - [modeledMethod, isMethodModified], + () => getModelingStatus(modeledMethods, isMethodModified), + [modeledMethods, isMethodModified], ); useEffect(() => { @@ -54,15 +47,15 @@ export function MethodModelingView({ initialViewState }: Props): JSX.Element { case "setMethod": setMethod(msg.method); break; - case "setModeledMethod": - setModeledMethod(msg.method); + case "setMultipleModeledMethods": + setModeledMethods(msg.modeledMethods); break; case "setMethodModified": setIsMethodModified(msg.isModified); break; case "setSelectedMethod": setMethod(msg.method); - setModeledMethod(msg.modeledMethod); + setModeledMethods(msg.modeledMethods); setIsMethodModified(msg.isModified); break; default: @@ -89,7 +82,7 @@ export function MethodModelingView({ initialViewState }: Props): JSX.Element { return ; } - if (!canMethodBeModeled(method, modeledMethod, isMethodModified)) { + if (!canMethodBeModeled(method, modeledMethods, isMethodModified)) { return ; } @@ -104,7 +97,7 @@ export function MethodModelingView({ initialViewState }: Props): JSX.Element { diff --git a/extensions/ql-vscode/src/view/model-editor/ModeledMethodDataGrid.tsx b/extensions/ql-vscode/src/view/model-editor/ModeledMethodDataGrid.tsx index 3599a2971..2791f0708 100644 --- a/extensions/ql-vscode/src/view/model-editor/ModeledMethodDataGrid.tsx +++ b/extensions/ql-vscode/src/view/model-editor/ModeledMethodDataGrid.tsx @@ -12,6 +12,7 @@ import { sortMethods } from "../../model-editor/shared/sorting"; import { InProgressMethods } from "../../model-editor/shared/in-progress-methods"; import { HiddenMethodsRow } from "./HiddenMethodsRow"; import { ModelEditorViewState } from "../../model-editor/shared/view-state"; +import { convertFromLegacyModeledMethod } from "../../model-editor/shared/modeled-methods-legacy"; export const GRID_TEMPLATE_COLUMNS = "0.5fr 0.125fr 0.125fr 0.125fr 0.125fr"; @@ -49,7 +50,7 @@ export const ModeledMethodDataGrid = ({ const methodIsUnsaved = modifiedSignatures.has(method.signature); const methodCanBeModeled = canMethodBeModeled( method, - modeledMethod, + convertFromLegacyModeledMethod(modeledMethod), methodIsUnsaved, );