/* Ċ Ġ* Ġ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 Ċ Ċ import Ġcom . de mon wav . mc dev . facet . Minecraft Facet Ċ import Ġcom . de mon wav . mc dev . platform . Abstract Module Ċ import Ġcom . de mon wav . mc dev . platform . Platform Type Ċ import Ġcom . de mon wav . mc dev . platform . mixin . config . Mixin Config Ċ import Ġcom . intellij . json . psi . Json File Ċ import Ġcom . intellij . json . psi . JsonObject Ċ import Ġcom . intellij . openapi . file Types . FileType Manager Ċ import Ġcom . intellij . openapi . file Types . File Types Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġcom . intellij . psi . Java Psi Facade Ċ import Ġcom . intellij . psi . Psi Class Ċ import Ġcom . intellij . psi . Psi Manager Ċ import Ġcom . intellij . psi . search . FileType Index Ċ import Ġcom . intellij . psi . search . Global Search Scope Ċ import Ġjavax . swing . Icon Ċ Ċ class ĠM ixin Module ( facet : ĠMinecraft Facet ) Ġ: ĠAbstract Module ( facet ) Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġmodule Type Ġ= ĠM ixin Module Type ĊĠĠĠ Ġoverride Ġval Ġtype Ġ= ĠPlatform Type . MIX IN ĊĠĠĠ Ġoverride Ġval Ġicon : ĠIcon ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmixin FileType Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Type Manager . getInstance (). find FileType ByName (" Mixin ĠConfiguration ") Ġ?: ĠFile Types . UNKNOWN ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Mixin Configs ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope : ĠGlobal Search Scope ĊĠĠĠĠĠĠĠ Ġ): ĠCollection < Mixin Config > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFile Type Index . get Files ( mixin FileType , Ġscope ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( Psi Manager . getInstance ( project ). find File ( it ) Ġas ? ĠJson File )?. top Level Value Ġas ? ĠJsonObject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠM ixin Config ( project , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetAll Mixin Classes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope : ĠGlobal Search Scope ĊĠĠĠĠĠĠĠ Ġ): ĠCollection < Psi Class > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Mixin Configs ( project , Ġscope ). as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġ( it . qualified Mix ins Ġ+ Ġit . qualified Client Ġ+ Ġit . qualified Server ). as Sequence () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter NotNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . replace ('$ ', Ġ'.') Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĠJava Psi Facade . getInstance ( project ). find Classes ( it , Ġscope ). as Sequence () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Best Writable Config For Mixin Class ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope : ĠGlobal Search Scope , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmixin ClassName : ĠString ĊĠĠĠĠĠĠĠ Ġ): ĠM ixin Config ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Mixin Configs ( project , Ġscope ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . is Writable Ġ&& Ġmixin ClassName . startsWith ("${ it . pkg }. ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. max By Ġ{ Ġit . pkg ?. length Ġ?: Ġ 0 Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ