package Ġdev . t uring complete . intellij byte code plugin . view ._ internal ._ structure Ċ Ċ import Ġcom . intellij . icons . All Icons Ċ import Ġcom . intellij . ide . Default Tree Expand er Ċ import Ġcom . intellij . ide . actions . Collapse All Action Ċ import Ġcom . intellij . ide . actions . Expand All Action Ċ import Ġcom . intellij . openapi . Disposable Ċ import Ġcom . intellij . openapi . action System .* Ċ import Ġcom . intellij . openapi . project . D umb Aware Ċ import Ġcom . intellij . openapi . util . Dis poser Ċ import Ġcom . intellij . ui . Loading Node Ċ import Ġcom . intellij . ui . Tree Speed Search Ċ import Ġcom . intellij . ui . scale . J BU IS cale Ċ import Ġcom . intellij . ui . tree . Async Tree Model Ċ import Ġcom . intellij . ui . tree . Base Tree Model Ċ import Ġcom . intellij . ui . tree Structure . Tree Ċ import Ġcom . intellij . util . cast S af ely To Ċ import Ġcom . intellij . util . ui . Empty Icon Ċ import Ġcom . intellij . util . ui . UI Util Ċ import Ġcom . intellij . util . ui . tree . Tree Util Ċ import Ġdev . t uring complete . intellij byte code plugin ._ ui . configure For Cell Ċ import Ġdev . t uring complete . intellij byte code plugin . byte code . Method Declaration Utils Ċ import Ġdev . t uring complete . intellij byte code plugin . byte code . Type Utils Ċ import Ġdev . t uring complete . intellij byte code plugin . common . Class File Context Ċ import Ġdev . t uring complete . intellij byte code plugin . common . Common Data Keys Ċ import Ġdev . t uring complete . intellij byte code plugin . open class files ._ internal . Files Drop Handler Ċ import Ġdev . t uring complete . intellij byte code plugin . view ._ internal . Copy Value Action Ċ import Ġdev . t uring complete . intellij byte code plugin . view ._ internal . View Value Action Ċ import Ġdev . t uring complete . intellij byte code plugin . view ._ internal ._ structure ._ class . Class Structure Node Ċ import Ġdev . t uring complete . intellij byte code plugin . view ._ internal ._ structure ._ common . Interactive Node Ċ import Ġdev . t uring complete . intellij byte code plugin . view ._ internal ._ structure ._ common . Structure Node Ċ import Ġdev . t uring complete . intellij byte code plugin . view ._ internal ._ structure ._ common . Value Node Ċ import Ġorg . jetbrains . annotations . Test Only Ċ import Ġjava . awt . Component Ċ import Ġjava . awt . event .* Ċ import Ġjava . util .* Ċ import Ġjavax . swing . Abstract Cell Editor Ċ import Ġjavax . swing . JLabel Ċ import Ġjavax . swing . J Tree Ċ import Ġjavax . swing . tree . Tree Cell Editor Ċ import Ġjavax . swing . tree . Tree Cell Renderer Ċ import Ġjavax . swing . tree . TreeNode Ċ import Ġjavax . swing . tree . Tree Path Ċ Ċ internal Ġclass ĠStructure Tree ( class File Context : ĠClass File Context , Ġparent : ĠDis posable ) ĊĠ Ġ: ĠTree ( Async Tree Model ( Structure Tree Model ( class File Context ), Ġtrue , Ġparent )), ĠData Provider Ġ{ ĊĠ Ġ// Ġ-- ĠComp anion ĠObject Ġ-------------------------------------------------------------------------------- ------------ Ġ// ĊĠ Ġ// Ġ-- ĠProperties Ġ------------------------------------------------------------------------------------------------ -- Ġ// ĊĊĠ Ġprivate Ġval Ġstructure Tree Model Ġ= ĠStructure Tree Model ( class File Context ) ĊĠ Ġprivate Ġval Ġcontext Ġ= ĠStructure Tree Context ( class File Context . project (), Ġsync Tree ()) ĊĊĠ Ġ// Ġ-- ĠInitialization Ġ-------------------------------------------------------------------------------- -------------- Ġ// ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġset Cell Editor ( Structure Tree Cell Editor ()) ĊĠĠĠ Ġset Cell Renderer ( Structure Tree Cell Renderer ()) ĊĠĠĠ Ġis Editable Ġ= Ġtrue ĊĠĠĠ Ġadd Mouse Listener ( Structure Tree Mouse Adapter ()) ĊĠĠĠ Ġtransfer Handler Ġ= ĠFiles Drop Handler ( class File Context . project ()) ĊĊĠĠĠ ĠDis poser . register ( parent , Ġstructure Tree Model ) ĊĊĠĠĠ Ġinstall Search Handler () ĊĠ Ġ} ĊĊĠ Ġ// Ġ-- ĠEx posed ĠMethods Ġ-------------------------------------------------------------------------------- ------------- Ġ// ĊĊĠ Ġfun Ġreload () Ġ{ ĊĠĠĠ Ġstructure Tree Model . reload () ĊĠ Ġ} ĊĊĠ Ġfun Ġcreate ToolBar Actions (): ĠAction Group Ġ{ ĊĠĠĠ Ġreturn ĠDefault Action Group (). apply Ġ{ ĊĠĠĠĠĠ Ġadd ( Render Options Group ()) ĊĊĠĠĠĠĠ Ġadd Separator () ĊĊĠĠĠĠĠ Ġval Ġtree Expand er Ġ= ĠDefault Tree Expand er ( this @ Structure Tree ) ĊĠĠĠĠĠ Ġadd ( Expand All Action Ġ{ Ġtree Expand er Ġ}) ĊĠĠĠĠĠ Ġadd ( Collapse All Action Ġ{ Ġtree Expand er Ġ}) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test Only ĊĠ Ġinternal Ġfun Ġget Children (): ĠList < TreeNode >? Ġ{ ĊĠĠĠ Ġreturn Ġstructure Tree Model . getChildren () ĊĠ Ġ} ĊĊĠ Ġ@ Test Only ĊĠ Ġinternal Ġfun Ġget Children ( parent : ĠAny ): ĠList < TreeNode >? Ġ{ ĊĠĠĠ Ġreturn Ġstructure Tree Model . getChildren ( parent ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠgetData ( data Id : ĠString ): ĠAny ? Ġ{ ĊĠĠĠ Ġval Ġselected Structure Node Ġ= Ġselection Model . selection Path ?. last Path Component . cast S af ely To < Structure Node >() Ġ?: Ġreturn Ġnull ĊĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠ ĠPlatform Data Keys . PRE DEFINED _ TEXT .` is `( data Id ) Ġ-> Ġselected Structure Node . goTo Provider ?. value ĊĠĠĠĠĠ ĠCommon Data Keys . VALUE .` is `( data Id ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( selected Structure Node Ġis ĠValue Node ) Ġselected Structure Node . raw Value ( context ) Ġelse Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ// Ġ-- ĠPrivate ĠMethods Ġ-------------------------------------------------------------------------------- ------------- Ġ// ĊĊĠ Ġprivate Ġfun Ġinstall Search Handler () Ġ{ ĊĠĠĠ Ġval Ġtree Path To Search String : Ġ( Tree Path ) Ġ-> ĠString ? Ġ= Ġ{ Ġtree Path Ġ-> ĊĠĠĠĠĠ Ġval Ġlast Path Component Ġ= Ġtree Path . last Path Component ĊĠĠĠĠĠ Ġif Ġ( last Path Component Ġis ĠStructure Node ) Ġlast Path Component . search Text ( context ) Ġelse Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ ĠTree Speed Search ( this , Ġtree Path To Search String , Ġtrue ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsync Tree (): Ġ() Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠ ĠTree Util . tree Tra verser ( this @ Structure Tree ). forEach Ġ{ ĊĠĠĠĠĠ Ġif Ġ( it Ġis ĠStructure Node ) Ġ{ ĊĠĠĠĠĠĠĠ Ġit . invalidate Component () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġthis @ Structure Tree . re validate () ĊĠĠĠ Ġthis @ Structure Tree . rep aint () ĊĠ Ġ} ĊĊĠ Ġ// Ġ-- ĠInner ĠType Ġ------------------------------------------------------------------------------------------------ -- Ġ// ĊĊĠ Ġprivate Ġclass ĠStructure Tree Model ( private Ġval Ġclass File Context : ĠClass File Context ) Ġ: ĠBase Tree Model < TreeNode >() Ġ{ ĊĊĠĠĠ Ġvar Ġroot Node : ĠClass Structure Node ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġget Root (): ĠClass Structure Node Ġ{ ĊĠĠĠĠĠ Ġif Ġ( root Node Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġroot Node Ġ= Ġcreate Root Node () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġroot Node !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Children (): ĠList < TreeNode >? Ġ{ ĊĠĠĠĠĠ Ġreturn Ġget Children ( root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Children ( parent : ĠAny ): ĠList < TreeNode >? Ġ{ ĊĠĠĠĠĠ Ġval Ġstructure Node Ġ= Ġparent Ġas ĠStructure Node ĊĠĠĠĠĠ Ġval Ġasync Load Children InProgress Ġ= Ġstructure Node . async Load Children ( class File Context . work Async ()) ĊĠĠĠĠĠ Ġreturn Ġif Ġ( async Load Children InProgress ) Ġnull Ġelse Ġstructure Node . children (). toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreload () Ġ{ ĊĠĠĠĠĠ Ġroot Node Ġ= Ġcreate Root Node () ĊĠĠĠĠĠ Ġtree Structure Changed ( null , Ġnull , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Root Node (): ĠClass Structure Node Ġ{ ĊĠĠĠĠĠ Ġreturn ĠClass Structure Node ( class File Context . class Node (), Ġclass File Context . class File ()) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ// Ġ-- ĠInner ĠType Ġ------------------------------------------------------------------------------------------------ -- Ġ// ĊĊĠ Ġprivate Ġinner Ġclass ĠStructure Tree Cell Renderer Ġ: ĠTree Cell Renderer Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġloading Node Label Ġ= ĠJLabel ( Loading Node . getText ()). apply Ġ{ ĊĠĠĠĠĠ Ġforeground Ġ= ĠUI Util . get Inactive TextColor () ĊĠĠĠĠĠ Ġicon Ġ= ĠJ BU IS cale . scale Icon ( Empty Icon . create ( 8 , Ġ 1 6 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Tree Cell Renderer Component ( tree : ĠJ Tree , Ġvalue : ĠAny , Ġselected : ĠBoolean , Ġexpanded : ĠBoolean , Ġleaf : ĠBoolean , Ġrow : ĠInt , Ġhas Focus : ĠBoolean ): ĠComponent Ġ{ ĊĠĠĠĠĠ Ġtree . row Height Ġ= Ġ 0 Ġ// ĠWill Ġuse Ġheight Ġof Ġcomponent ĊĊĠĠĠĠĠ Ġreturn Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠLoading Node Ġ-> Ġloading Node Label ĊĠĠĠĠĠĠĠ Ġis ĠStructure Node Ġ-> Ġvalue . component ( selected , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Unknown Ġvalue Ġtype Ġ${ value :: class . java }") ĊĠĠĠĠĠ Ġ}. configure For Cell ( tree , Ġselected , Ġhas Focus ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ// Ġ-- ĠInner ĠType Ġ------------------------------------------------------------------------------------------------ -- Ġ// ĊĊĠ Ġprivate Ġinner Ġclass ĠStructure Tree Cell Editor Ġ: ĠAbstract Cell Editor (), ĠTree Cell Editor , ĠActionListener Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Cell Editor Value (): ĠAny ? Ġ{ ĊĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Cell Editable ( mouse Event : ĠEvent Object ?): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġif Ġ( mouse Event Ġis ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Closest Path For Location ( mouse Event . x , Ġmouse Event . y )?. let Ġ{ Ġit . last Path Component Ġis ĠInteractive Node Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġfalse ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Tree Cell Editor Component ( tree : ĠJ Tree , Ġvalue : ĠAny , Ġselected : ĠBoolean , Ġexpanded : ĠBoolean , Ġleaf : ĠBoolean , Ġrow : ĠInt ): ĠComponent Ġ{ ĊĠĠĠĠĠ Ġif Ġ( value Ġ! is ĠInteractive Node ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Value Ġtype Ġ${ value :: class . java } Ġis Ġnot Ġinteractive .") ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġreturn Ġcell Renderer . get Tree Cell Renderer Component ( tree , Ġvalue , Ġselected , Ġexpanded , Ġleaf , Ġrow , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠactionPerformed ( e : ĠAction Event ?) Ġ{ ĊĠĠĠĠĠ Ġstop Cell Editing () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ// Ġ-- ĠInner ĠType Ġ------------------------------------------------------------------------------------------------ -- Ġ// ĊĊĠ Ġprivate Ġinner Ġclass ĠStructure Tree Mouse Adapter Ġ: ĠMouse Adapter () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Pressed ( e : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠ Ġhandle Tree MouseEvent ( e ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Released ( e : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠ Ġhandle Tree MouseEvent ( e ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Tree MouseEvent ( event : ĠInput Event ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( event Ġ! is ĠMouseEvent Ġ|| Ġ! event . is Popup Trigger ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġvalue Node Ġ= Ġget Closest Path For Location ( event . x , Ġevent . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . take If Ġ{ Ġit . last Path Component Ġis ĠValue Node Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġit . last Path Component Ġas ĠValue Node Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĊĠĠĠĠĠ Ġval Ġactions Ġ= ĠDefault Action Group (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Node . goTo Provider ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġadd ( it . goTo Action ()) ĊĠĠĠĠĠĠĠĠĠ Ġadd Separator () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadd ( Copy Value Action ()) ĊĠĠĠĠĠĠĠ Ġadd ( View Value Action ()) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ ĠAction Manager . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Action PopupMenu ( Action Places . UNKNOWN , Ġactions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. component ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( event . getComponent (), Ġevent . x , Ġevent . y ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ// Ġ-- ĠInner ĠType Ġ------------------------------------------------------------------------------------------------ -- Ġ// ĊĊĠ Ġprivate Ġinner Ġclass ĠRender Options Group Ġ: ĠDefault Action Group (" Render ĠOptions ", Ġtrue ), ĠToggle able , ĠD umb Aware Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġtemplate Presentation . icon Ġ= ĠAll Icons . Actions . Edit ĊĊĠĠĠĠĠ ĠType Utils . TypeName Render Mode . values (). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġadd ( Render Option ( it . title , Ġ{ Ġcontext . typeName Render Mode Ġ= Ġit Ġ}, Ġ{ Ġcontext . typeName Render Mode Ġ== Ġit Ġ})) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġadd Separator () ĊĊĠĠĠĠĠ Ġadd ( Render Option (" Show ĠAccess Ġas ĠDecimal ", Ġ{ Ġcontext . show Access As Hex Ġ= Ġfalse Ġ}, Ġ{ Ġ! context . show Access As Hex Ġ})) ĊĠĠĠĠĠ Ġadd ( Render Option (" Show ĠAccess Ġas ĠHex ", Ġ{ Ġcontext . show Access As Hex Ġ= Ġtrue Ġ}, Ġ{ Ġcontext . show Access As Hex Ġ})) ĊĊĠĠĠĠĠ Ġadd Separator () ĊĊĠĠĠĠĠ ĠMethod Declaration Utils . MethodDescriptor Render Mode . values (). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġadd ( Render Option ( it . title , Ġ{ Ġcontext . method Descriptor Render Mode Ġ= Ġit Ġ}, Ġ{ Ġcontext . method Descriptor Render Mode Ġ== Ġit Ġ})) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } ĊĊ