package Ġapp . cash . sql de light . intellij . ins pe ctions Ċ Ċ import Ġapp . cash . sql de light . core . Sql Del ight Project Service Ċ import Ġapp . cash . sql de light . core . lang . Migration File Ċ import Ġapp . cash . sql de light . core . lang . psi . parameter Value Ċ import Ġapp . cash . sql de light . core . lang . util . migration Files Ċ import Ġapp . cash . sql de light . intellij . refactor ing . Sql Del ight Signature Builder Ċ import Ġapp . cash . sql de light . intellij . refactor ing . Sql Del ight Suggest ed Ref actor ing Execution Ċ import Ġapp . cash . sql de light . intellij . refactor ing . Sql Del ight Suggest ed Ref actor ing Execution . Suggest ed Migration Data Ċ import Ġcom . ale c strong . sql . psi . core . psi . Sql CreateTable Stmt Ċ import Ġcom . ale c strong . sql . psi . core . psi . Sql Visitor Ċ import Ġcom . intellij . code Inspection . Local Inspection Tool Ċ import Ġcom . intellij . code Inspection . Local Quick Fix On Psi Element Ċ import Ġcom . intellij . code Inspection . Problem Highlight Type . GENERIC _ ERROR Ċ import Ġcom . intellij . code Inspection . Problems Holder Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . psi . Smart Pointer Manager Ċ import Ġcom . intellij . refactor ing . suggest ed . Suggest ed Ref actor ing Support . Signature Ċ Ċ internal Ġclass ĠSchema Needs Migration Inspection Ġ: ĠLocal Inspection Tool () Ġ{ ĊĠ Ġprivate Ġval Ġrefactoring Executor Ġ= ĠSql Del ight Suggest ed Ref actor ing Execution () ĊĠ Ġprivate Ġval Ġsignature Builder Ġ= ĠSql Del ight Signature Builder () ĊĊĠ Ġoverride Ġfun Ġbuild Visitor ( ĊĠĠĠ Ġholder : ĠPro blems Holder , ĊĠĠĠ Ġis On The Fly : ĠBoolean ĊĠ Ġ) Ġ= Ġensure Ready ( holder . file ) Ġ{ ĊĠĠĠ Ġobject Ġ: ĠSql Visitor () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġvisit CreateTable Stmt ( createTable : ĠSql CreateTable Stmt ) Ġ= Ġignore Invalid Elements Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdb File Ġ= Ġsql Del ight File . find Db File () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġtop Migration File Ġ= Ġfile Index . source Folders ( sql Del ight File ). as Sequence () ĊĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . migration Files () Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. max By OrNull Ġ{ Ġit . version Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtables Ġ= Ġ( top Migration File Ġ?: Ġdb File ). tables ( true ) ĊĠĠĠĠĠĠĠ Ġval Ġtable With Same Name Ġ= Ġtables . find Ġ{ Ġit . tableName . name Ġ== Ġcreate Table . tableName . name Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġsignature Builder . signature ( createTable ) Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( table With Same Name Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġ* ĠTODO : ĠRe enable Ġthis Ġonce Ġit Ġperforms Ġfaster . ĠEvalu ating Ġold Query . query Ġis Ġexpensive . ĊĠĠĠĠĠĠĠ Ġval Ġtable With Different Name Ġ= Ġtables . find Ġ{ Ġold Query Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġval Ġold Columns Ġ= Ġold Query . query . columns ĊĠĠĠĠĠĠĠĠĠ Ġold Columns . size Ġ== Ġsignature . parameters . size Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Columns . map Ġ{ Ġit . parameter Value () Ġ}. contains All ( signature . parameters ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( table With Different Name Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġholder . register Problem ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Table . tableName , Ġ" Table Ġneeds Ġto Ġbe Ġrenamed Ġin Ġa Ġmigration ", ĠGENER IC _ ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlter TableName Migration Quick Fix ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Table , Ġtable With Different Name . tableName . name , Ġtop Migration File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ}*/ ĊĊĠĠĠĠĠĠĠĠĠ Ġholder . register Problem ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Table . tableName , Ġ" Table Ġneeds Ġto Ġbe Ġadded Ġin Ġa Ġmigration ", ĠGENER IC _ ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCreate Table Migration Quick Fix ( createTable , Ġtop Migration File ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġold Signature Ġ= ĠSignature . create ( ĊĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġtable With Same Name . tableName . name , ĊĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠ Ġparameters Ġ= Ġtable With Same Name . query . columns . map NotNull Ġ{ Ġit . parameter Value () Ġ}, ĊĠĠĠĠĠĠĠĠĠ Ġadditional Data Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ) Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( old Signature Ġ!= Ġsignature ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġholder . register Problem ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Table . tableName , Ġ" Table Ġneeds Ġto Ġbe Ġaltered Ġin Ġa Ġmigration ", ĠGENER IC _ ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlter Table Migration Quick Fix ( createTable , Ġold Signature , Ġsignature ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinner Ġclass ĠAlter TableName Migration Quick Fix ( ĊĠĠĠ Ġcreate Table Stmt : ĠSql CreateTable Stmt , ĊĠĠĠ Ġprivate Ġval Ġold Name : ĠString , ĊĠĠĠ Ġprivate Ġval Ġnewest Migration File : ĠMigration File ?, ĊĠ Ġ) Ġ: ĠLocal Quick Fix On Psi Element ( createTable Stmt ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcreate Table Ref Ġ= ĠSmart Pointer Manager . getInstance ( createTable Stmt . project ) ĊĠĠĠĠĠ Ġ. create Smart Psi Element Pointer ( createTable Stmt , Ġcreate Table Stmt . containing File ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Family Name (): ĠString Ġ= Ġname ĊĊĠĠĠ Ġoverride Ġfun ĠgetText (): ĠString Ġ= ĊĠĠĠĠĠ Ġ" Add Ġmigration Ġfor Ġ${ createTable Ref . element ?. tableName ?. text . or Empty () }" ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( ĊĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠ Ġfile : ĠPsi File , ĊĠĠĠĠĠ Ġstart Element : ĠPsi Element , ĊĠĠĠĠĠ Ġend Element : ĠPsi Element ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ Ġval Ġstrategy Ġ= ĠSql Del ight Project Service . getInstance ( file . project ). dialect . migration Strategy ĊĠĠĠĠĠ Ġval Ġchange Name Ġ= Ġstrategy . tableName Changed ( ĊĠĠĠĠĠĠĠ Ġold Name Ġ= Ġold Name , ĊĠĠĠĠĠĠĠ ĠnewName Ġ= Ġcreate Table Ref . element ?. tableName ?. name Ġ?: Ġreturn ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġrefactoring Executor . perform Change Signature ( ĊĠĠĠĠĠĠĠ ĠSuggest ed Migration Data ( ĊĠĠĠĠĠĠĠĠĠ Ġdeclaration Pointer Ġ= Ġcreate Table Ref , ĊĠĠĠĠĠĠĠĠĠ Ġnewest Migration File Ġ= Ġnewest Migration File , ĊĠĠĠĠĠĠĠĠĠ Ġprepared Migration Ġ= Ġchange Name ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinner Ġclass ĠCreate Table Migration Quick Fix ( ĊĠĠĠ Ġcreate Table Stmt : ĠSql CreateTable Stmt , ĊĠĠĠ Ġprivate Ġval Ġnewest Migration File : ĠMigration File ? ĊĠ Ġ) Ġ: ĠLocal Quick Fix On Psi Element ( createTable Stmt ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcreate Table Ref Ġ= ĠSmart Pointer Manager . getInstance ( createTable Stmt . project ) ĊĠĠĠĠĠ Ġ. create Smart Psi Element Pointer ( createTable Stmt , Ġcreate Table Stmt . containing File ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Family Name (): ĠString Ġ= Ġname ĊĊĠĠĠ Ġoverride Ġfun ĠgetText (): ĠString Ġ= ĊĠĠĠĠĠ Ġ" Add Ġmigration Ġfor Ġ${ createTable Ref . element ?. tableName ?. text . or Empty () }" ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( ĊĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠ Ġfile : ĠPsi File , ĊĠĠĠĠĠ Ġstart Element : ĠPsi Element , ĊĠĠĠĠĠ Ġend Element : ĠPsi Element ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ Ġrefactoring Executor . perform Change Signature ( ĊĠĠĠĠĠĠĠ ĠSuggest ed Migration Data ( ĊĠĠĠĠĠĠĠĠĠ Ġdeclaration Pointer Ġ= Ġcreate Table Ref , ĊĠĠĠĠĠĠĠĠĠ Ġnewest Migration File Ġ= Ġnewest Migration File , ĊĠĠĠĠĠĠĠĠĠ Ġprepared Migration Ġ= Ġ"${ createTable Ref . element ?. text . or Empty ()}; " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinner Ġclass ĠAlter Table Migration Quick Fix ( ĊĠĠĠ Ġcreate Table Stmt : ĠSql CreateTable Stmt , ĊĠĠĠ Ġprivate Ġval Ġold Signature : ĠSignature , ĊĠĠĠ Ġprivate Ġval Ġnew Signature : ĠSignature , ĊĠ Ġ) Ġ: ĠLocal Quick Fix On Psi Element ( createTable Stmt ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcreate Table Ref Ġ= ĠSmart Pointer Manager . getInstance ( createTable Stmt . project ) ĊĠĠĠĠĠ Ġ. create Smart Psi Element Pointer ( createTable Stmt , Ġcreate Table Stmt . containing File ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Family Name (): ĠString Ġ= Ġname ĊĊĠĠĠ Ġoverride Ġfun ĠgetText (): ĠString Ġ= ĊĠĠĠĠĠ Ġ" Add Ġmigration Ġfor Ġ${ createTable Ref . element ?. tableName ?. text . or Empty () }" ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( ĊĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠ Ġfile : ĠPsi File , ĊĠĠĠĠĠ Ġstart Element : ĠPsi Element , ĊĠĠĠĠĠ Ġend Element : ĠPsi Element ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ Ġval Ġmigration Data Ġ= Ġrefactoring Executor . prepare Change Signature ( ĊĠĠĠĠĠĠĠ Ġdeclaration Ġ= Ġcreate Table Ref , ĊĠĠĠĠĠĠĠ Ġold Signature Ġ= Ġold Signature , ĊĠĠĠĠĠĠĠ Ġnew Signature Ġ= Ġnew Signature , ĊĠĠĠĠĠ Ġ) Ġ?: Ġreturn ĊĠĠĠĠĠ Ġrefactoring Executor . perform Change Signature ( migration Data ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ