package Ġorg . jetbrains . k annot ator . plugin . actions . dialog Ċ Ċ import Ġcom . intellij . ui . Checkbox Tree Ċ import Ġcom . intellij . ui . Checkbox Tree Base Ċ import Ġjava . util . ArrayList Ċ import Ġcom . intellij . ui . Checked TreeNode Ċ import Ġjavax . swing . tree . TreeNode Ċ Ċ class ĠLibrary Checkbox Tree ( val Ġcontroller : ĠLibrary Items Tree Controller ): ĠCheckbox Tree ( Library Checkbox Tree Renderer (), Ġcontroller . root ) Ċ Ċ public Ġfun Ġ< T : ĠChecked TreeNode > ĠCheckbox Tree Base . get Checked Nodes By NodeType ( nodeType Ġ: ĠClass < T >) Ġ: ĠCollection < T > Ġ{ ĊĠĠĠ Ġval Ġnodes Ġ= ĠArrayList < T >() ĊĠĠĠ Ġval Ġroot Ġ: ĠAny Ġ= ĠcheckNotNull ( model ?. root ) Ġ{ Ġ" The Ġroot Ġmust Ġno Ġbe Ġnull " Ġ} ĊĊĠĠĠ Ġif Ġ( root Ġ! is ĠChecked TreeNode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" The Ġroot Ġmust Ġbe Ġinstance Ġof Ġthe Ġ" Ġ+ ĠChecked TreeNode :: class . java . name Ġ+ Ġ": Ġ" Ġ+ Ġroot . java Class . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcollect ( node Ġ: ĠChecked TreeNode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( node . is Leaf ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . isChecked Ġ&& Ġnode Type . isAssignableFrom ( node . java Class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnodes . add ( node Ġas ĠT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. node . child Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ: ĠTreeNode ? Ġ= Ġnode . getChild At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Ġis ĠChecked TreeNode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollect ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcollect ( root ) ĊĊĠĠĠ Ġreturn Ġnodes Ċ } Ċ