package Ġcom . test kn ight . services Ċ Ċ import Ġcom . intellij . code Insight . template . Template Manager Ċ import Ġcom . intellij . openapi . components . service Ċ import Ġcom . intellij . openapi . editor . Editor Ċ import Ġcom . intellij . openapi . editor . Scroll Type Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . psi . Psi Method Ċ import Ġcom . intellij . psi . util . Psi Tree Util Ċ import Ġcom . intellij . refactor ing . suggest ed . end Offset Ċ import Ġcom . test kn ight . highlight Resolution Str ategies . Assertion Args Strategy Ċ import Ġcom . test kn ight . highlight Resolution Str ategies . Constructor Args Strategy Ċ import Ġcom . test kn ight . highlight Resolution Str ategies . Magic Number Strategy Ċ import Ġcom . test kn ight . models . Highlight ed Text Data Ċ Ċ class ĠDuplicate Tests Service ( project : ĠProject ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtemplate Creation Service Ġ= Ġproject . service < Template Creation Service >() ĊĠĠĠ Ġprivate Ġval Ġtemplate Manager Ġ= ĠTemplate Manager . getInstance ( project ) ĊĠĠĠ Ġprivate Ġval Ġtest Analyzer Service Ġ= Ġproject . service < Test Analyzer Service >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠList Ġof Ġhighlight Ġresolution Ġstrategies ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġhighlight Resolution Str ategies Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠAssertion Args Strategy , ĊĠĠĠĠĠĠĠ ĠConstructor Args Strategy , ĊĠĠĠĠĠĠĠ ĠMagic Number Strategy ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġa Ġlist Ġof ĠP SI Ġelements Ġto Ġbe Ġhighlighted Ġordered Ġby Ġpriority Ġof Ġtheir Ġresolution Ġstrategy ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Highlight s ( psi Method : ĠPsi Method ): ĠList < Highlight ed Text Data > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġhighlight s Ġ= Ġmutable ListOf < Highlight ed Text Data >() ĊĠĠĠĠĠĠĠ Ġhighlight Resolution Str ategies . forEach Ġ{ Ġif Ġ( it . isEnabled ()) Ġhighlight s . addAll ( it . getElement s ( psi Method )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( highlight s . size Ġ== Ġ 0 ) Ġreturn Ġhighlight s ĊĊĠĠĠĠĠĠĠ Ġhighlight s . sortBy Ġ{ Ġit . end Offset Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġinterval Ġscheduling Ġalgorithm , Ġfind Ġlargest Ġsubset Ġof Ġnon - over lapping Ġhighlight s ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġmutable ListOf < Highlight ed Text Data >() ĊĠĠĠĠĠĠĠ Ġres . add ( highlight s [ 0 ]) ĊĠĠĠĠĠĠĠ Ġvar Ġlast Added Ġ= Ġhighlight s [ 0 ] ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( hl Ġin Ġhighlight s ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hl . start Offset Ġ>= Ġlast Added . end Offset ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres . add ( hl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Added Ġ= Ġhl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠD uplicates Ġthe Ġtest Ġcase Ġmethod Ġunder Ġthe Ġcaret . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfile Ġthe ĠP SI Ġfile . ĊĠĠĠĠ Ġ* Ġ@ param Ġeditor Ġrepresents Ġthe Ġcurrent Ġinstance Ġof Ġa Ġtext Ġeditor . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġduplicate Method Under Caret ( file : ĠPsi File , Ġeditor : ĠEditor ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcaret Ġ= Ġeditor . caret Model . primary Caret ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġcaret . offset ĊĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġfile . findElement At ( offset ) ĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= ĠPsi Tree Util . getParent OfType ( element , ĠPsi Method :: class . java ) Ġ?: Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġtemplate Ġ= Ġtemplate Creation Service . create Advanced Template ( method , Ġget Highlight s ( method )) ĊĊĠĠĠĠĠĠĠ Ġeditor . document ĊĠĠĠĠĠĠĠ Ġ// Ġprepare Ġfor Ġtemplate ĊĠĠĠĠĠĠĠ Ġcaret . moveTo Offset ( method . end Offset ) ĊĠĠĠĠĠĠĠ Ġeditor . scroll ing Model . scrollTo Caret ( Scroll Type . CENTER ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġrun Ġthe Ġtemplate ĊĠĠĠĠĠĠĠ Ġtemplate Manager . start Template ( editor , Ġtemplate ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtest Analyzer Service . is TestMethod ( method ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠD uplicates Ġa Ġtest Ġcase Ġin Ġa Ġgiven Ġeditor . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmethod Ġthe ĠP SI Ġmethod Ġto Ġbe Ġduplicated ĊĠĠĠĠ Ġ* Ġ@ param Ġeditor Ġthe Ġtext Ġeditor Ġthe Ġmethod Ġbelongs Ġto ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġduplicate Method ( method : ĠPsi Method , Ġeditor : ĠEditor ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcaret Ġ= Ġeditor . caret Model . primary Caret ĊĠĠĠĠĠĠĠ Ġval Ġtemplate Ġ= Ġtemplate Creation Service . create Advanced Template ( method , Ġget Highlight s ( method )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġprepare Ġfor Ġtemplate ĊĠĠĠĠĠĠĠ Ġcaret . moveTo Offset ( method . end Offset ) ĊĠĠĠĠĠĠĠ Ġeditor . scroll ing Model . scrollTo Caret ( Scroll Type . CENTER ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġrun Ġthe Ġtemplate ĊĠĠĠĠĠĠĠ Ġtemplate Manager . start Template ( editor , Ġtemplate ) ĊĠĠĠ Ġ} Ċ } Ċ