/* Ċ Ġ* ĠMinecraft ĠDev Ġfor ĠIntelliJ Ċ Ġ* Ċ Ġ* Ġhttps :// minecraft dev . org Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 Ġm inecraft - dev Ċ Ġ* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ*/ Ċ Ċ package Ġcom . de mon wav . mc dev . platform . mixin . completion Ċ Ċ import Ġcom . de mon wav . mc dev . platform . mixin . util . find Shadow Targets Ċ import Ġcom . de mon wav . mc dev . platform . mixin . util . is Mixin Ċ import Ġcom . de mon wav . mc dev . util . e quivalent To Ċ import Ġcom . de mon wav . mc dev . util . filter Ċ import Ġcom . de mon wav . mc dev . util . find Containing Class Ċ import Ġcom . intellij . code Insight . completion . Completion Contributor Ċ import Ġcom . intellij . code Insight . completion . Completion Parameters Ċ import Ġcom . intellij . code Insight . completion . Completion ResultSet Ċ import Ġcom . intellij . code Insight . completion . Completion Type Ċ import Ġcom . intellij . code Insight . completion . Java Completion Contributor Ċ import Ġcom . intellij . code Insight . completion . Java Completion Sorting Ċ import Ġcom . intellij . code Insight . completion . Legacy Completion Contributor Ċ import Ġcom . intellij . code Insight . completion . Prior it ized Lookup Element Ċ import Ġcom . intellij . psi . Psi ClassType Ċ import Ġcom . intellij . psi . Psi Expression Ċ import Ġcom . intellij . psi . Psi Java Reference Ċ import Ġcom . intellij . psi . Psi Qualified Reference Ċ import Ġcom . intellij . psi . Psi Super Expression Ċ import Ġcom . intellij . psi . Psi This Expression Ċ Ċ class ĠM ixin Completion Contributor Ġ: ĠCompletion Contributor () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġfill Completion Variants ( parameters : ĠCompletion Parameters , Ġresult : ĠCompletion ResultSet ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( parameters . completion Type Ġ!= ĠCompletion Type . BASIC ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġparameters . position ĊĠĠĠĠĠĠĠ Ġif Ġ(! Java Completion Contributor . isIn Java Context ( position )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġcomplet ing Ġinside ĠM ixin Ġclass ĊĠĠĠĠĠĠĠ Ġval Ġpsi Class Ġ= Ġposition . find Containing Class () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ(! psi Class . is Mixin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsuper Mixin Ġ= Ġpsi Class . super Class ?. take If Ġ{ Ġit . is Writable Ġ&& Ġit . is Mixin Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġjava Result Ġ= ĠJava Completion Sorting . add Java Sorting ( parameters , Ġresult ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠJava Completion Contributor . getReference Filter ( position ) ĊĠĠĠĠĠĠĠ Ġval Ġprefix Matcher Ġ= Ġresult . prefix Matcher ĊĊĠĠĠĠĠĠĠ ĠLegacy Completion Contributor . process References ( parameters , Ġjava Result ) Ġ{ Ġreference , Ġr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reference Ġ! is ĠPsi Java Reference ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġprocess Ġreferences Ġto ĠJava Ġelements ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ process References ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġif Ġ( reference Ġis ĠPsi Qualified Reference ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference . qual ifier ?. let Ġ{ Ġqualifier Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqualifier Expression Ġ= Ġqualifier Ġas ? ĠPsi Expression Ġ?: Ġreturn @ process References ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( qual ifier Expression ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUsually , Ġa Ġqualified Ġreference Ġwill Ġbe Ġeither Ġ" this " Ġor Ġ" super " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPsi This Expression Ġ-> Ġpsi Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPsi Super Expression Ġ-> Ġsuper Mixin Ġ?: Ġreturn @ process References ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAs Ġa Ġfallback , Ġwe Ġalso Ġsupport Ġall Ġother Ġexpressions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHowever , Ġit Ġmust Ġpoint Ġto Ġanother ĠM ixin Ġin Ġthe Ġhierarchy Ġ( i . e . Ġa Ġsuper Ġmixin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqualifier Class Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( qual ifier Expression . type Ġas ? ĠPsi ClassType )?. resolve () Ġ?: Ġreturn @ process References ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠQuick Ġcheck Ġin Ġcase Ġit 's Ġthe Ġcurrent ĠM ixin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( qual ifier Class Ġequivalent To Ġpsi Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpsi Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠQual ifier Ġclass Ġis Ġvalid Ġif Ġit 's Ġa ĠM ixin Ġand Ġit 's Ġin Ġour Ġhierarchy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( qual ifier Class . is Writable Ġ&& Ġqualifier Class . is Mixin Ġ&& Ġpsi Class . isIn her itor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqualifier Class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqualifier Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ process References ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġpsi Class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpsi Class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠProcess Ġmethods Ġand Ġfields Ġfrom Ġtarget Ġclass ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Shadow Targets ( psi Class , Ġstart , Ġsuper Mixin Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . create Lookup Element () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġprefix Matcher . prefix Matches ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter ( filter , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠPri or it ized Lookup Element . with Explicit Prox imity ( it , Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach ( r :: addElement ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ