@@ -51,6 +51,10 @@ import { ModelingStore } from "./modeling-store";
5151import { ModelEditorViewTracker } from "./model-editor-view-tracker" ;
5252import { ModelingEvents } from "./modeling-events" ;
5353import { getModelsAsDataLanguage , ModelsAsDataLanguage } from "./languages" ;
54+ import {
55+ isGenerateModelSupported ,
56+ runGenerateModelQuery ,
57+ } from "./generate-model-queries" ;
5458
5559export class ModelEditorView extends AbstractWebview <
5660 ToModelEditorMessage ,
@@ -266,7 +270,11 @@ export class ModelEditorView extends AbstractWebview<
266270
267271 break ;
268272 case "generateMethod" :
269- await this . generateModeledMethods ( ) ;
273+ if ( isFlowModelGenerationSupported ( this . language ) ) {
274+ await this . generateModeledMethodsFromFlow ( ) ;
275+ } else if ( isGenerateModelSupported ( this . language ) ) {
276+ await this . generateModeledMethodsFromGenerateModel ( ) ;
277+ }
270278 void telemetryListener ?. sendUIInteraction (
271279 "model-editor-generate-modeled-methods" ,
272280 ) ;
@@ -369,9 +377,10 @@ export class ModelEditorView extends AbstractWebview<
369377 }
370378
371379 private async setViewState ( ) : Promise < void > {
372- const showFlowGeneration =
380+ const showGenerateButton =
373381 this . modelConfig . flowGeneration &&
374- isFlowModelGenerationSupported ( this . language ) ;
382+ ( isFlowModelGenerationSupported ( this . language ) ||
383+ isGenerateModelSupported ( this . language ) ) ;
375384
376385 const showLlmButton =
377386 this . databaseItem . language === "java" && this . modelConfig . llmGeneration ;
@@ -388,7 +397,7 @@ export class ModelEditorView extends AbstractWebview<
388397 viewState : {
389398 extensionPack : this . extensionPack ,
390399 language : this . language ,
391- showFlowGeneration ,
400+ showGenerateButton ,
392401 showLlmButton,
393402 showMultipleModels : this . modelConfig . showMultipleModels ,
394403 mode : this . modelingStore . getMode ( this . databaseItem ) ,
@@ -465,7 +474,7 @@ export class ModelEditorView extends AbstractWebview<
465474 }
466475 }
467476
468- protected async generateModeledMethods ( ) : Promise < void > {
477+ protected async generateModeledMethodsFromFlow ( ) : Promise < void > {
469478 await withProgress (
470479 async ( progress ) => {
471480 const tokenSource = new CancellationTokenSource ( ) ;
@@ -508,19 +517,7 @@ export class ModelEditorView extends AbstractWebview<
508517 databaseItem : addedDatabase ?? this . databaseItem ,
509518 language : this . language ,
510519 onResults : async ( modeledMethods ) => {
511- const modeledMethodsByName : Record < string , ModeledMethod [ ] > = { } ;
512-
513- for ( const modeledMethod of modeledMethods ) {
514- if ( ! ( modeledMethod . signature in modeledMethodsByName ) ) {
515- modeledMethodsByName [ modeledMethod . signature ] = [ ] ;
516- }
517-
518- modeledMethodsByName [ modeledMethod . signature ] . push (
519- modeledMethod ,
520- ) ;
521- }
522-
523- this . addModeledMethods ( modeledMethodsByName ) ;
520+ this . addModeledMethodsFromArray ( modeledMethods ) ;
524521 } ,
525522 progress,
526523 token : tokenSource . token ,
@@ -539,6 +536,38 @@ export class ModelEditorView extends AbstractWebview<
539536 ) ;
540537 }
541538
539+ protected async generateModeledMethodsFromGenerateModel ( ) : Promise < void > {
540+ await withProgress (
541+ async ( progress ) => {
542+ const tokenSource = new CancellationTokenSource ( ) ;
543+
544+ try {
545+ const modeledMethods = await runGenerateModelQuery ( {
546+ cliServer : this . cliServer ,
547+ queryRunner : this . queryRunner ,
548+ logger : this . app . logger ,
549+ queryStorageDir : this . queryStorageDir ,
550+ databaseItem : this . databaseItem ,
551+ language : this . language ,
552+ progress,
553+ token : tokenSource . token ,
554+ } ) ;
555+
556+ this . addModeledMethodsFromArray ( modeledMethods ) ;
557+ } catch ( e : unknown ) {
558+ void showAndLogExceptionWithTelemetry (
559+ this . app . logger ,
560+ this . app . telemetry ,
561+ redactableError (
562+ asError ( e ) ,
563+ ) `Failed to generate models: ${ getErrorMessage ( e ) } ` ,
564+ ) ;
565+ }
566+ } ,
567+ { cancellable : false } ,
568+ ) ;
569+ }
570+
542571 private async generateModeledMethodsFromLlm (
543572 packageName : string ,
544573 methodSignatures : string [ ] ,
@@ -757,6 +786,20 @@ export class ModelEditorView extends AbstractWebview<
757786 ) ;
758787 }
759788
789+ private addModeledMethodsFromArray ( modeledMethods : ModeledMethod [ ] ) {
790+ const modeledMethodsByName : Record < string , ModeledMethod [ ] > = { } ;
791+
792+ for ( const modeledMethod of modeledMethods ) {
793+ if ( ! ( modeledMethod . signature in modeledMethodsByName ) ) {
794+ modeledMethodsByName [ modeledMethod . signature ] = [ ] ;
795+ }
796+
797+ modeledMethodsByName [ modeledMethod . signature ] . push ( modeledMethod ) ;
798+ }
799+
800+ this . addModeledMethods ( modeledMethodsByName ) ;
801+ }
802+
760803 private setModeledMethods ( signature : string , methods : ModeledMethod [ ] ) {
761804 this . modelingStore . updateModeledMethods (
762805 this . databaseItem ,
0 commit comments