// ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġgit 4 idea . search Ċ Ċ import Ġcom . intellij . icons . All Icons Ċ import Ġcom . intellij . ide . actions . sear che very where .* Ċ import Ġcom . intellij . openapi . action System . An ActionEvent Ċ import Ġcom . intellij . openapi . action System . Common Data Keys Ċ import Ġcom . intellij . openapi . components . service Ċ import Ġcom . intellij . openapi . progress . Progress Indicator Ċ import Ġcom . intellij . openapi . project . D umb Aware Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . openapi . util . N ls Safe Ċ import Ġcom . intellij . openapi . util . registry . Registry Ċ import Ġcom . intellij . openapi . vcs . Project Level V cs Manager Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . psi . code Style . Name Util Ċ import Ġcom . intellij . util . Processor Ċ import Ġcom . intellij . util . text . Matcher Ċ import Ġcom . intellij . util . ui . J BU I Ċ import Ġcom . intellij . util . ui . UI Ċ import Ġcom . intellij . util . ui . UI Util Ċ import Ġcom . intellij . vcs . log . Hash Ċ import Ġcom . intellij . vcs . log . V cs Commit Metadata Ċ import Ġcom . intellij . vcs . log . V cs Ref Ċ import Ġcom . intellij . vcs . log . data . Data Pack Ċ import Ġcom . intellij . vcs . log . data . V cs Log Data Ċ import Ġcom . intellij . vcs . log . impl . V cs Log Content Util Ċ import Ġcom . intellij . vcs . log . impl . V cs Project Log Ċ import Ġcom . intellij . vcs . log . ui . render . Label Icon Ċ import Ġcom . intellij . vcs . log . util . V cs Log Util Ċ import Ġcom . intellij . vcs . log . util . contains All Ċ import Ġcom . intellij . vcs . log . visible . filters . V cs Log Filter Object Ċ import Ġgit 4 idea . Git V cs Ċ import Ġgit 4 idea . branch . Git Branch Util Ċ import Ġgit 4 idea . i 1 8 n . Git Bundle Ċ import Ġgit 4 idea . log . Git Ref Manager Ċ import Ġgit 4 idea . repo . Git Repository Manager Ċ import Ġgit 4 idea . search . Git Search Every where ItemType .* Ċ import Ġjava . awt . Border Layout Ċ import Ġjava . awt . Component Ċ import Ġjava . util . function . Function Ċ import Ġjavax . swing . JLabel Ċ import Ġjavax . swing . J List Ċ import Ġjavax . swing . JPanel Ċ import Ġjavax . swing . List Cell Renderer Ċ Ċ class ĠGit Search Every where Contributor ( private Ġval Ġproject : ĠProject ) Ġ: ĠWeight ed Search Every where Contributor < Any >, ĠD umb Aware Ġ{ ĊĊĠ Ġprivate Ġval Ġfilter Ġ= ĠPersistent Search Every where Contributor Filter ( ĊĠĠĠ ĠGit Search Every where ItemType . values (). asList (), ĊĠĠĠ Ġproject . service < Git Search Every where Filter Configuration >(), ĊĠĠĠ ĠFunction Ġ{ Ġit . displayName Ġ}, ĊĠĠĠ ĠFunction Ġ{ Ġnull Ġ} ĊĠ Ġ) ĊĊĠ Ġoverride Ġfun Ġfetch Weighted Elements ( ĊĠĠĠ Ġpattern : ĠString , ĊĠĠĠ Ġprogress Indicator : ĠProgress Indicator , ĊĠĠĠ Ġconsumer : ĠProcessor < in ĠFound Item Descriptor < Any >> ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġif Ġ(! Project Level V cs Manager . getInstance ( project ). check V cs IsActive ( Git V cs . NAME )) Ġreturn ĊĊĠĠĠ Ġval Ġlog Manager Ġ= ĠV cs Project Log . getInstance ( project ). log Manager Ġ?: Ġreturn ĊĠĠĠ Ġval Ġdata Manager Ġ= Ġlog Manager . data Manager ĊĠĠĠ Ġval Ġstorage Ġ= Ġdata Manager . storage ĊĠĠĠ Ġval Ġindex Ġ= Ġdata Manager . index ĊĊĠĠĠ Ġval Ġdata Pack Ġ= Ġawait Full Log Data Pack ( data Manager , Ġprogress Indicator ) Ġ?: Ġreturn ĊĊĠĠĠ Ġif Ġ( filter . isSelected ( COMMIT _ BY _ HASH ) Ġ&& Ġpattern . length Ġ>= Ġ 7 Ġ&& ĠV cs Log Util . HASH _ REGEX . matcher ( pattern ). matches ()) Ġ{ ĊĠĠĠĠĠ Ġstorage . find Commit Id Ġ{ ĊĠĠĠĠĠĠĠ Ġprogress Indicator . check Canceled () ĊĠĠĠĠĠĠĠ Ġit . hash . asString (). startsWith ( pattern , Ġtrue ) Ġ&& Ġdata Pack . contains All ( listOf ( it ), Ġstorage ) ĊĠĠĠĠĠ Ġ} ?. let Ġ{ Ġcommit Id Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġstorage . get Commit Index ( commit Id . hash , Ġcommit Id . root ) ĊĠĠĠĠĠĠĠ Ġdata Manager . mini Details Getter . load Commits Data ( listOf ( id ), Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġconsumer . process ( Found Item Descriptor ( it , ĠCOMMIT _ BY _ HASH . weight )) ĊĠĠĠĠĠĠĠ Ġ}, Ġprogress Indicator ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġmatcher Ġ= ĠName Util . build Matcher ("* $ pattern ") ĊĠĠĠĠĠ Ġ. with Case Sensitivity ( Name Util . Matching Case Sensitivity . NONE ) ĊĠĠĠĠĠ Ġ. ty po T oler ant () ĊĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġdata Pack . refs Model . stream (). forEach Ġ{ ĊĠĠĠĠĠ Ġprogress Indicator . check Canceled () ĊĠĠĠĠĠ Ġwhen Ġ( it . type ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGit Ref Manager . LOCAL _ BRANCH , ĠGit Ref Manager . HEAD Ġ-> Ġprocess Ref OfType ( it , ĠLOCAL _ BRANCH , Ġmatcher , Ġconsumer ) ĊĠĠĠĠĠĠĠ ĠGit Ref Manager . REMOTE _ BRANCH Ġ-> Ġprocess Ref OfType ( it , ĠRE MOTE _ BRANCH , Ġmatcher , Ġconsumer ) ĊĠĠĠĠĠĠĠ ĠGit Ref Manager . TAG Ġ-> Ġprocess Ref OfType ( it , ĠTAG , Ġmatcher , Ġconsumer ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( filter . isSelected ( COMMIT _ BY _ MESSAGE ) Ġ&& ĠRegistry .` is ` (" git . search . every where . commit . by . message ")) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( pattern . length Ġ< Ġ 3 ) Ġreturn ĊĊĠĠĠĠĠ Ġval Ġall Roots Indexed Ġ= ĠGit Repository Manager . getInstance ( project ). repositories . all Ġ{ Ġindex . is Indexed ( it . root ) Ġ} ĊĠĠĠĠĠ Ġif Ġ(! all Roots Indexed ) Ġreturn ĊĊĠĠĠĠĠ Ġindex . data Getter ?. filter Messages ( V cs Log Filter Object . from Pattern ( pattern )) Ġ{ Ġcommit Idx Ġ-> ĊĠĠĠĠĠĠĠ Ġprogress Indicator . check Canceled () ĊĠĠĠĠĠĠĠ Ġdata Manager . mini Details Getter . load Commits Data ( listOf ( commit Idx ), Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġconsumer . process ( Found Item Descriptor ( it , ĠCOMMIT _ BY _ MESSAGE . weight )) ĊĠĠĠĠĠĠĠ Ġ}, Ġprogress Indicator ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġprocess Ref OfType ( ref : ĠV cs Ref , Ġtype : ĠGit Search Every where ItemType , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatcher : ĠMatcher , Ġconsumer : ĠProcessor < in ĠFound Item Descriptor < Any >>) Ġ{ ĊĠĠĠ Ġif Ġ(! filter . isSelected ( type )) Ġreturn ĊĠĠĠ Ġif Ġ( matcher . matches ( ref . name )) Ġconsumer . process ( Found Item Descriptor ( ref , Ġtype . weight )) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġawait Full Log Data Pack ( data Manager : ĠV cs Log Data , Ġindicator : ĠProgress Indicator ): ĠData Pack ? Ġ{ ĊĠĠĠ Ġif Ġ(! Registry .` is ` (" vcs . log . keep . up . to . date ")) Ġreturn Ġnull ĊĠĠĠ Ġvar Ġdata Pack : ĠData Pack ĊĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠ Ġindicator . check Canceled () ĊĠĠĠĠĠ Ġdata Pack Ġ= Ġdata Manager . data Pack ĊĠĠĠ Ġ} ĊĠĠĠ Ġwhile Ġ(! data Pack . is Full Ġ&& ĠThread . sleep ( 1 0 0 0 ) Ġ== ĠUnit ) ĊĠĠĠ Ġreturn Ġdata Pack ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġrenderer Ġ= Ġobject Ġ: ĠList Cell Renderer < Any > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġleft Label Ġ= ĠJLabel (). apply Ġ{ ĊĠĠĠĠĠ Ġborder Ġ= ĠJ BU I . B orders . empty ( 0 , Ġ 8 , Ġ 0 , Ġ 2 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġright Label Ġ= ĠJLabel (). apply Ġ{ ĊĠĠĠĠĠ Ġborder Ġ= ĠJ BU I . B orders . empty ( 0 , Ġ 2 , Ġ 0 , Ġ 8 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġpanel Ġ= ĠJPanel ( Border Layout ( 0 , Ġ 0 )). apply Ġ{ ĊĠĠĠĠĠ Ġadd ( left Label , ĠBorderLayout . CENTER ) ĊĠĠĠĠĠ Ġadd ( right Label , ĠBorderLayout . EAST ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetList Cell Renderer Component ( ĊĠĠĠĠĠ Ġlist : ĠJ List < out ĠAny >, ĊĠĠĠĠĠ Ġvalue : ĠAny ?, Ġindex : ĠInt , ĊĠĠĠĠĠ Ġis Selected : ĠBoolean , Ġcell Has Focus : ĠBoolean ĊĠĠĠ Ġ): ĠComponent Ġ{ ĊĠĠĠĠĠ Ġpanel . background Ġ= ĠUI Util . getList Background ( isSelected , Ġcell Has Focus ) ĊĠĠĠĠĠ Ġleft Label . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġfont Ġ= Ġlist . font ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġis ĠV cs Ref Ġ-> Ġvalue . name ĊĠĠĠĠĠĠĠĠĠ Ġis ĠV cs Commit Metadata Ġ-> Ġvalue . subject ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġicon Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġis ĠV cs Ref Ġ-> ĠLabel Icon ( this , ĠUI . scale ( 1 6 ), Ġbackground , ĠlistOf ( value . type . backgroundColor )) ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠAll Icons . V cs . Commit Node ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġforeground Ġ= ĠUI Util . getList Foreground ( isSelected , Ġcell Has Focus ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġright Label . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġfont Ġ= Ġlist . font ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġis ĠV cs Ref Ġ-> Ġget Tracking Remote Branch Name ( value ) ĊĠĠĠĠĠĠĠĠĠ Ġis ĠV cs Commit Metadata Ġ-> Ġvalue . id . to Short String () ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġforeground Ġ= Ġif Ġ(! isSelected ) ĠUI Util . get Inactive TextColor () Ġelse ĠUI Util . getList Foreground ( isSelected , Ġcell Has Focus ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġpanel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ N ls Safe ĊĠĠĠ Ġprivate Ġfun Ġget Tracking Remote Branch Name ( vcs Ref : ĠV cs Ref ): ĠString ? Ġ{ ĊĠĠĠĠĠ Ġif Ġ( vcs Ref . type Ġ!= ĠGit Ref Manager . LOCAL _ BRANCH ) Ġreturn Ġnull ĊĠĠĠĠĠ Ġval Ġrepository Ġ= ĠGit Repository Manager . getInstance ( project ). getRepository For Root Quick ( vcs Ref . root ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠ Ġreturn ĠGit Branch Util . get Track Info ( repository , Ġv cs Ref . name )?. remote Branch ?. name ; ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Elements Renderer (): ĠList Cell Renderer < in ĠAny > Ġ= Ġrenderer ĊĊĠ Ġoverride Ġfun Ġprocess SelectedItem ( selected : ĠAny , Ġmodifiers : ĠInt , Ġsearch Text : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġhash : ĠHash ? ĊĠĠĠ Ġval Ġroot : ĠVirtual File ? ĊĠĠĠ Ġwhen Ġ( selected ) Ġ{ ĊĠĠĠĠĠ Ġis ĠV cs Ref Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġhash Ġ= Ġselected . commit Hash ĊĠĠĠĠĠĠĠ Ġroot Ġ= Ġselected . root ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġis ĠV cs Commit Metadata Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġhash Ġ= Ġselected . id ĊĠĠĠĠĠĠĠ Ġroot Ġ= Ġselected . root ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġhash Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġroot Ġ= Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( hash Ġ!= Ġnull Ġ&& Ġroot Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ ĠV cs Log Content Util . run In Main Log ( project ) Ġ{ ĊĠĠĠĠĠĠĠ Ġit . vcs Log . jump To Commit ( hash , Ġroot ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfalse ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Actions ( on Changed : ĠRunnable ) Ġ= ĠlistOf ( Search Every where Filters Action ( filter , ĠonChanged )) ĊĊĠ Ġoverride Ġfun Ġget Search Provider Id () Ġ= Ġ" V cs . Git " ĊĠ Ġoverride Ġfun Ġget GroupName () Ġ= ĠGit Bundle . message (" search . every where . group . name ") ĊĠ Ġoverride Ġfun Ġget Full GroupName () Ġ= ĠGit Bundle . message (" search . every where . group . full . name ") ĊĊĠ Ġ// Ġhigher Ġweight Ġ-> Ġlower Ġposition ĊĠ Ġoverride Ġfun Ġget Sort Weight () Ġ= Ġ 5 0 0 ĊĠ Ġoverride Ġfun Ġshow In Find Results () Ġ= Ġfalse ĊĊĠ Ġoverride Ġfun Ġis Shown In Separ ate Tab (): ĠBoolean Ġ= ĊĠĠĠ ĠProject Level V cs Manager . getInstance ( project ). check V cs IsActive ( Git V cs . NAME ) Ġ&& ĊĠĠĠ ĠV cs Project Log . getInstance ( project ). log Manager Ġ!= Ġnull ĊĊĠ Ġoverride Ġfun ĠgetData For Item ( element : ĠAny , Ġdata Id : ĠString ): ĠAny ? Ġ= Ġnull ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġclass ĠFactory Ġ: ĠSearch Every where Contributor Factory < Any > Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġcreate Contributor ( init Event : ĠAn ActionEvent ): ĠGit Search Every where Contributor Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġinit Event . get Required Data ( Common Data Keys . PROJECT ) ĊĠĠĠĠĠĠĠ Ġreturn ĠGit Search Every where Contributor ( project ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ