/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 - 2 0 2 1 ĠRe ece ĠH . ĠD un n Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġuk . co . re ec ed un n . intellij . plugin . processor . run . execution . ui Ċ Ċ import Ġcom . intellij . execution . process . Process Handler Ċ import Ġcom . intellij . execution . ui . Console View ContentType Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . util . Dis poser Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . ui . One Pixel Splitter Ċ import Ġcom . intellij . ui . components . panels . Vertical Layout Ċ import Ġuk . co . re ec ed un n . intellij . plugin . core . event . Stop watch Ċ import Ġuk . co . re ec ed un n . intellij . plugin . core . execution . ui . Console View Ex Ċ import Ġuk . co . re ec ed un n . intellij . plugin . core . execution . ui . Console View Impl Ċ import Ġuk . co . re ec ed un n . intellij . plugin . core . text . Units Ċ import Ġuk . co . re ec ed un n . intellij . plugin . core . ui . B orders Ċ import Ġuk . co . re ec ed un n . intellij . plugin . core . ui . layout .* Ċ import Ġuk . co . re ec ed un n . intellij . plugin . processor . query . QueryResult Ċ import Ġuk . co . re ec ed un n . intellij . plugin . processor . resources . Plugin Api Bundle Ċ import Ġuk . co . re ec ed un n . intellij . plugin . processor . run . execution . process . Query Process Handler Base Ċ import Ġuk . co . re ec ed un n . intellij . plugin . processor . run . execution . process . QueryResult Listener Ċ import Ġuk . co . re ec ed un n . intellij . plugin . xd m . types . Xs Duration Value Ċ import Ġuk . co . re ec ed un n . intellij . plugin . xd m . types . impl . values . Xs Duration Ċ import Ġuk . co . re ec ed un n . intellij . plugin . xd m . types . to Seconds Ċ import Ġjava . awt . Border Layout Ċ import Ġjava . awt . Dimension Ċ import Ġjavax . swing . J Component Ċ import Ġjavax . swing . JLabel Ċ import Ġjavax . swing . border . Empty Border Ċ Ċ class ĠQuery Console View ( val Ġproject : ĠProject , Ġprivate Ġval Ġconsole : ĠConsole View Ex ) Ġ: ĊĠĠĠ ĠConsole View Impl (), ĠQuery Result Listener Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSPL IT TER _ KEY Ġ= Ġ" X Query Int elli J Plugin . QueryResult View . Splitter " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġsummary : ĠJLabel ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġtables : ĠArrayList < Query Table > Ġ= ĠArrayList () ĊĠĠĠ Ġprivate Ġvar Ġcurrent Size Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġtimer Ġ= Ġobject Ġ: ĠStop watch () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Running (): ĠBoolean Ġ= Ġtables . first (). isRunning ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Interval () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelapsed Ġ= ĠX s Duration . ns ( elapsed Time ). to Seconds ( Units . Precision . milli With Z eros ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtables . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . running Text Ġ= ĠPlugin Api Bundle . message (" query . result . table . results - elapsed ", Ġelapsed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister Query Table ( table : ĠQuery Table ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtables . add ( table ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Result Panel (): ĠJ Component Ġ= Ġpanel Ġ{ ĊĠĠĠĠĠĠĠ Ġrow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpanel ( column . horizontal (), ĠVertical Layout ( 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Ġ= Ġlabel Ġ{ Ġborder Ġ= ĠEmpty Border ( 5 , Ġ 4 , Ġ 5 , Ġ 4 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġborder Ġ= ĠB orders . Table Header Bottom ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll able ( column . fill ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Result Table Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection Model . add List Selection Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Object ?. second ?. let Ġ{ Ġconsole . scrollTo Top ( it . offset ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Query Table ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġregion ĠConsole View ĊĊĠĠĠ Ġprivate Ġvar Ġquery Process Handler : ĠQuery Process Handler Base ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġconsole . clear () ĊĊĠĠĠĠĠĠĠ Ġcurrent Size Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġsummary !!. text Ġ= Ġ"\ u 0 0 A 0 " ĊĊĠĠĠĠĠĠĠ Ġ( tables . first () Ġas ĠQuery Result Table ). removeAll () ĊĊĠĠĠĠĠĠĠ Ġtables . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . isRunning Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . has Exception Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprint ( text : ĠString , ĠcontentType : ĠConsole View ContentType ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconsole . print ( text , ĠcontentType ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetContent Size (): ĠInt Ġ= Ġconsole . content Size ĊĊĠĠĠ Ġoverride Ġfun Ġattach To Process ( process Handler : ĠProcess Handler ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconsole . attach To Process ( process Handler ) ĊĠĠĠĠĠĠĠ Ġquery Process Handler Ġ= Ġprocess Handler Ġas ? ĠQuery Process Handler Base ĊĠĠĠĠĠĠĠ Ġquery Process Handler ?. add QueryResult Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Component (): ĠJ Component Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( tables . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsplit Pane Ġ= ĠOne Pixel Splitter ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Pane . first Component Ġ= Ġconsole . component ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Pane . second Component Ġ= Ġcreate Result Panel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Pane . second Component . minimum Size Ġ= ĠDimension ( 2 5 0 , Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Pane . set Hon or Components Minimum Size ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Pane . set And Load Splitter Pro portion Key ( SPLIT TER _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( split Pane , ĠBorderLayout . CENTER ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . getComponent () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġscroll To ( offset : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconsole . scrollTo ( offset ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġend region ĊĠĠĠ Ġ// Ġregion ĠDis posable ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġquery Process Handler ?. remove QueryResult Listener ( this ) ĊĠĠĠĠĠĠĠ ĠDis poser . dispose ( console ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġend region ĊĠĠĠ Ġ// Ġregion ĠQuery Result Listener ĊĊĠĠĠ Ġoverride Ġfun Ġon Begin Results () Ġ{ ĊĠĠĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠĠĠ Ġsummary !!. text Ġ= Ġ"\ u 0 0 A 0 " ĊĊĠĠĠĠĠĠĠ Ġtables . forEach Ġ{ Ġit . isRunning Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠ Ġtimer . start ( 1 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon End Results ( handler : Ġ( Psi File ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtables . forEach Ġ{ Ġit . isRunning Ġ= Ġfalse Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon QueryResult ( result : ĠQuery Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( tables . first () Ġas ĠQuery Result Table ). add Row ( result , Ġcurrent Size ) ĊĠĠĠĠĠĠĠ Ġcurrent Size Ġ= Ġcontent Size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Exception ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtables . forEach Ġ{ Ġit . has Exception Ġ= Ġtrue Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Query Elapsed Time ( time : ĠX s Duration Value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġtables . first (). item Count ĊĠĠĠĠĠĠĠ Ġval Ġelapsed Ġ= Ġtime . to Seconds ( Units . Precision . nano ) ĊĠĠĠĠĠĠĠ Ġsummary !!. text Ġ= ĠPlugin Api Bundle . message (" console . summary . label ", Ġcount , Ġelapsed ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Query Results Psi File ( psi File : ĠPsi File ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( tables . first () Ġas ĠQuery Result Table ). update Query References ( psi File ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġend region Ċ } Ċ