// ĠCopyright Ġ 2 0 0 0 - 2 0 1 8 Ġ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 . Ċ @ file : Jvm Name (" Create Method From Usage ") Ċ Ċ package Ġcom . intellij . lang . java . request Ċ Ċ import Ġcom . intellij . code Insight . daemon . impl . quick fix . CreateFrom Usage Utils . isValid Method Reference Ċ import Ġcom . intellij . code Insight . daemon . impl . quick fix . Create Method From Usage Fix . is Method Signature Exists Ċ import Ġcom . intellij . code Insight . int ention . Int ention Action Ċ import Ġcom . intellij . lang . jvm . Jvm Class Ċ import Ġcom . intellij . lang . jvm . Jvm Modifier Ċ import Ġcom . intellij . lang . jvm . actions . Create Method Request Ċ import Ġcom . intellij . lang . jvm . actions . EP _ NAME Ċ import Ġcom . intellij . lang . jvm . actions . group Actions ByType Ċ import Ġcom . intellij . psi . Psi Class Ċ import Ġcom . intellij . psi . Psi Java Code Reference Element Ċ import Ġcom . intellij . psi . Psi MethodCall Expression Ċ import Ġcom . intellij . psi . util . Psi Util . resolve Class In ClassType Only Ċ import Ġcom . intellij . psi . util . parent OfType Ċ Ċ fun Ġgenerate Actions ( call : ĠPsi MethodCall Expression ): ĠList < Int ention Action > Ġ{ ĊĠ Ġif Ġ(! check Call ( call )) Ġreturn Ġempty List () ĊĠ Ġval Ġmethod Requests Ġ= ĠCreate Method Requests ( call ). collect Requests () ĊĠ Ġval Ġextensions Ġ= ĠEP _ NAME . extensions ĊĠ Ġreturn Ġmethod Requests . flatMap Ġ{ Ġ( clazz , Ġrequest ) Ġ-> ĊĠĠĠ Ġextensions . flatMap Ġ{ Ġext Ġ-> ĊĠĠĠĠĠ Ġext . create Add Method Actions ( clazz , Ġrequest ) ĊĠĠĠ Ġ} ĊĠ Ġ}. group Actions ByType () Ċ } Ċ Ċ private Ġfun Ġcheck Call ( call : ĠPsi MethodCall Expression ): ĠBoolean Ġ{ ĊĠ Ġval Ġref Ġ= Ġcall . method Expression ĊĠ Ġif Ġ( ref . reference Name Ġ== Ġnull ) Ġreturn Ġfalse ĊĠ Ġif Ġ( isValid Method Reference ( ref , Ġcall )) Ġreturn Ġfalse ĊĠ Ġreturn Ġtrue Ċ } Ċ Ċ private Ġclass ĠCreate Method Requests ( val Ġmy Call : ĠPsi MethodCall Expression ) Ġ{ ĊĊĠ Ġprivate Ġval Ġmy Requests Ġ= ĠLinkedHashMap < Jvm Class , ĠCreate Method Request >() ĊĊĠ Ġfun Ġcollect Requests (): ĠMap < Jvm Class , ĠCreate Method Request > Ġ{ ĊĠĠĠ Ġdo Collect Requests () ĊĠĠĠ Ġreturn Ġmy Requests ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdo Collect Requests () Ġ{ ĊĠĠĠ Ġval Ġqualifier Ġ= Ġmy Call . method Expression . qual ifier Expression ĊĠĠĠ Ġif Ġ( qual ifier Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġval Ġinstance Class Ġ= Ġresolve Class In ClassType Only ( qual ifier . type ) ĊĠĠĠĠĠ Ġif Ġ( instance Class Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( clazz Ġin Ġhierarchy ( instance Class )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġprocess Class ( clazz , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatic Class Ġ= Ġ( qual ifier Ġas ? ĠPsi Java Code Reference Element )?. resolve () Ġas ? ĠPsi Class ĊĠĠĠĠĠĠĠ Ġif Ġ( static Class Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġprocess Class ( static Class , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġval Ġin Static Context Ġ= Ġmy Call . isIn Static Context () ĊĠĠĠĠĠ Ġfor Ġ( outer Class Ġin Ġcollect Outer Classes ( my Call )) Ġ{ ĊĠĠĠĠĠĠĠ Ġprocess Class ( outer Class , Ġin Static Context ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġprocess Class ( clazz : ĠPsi Class , Ġstatic Context : ĠBoolean ) Ġ{ ĊĠĠĠ Ġif Ġ( is Method Signature Exists ( my Call , Ġclazz )) Ġreturn Ġ// ĠTODO Ġgeneric Ġcheck ĊĠĠĠ Ġval Ġvisibility Ġ= Ġcompute Visibility ( my Call . project , Ġmy Call . parent OfType (), Ġclazz ) ĊĠĠĠ Ġval Ġmodifiers Ġ= Ġmutable Set Of < Jvm Modifier >() ĊĠĠĠ Ġif Ġ( static Context ) Ġmodifiers Ġ+= ĠJ vm Modifier . STATIC ĊĠĠĠ Ġif Ġ( visibility Ġ!= Ġnull ) Ġmodifiers Ġ+= Ġvisibility ĊĠĠĠ Ġmy Requests [ clazz ] Ġ= ĠCreate Method From Java Usage Request ( my Call , Ġmodifiers ) ĊĠ Ġ} Ċ } Ċ