/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠMar cin ĠBu k ow ie ck i . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġcom . bu k ow ie ck i . w ee vil . search Ċ Ċ import Ġcom . bu k ow ie ck i . w ee vil . bundle . W ee vil Debugger Bundle Ċ import Ġcom . bu k ow ie ck i . w ee vil . search . provider . Search Provider Ċ import Ġcom . bu k ow ie ck i . w ee vil . settings . W ee vil Debugger Settings Ċ import Ġcom . bu k ow ie ck i . w ee vil . ui . Search Controller Ċ import Ġcom . bu k ow ie ck i . w ee vil . x debugger . W ee vil Debugger Root Node Ċ import Ġcom . intellij . debugger . engine . evaluation . Evaluation Context Impl Ċ import Ġcom . intellij . lang . Language Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . openapi . progress . Progress Manager Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . sun . j di . Value Ċ import Ġjava . time . Instant Ċ Ċ /** Ċ Ġ* Ġ@ author ĠMar cin ĠBu k ow ie ck i Ċ Ġ*/ Ċ abstract Ġclass ĠBase W ee vil Searcher ( private Ġval Ġmy Project : ĠProject ) Ġ: ĠW ee vil Searcher Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLogger . getInstance ( Base W ee vil Searcher :: class . java ) ĊĊĠĠĠ Ġprivate Ġvar Ġtimed Out Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġmatched Paths Ġ= Ġmutable ListOf < List < Search Path >>() ĊĊĠĠĠ Ġabstract Ġfun Ġget Language (): ĠLanguage ĊĊĠĠĠ Ġfun Ġdo Error ( search Controller : ĠSearch Controller , ĠerrorMessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch Controller . enable Search Button () ĊĠĠĠĠĠĠĠ Ġval Ġsearch Dialog Ġ= Ġsearch Controller . search Dialog ĊĠĠĠĠĠĠĠ Ġval Ġtree Ġ= Ġsearch Dialog . tree ĊĠĠĠĠĠĠĠ Ġval Ġroot Node Ġ= ĠW ee vil Debugger Root Node ( tree ) ĊĠĠĠĠĠĠĠ Ġroot Node . set ErrorMessage ( errorMessage ) ĊĠĠĠĠĠĠĠ Ġtree . set Root ( root Node , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo Search ( search Controller : ĠSearch Controller , Ġsearch Context : ĠSearch Context , Ġinitial Search Path : ĠInitial Search Path ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsearch Dialog Ġ= Ġsearch Controller . search Dialog ĊĠĠĠĠĠĠĠ Ġsearch Dialog . history Label . text Ġ= ĠW ee vil Debugger Bundle . message ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" w ee vil . debugger . search . timeout . in ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠW ee vil Debugger Settings . getInstance ( my Project ). search Timeout ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsettings Ġ= ĠW ee vil Debugger Settings . getInstance ( my Project ) ĊĊĠĠĠĠĠĠĠ Ġsearch Controller . dispatch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch History ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Dialog . descriptor . getName (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Dialog . descriptor . history , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Search Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( timed Out ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Search Ġtimeout . ĠSetting Ġlabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Dialog . history Label . text Ġ= ĠW ee vil Debugger Bundle . message (" w ee vil . debugger . search . timeout ", Ġsettings . search Timeout . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Dialog . history Label . text Ġ= ĠW ee vil Debugger Bundle . message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" w ee vil . debugger . search . info ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW ee vil Debugger Settings . getInstance ( my Project ). max Search Depth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( initial Search Path . matched ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch X Debugger Tree Listener Ġ= ĠSearch X Debugger Tree Listener ( initial Search Path , Ġmatched Paths ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Dialog . tree . add Tree Listener ( search X Debugger Tree Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Dialog . search X Debugger Tree Listener Ġ= Ġsearch X Debugger Tree Listener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Controller . enable Search Button () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġsearch History ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġhistory : ĠList < Value ? >, ĊĠĠĠĠĠĠĠ Ġsearch Context : ĠSearch Context , ĊĠĠĠĠĠĠĠ Ġsearch Path : ĠSearch Path , ĊĠĠĠĠĠĠĠ Ġdepth : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhistory . forEach Indexed Ġ{ Ġ_, Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Canceled ( search Context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Single Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Path . add Next ( History Entry Search Path ( name , Ġsearch Path )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdepth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġsearch Single Value ( ĊĠĠĠĠĠĠĠ Ġvalue : ĠValue ?, ĊĠĠĠĠĠĠĠ Ġsearch Context : ĠSearch Context , ĊĠĠĠĠĠĠĠ Ġsearch Path : ĠSearch Path , ĊĠĠĠĠĠĠĠ Ġdepth : ĠInt ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġabstract Ġfun Ġget Search Providers (): ĠList < Search Provider > ĊĊĠĠĠ Ġfun Ġadd Next ( value : ĠValue ?, Ġparent Path : ĠSearch Path ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsearch Path WithValue Ġ= ĠSearch Path WithValue ( value , Ġparent Path ) ĊĠĠĠĠĠĠĠ Ġparent Path . add Next ( search Path WithValue ) ĊĠĠĠĠĠĠĠ Ġmatched Paths . add ( search Path WithValue . toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Canceled ( search Context : ĠSearch Context ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsearch Timeout Ġ= ĠW ee vil Debugger Settings . getInstance ( my Project ). search Timeout ĊĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠInstant . now () ĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġsearch Context . startup . plus Seconds ( search Timeout ) ĊĠĠĠĠĠĠĠ Ġif Ġ( end . is Before ( now )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" Timeout Ġat : Ġ$ now , Ġend : Ġ$ end ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProgress Manager . getInstance (). progress Indicator ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . timed Out Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . timed Out ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprepare Context ( value To Search : ĠValue ?, Ġevaluation Context Impl : ĠEvaluation Context Impl ): ĠSearch Context Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSearch Context ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue To Search , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠW ee vil Debugger Settings . getInstance ( my Project ). max Search Depth , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevaluation Context Impl ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }