/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 - 2 0 2 2 ĠR ick ĠBus ar ow Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġmodule check . parsing . psi Ċ Ċ import Ġorg . jetbrains . kotlin . cli . common . CLI Configuration Keys Ċ import Ġorg . jetbrains . kotlin . cli . common . environment . set Ide a Io Use Fallback Ċ import Ġorg . jetbrains . kotlin . cli . common . messages . Analyzer With Compiler Report Ċ import Ġorg . jetbrains . kotlin . cli . common . messages . Compiler Message Severity Ċ import Ġorg . jetbrains . kotlin . cli . common . messages . Compiler Message Source Location Ċ import Ġorg . jetbrains . kotlin . cli . common . messages . Message Renderer Ċ import Ġorg . jetbrains . kotlin . cli . common . messages . Plain Text Message Renderer Ċ import Ġorg . jetbrains . kotlin . cli . common . messages . Print ing Message Collector Ċ import Ġorg . jetbrains . kotlin . cli . jvm . compiler . Environment Config Files Ċ import Ġorg . jetbrains . kotlin . cli . jvm . compiler . Kotlin Core Environment Ċ import Ġorg . jetbrains . kotlin . cli . jvm . compiler . No Scope Record Cli Binding Trace Ċ import Ġorg . jetbrains . kotlin . cli . jvm . compiler . Top Down Analyzer Facade For JVM Ċ import Ġorg . jetbrains . kotlin . com . intellij . mock . Mock Project Ċ import Ġorg . jetbrains . kotlin . com . intellij . openapi . Disposable Ċ import Ġorg . jetbrains . kotlin . com . intellij . openapi . util . Dis poser Ċ import Ġorg . jetbrains . kotlin . com . intellij . openapi . util . UserData Holder Base Ċ import Ġorg . jetbrains . kotlin . com . intellij . pom . P om Model Ċ import Ġorg . jetbrains . kotlin . com . intellij . pom . P om Model Aspect Ċ import Ġorg . jetbrains . kotlin . com . intellij . pom . P om Transaction Ċ import Ġorg . jetbrains . kotlin . com . intellij . pom . impl . P om Transaction Base Ċ import Ġorg . jetbrains . kotlin . com . intellij . pom . tree . Tree Aspect Ċ import Ġorg . jetbrains . kotlin . config . Common Configuration Keys Ċ import Ġorg . jetbrains . kotlin . config . Compiler Configuration Ċ import Ġorg . jetbrains . kotlin . config . language Version Settings Ċ import Ġorg . jetbrains . kotlin . psi . Kt File Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . resolve . lazy . declarations . File Based Declaration Provider Factory Ċ import Ġsun . reflect . Reflection Factory Ċ Ċ fun Ġcreate Binding Context ( ĊĠ Ġclasspath : ĠList < String >, ĊĠ Ġfiles : ĠList < Kt File > Ċ ): ĠBinding Context Ġ{ ĊĠ Ġif Ġ( classpath . isEmpty ()) Ġ{ ĊĠĠĠ Ġreturn ĠBinding Context . EMPTY ĊĠ Ġ} ĊĊĠ Ġval Ġenvironment : ĠKotlin Core Environment Ġ= Ġcreate Kotlin Core Environment () ĊĊĠ Ġval Ġanalyzer Ġ= ĠAnalyzer With Compiler Report ( ĊĠĠĠ ĠPrint ing Message Collector ( System . err , ĠModule Check Message Renderer , Ġtrue ), ĊĠĠĠ Ġenvironment . configuration . language Version Settings ĊĠ Ġ) ĊĠ Ġanalyzer . analyze And Report ( files ) Ġ{ ĊĠĠĠ ĠTop Down Analyzer Facade For JVM . analyze Files With Java Integration ( ĊĠĠĠĠĠ Ġproject Ġ= Ġenvironment . project , ĊĠĠĠĠĠ Ġfiles Ġ= Ġfiles , ĊĠĠĠĠĠ Ġtrace Ġ= ĠNo Scope Record Cli Binding Trace (), ĊĠĠĠĠĠ Ġconfiguration Ġ= Ġenvironment . configuration , ĊĠĠĠĠĠ Ġpackage Part Provider Ġ= Ġenvironment :: create Package Part Provider , ĊĠĠĠĠĠ Ġdeclaration Provider Factory Ġ= Ġ:: File Based Declaration Provider Factory ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĠ Ġreturn Ġanalyzer . analysis Result . binding Context Ċ } Ċ Ċ /* Ċ Borrow ed Ġfrom ĠDet ek t Ċ https :// github . com / de te kt / de te kt / blob / master / de te kt - parser / src / main / kotlin / io / github / de te kt / parser / Kotlin Environment Utils . kt Ċ Ġ*/ Ċ fun Ġcreate Kotlin Core Environment ( ĊĠ Ġconfiguration : ĠCompiler Configuration Ġ= ĠCompiler Configuration (), ĊĠ Ġdis posable : ĠDis posable Ġ= ĠDis poser . new Disposable () Ċ ): ĠKotlin Core Environment Ġ{ ĊĠ Ġ// Ġhttps :// github . com / Jet Brains / kotlin / commit / 2 5 6 8 8 0 4 eaa 2 c 8 f 6 b 1 0 b 7 3 5 7 7 7 2 1 8 c 8 1 af 6 2 9 1 9 c 1 ĊĠ Ġset Ide a Io Use Fallback () ĊĠ Ġconfiguration . put ( ĊĠĠĠ ĠCLI Configuration Keys . MESSAGE _ COLLECT OR _ KEY , ĊĠĠĠ ĠPrint ing Message Collector ( System . err , ĠMessage Renderer . PLAIN _ FULL _ PATHS , Ġfalse ) ĊĠ Ġ) ĊĠ Ġconfiguration . put ( Common Configuration Keys . MODULE _ NAME , Ġ" de te kt ") ĊĊĠ Ġval Ġenvironment Ġ= ĠKotlin Core Environment . create For Production ( ĊĠĠĠ Ġdis posable , ĊĠĠĠ Ġconfiguration , ĊĠĠĠ ĠEnvironment Config Files . JVM _ CONFIG _ FILES ĊĠ Ġ) ĊĊĠ Ġval Ġproject Candidate Ġ= Ġenvironment . project ĊĊĠ Ġval Ġproject Ġ= Ġrequire NotNull ( project Candidate Ġas ? ĠMock Project ) Ġ{ ĊĠĠĠ Ġ" Mock Project Ġtype Ġexpected , Ġactual Ġ- Ġ${ project Candidate . java Class . simple Name }" ĊĠ Ġ} ĊĊĠ Ġproject . register Service ( P om Model :: class . java , ĠModule Check P om Model ()) ĊĊĠ Ġreturn Ġenvironment Ċ } Ċ Ċ /** Ċ Ġ* Ġhttps :// github . com / p interest / kt lint / blob / 6 9 cc 0 f 7 f 8 2 6 e 1 8 d 7 ec 2 0 e 7 a 0 f 0 5 df 1 2 d 5 3 a 3 c 1 e 1 / kt lint - core / src / main / kotlin / com / p interest / kt lint / core / internal / Kotlin Psi File Factory . kt # L 7 0 Ċ Ġ*/ Ċ private Ġclass ĠModule Check P om Model Ġ: ĠUser Data Holder Base (), ĠP om Model Ġ{ ĊĊĠ Ġoverride Ġfun Ġrun Transaction ( transaction : ĠP om Transaction ) Ġ{ ĊĠĠĠ Ġval Ġtransaction Candidate Ġ= Ġtransaction Ġas ? ĠP om Transaction Base ĊĊĠĠĠ Ġval Ġpom Transaction Ġ= Ġrequire NotNull ( transaction Candidate ) Ġ{ ĊĠĠĠĠĠ Ġ" expected Ġ${ P om Transaction Base :: class . simple Name } Ġbut Ġactual Ġwas Ġ${ transaction . java Class . simple Name }" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpom Transaction . run () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġ< T Ġ: ĠP om Model Aspect ?> ĠgetModel Aspect ( aspect : ĠClass < T >): ĠT ? Ġ{ ĊĠĠĠ Ġif Ġ( aspect Ġ== ĠTree Aspect :: class . java ) Ġ{ ĊĠĠĠĠĠ Ġ// Ġusing Ġapproach Ġdescribed Ġin Ġhttps :// git . io / v K Q To Ġdue Ġto Ġthe Ġmag ical Ġbytecode Ġof ĠTree Aspect ĊĠĠĠĠĠ Ġ// Ġ( check Ġconstructor Ġsignature Ġand Ġcompare Ġit Ġto Ġthe Ġsource ) ĊĠĠĠĠĠ Ġ// Ġ( org . jetbrains . kotlin : kotlin - compiler - embed d able : 1 . 0 . 3 ) ĊĠĠĠĠĠ Ġval Ġconstructor Ġ= ĠReflection Factory . get Reflection Factory () ĊĠĠĠĠĠĠĠ Ġ. new Constructor For Serialization ( aspect , ĠAny :: class . java . getDeclared Constructor ()) ĊĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠ Ġreturn Ġconstructor . newInstance () Ġas ĠT ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull ĊĠ Ġ} Ċ } Ċ Ċ private Ġobject ĠModule Check Message Renderer Ġ: ĠPlain Text Message Renderer () Ġ{ ĊĠ Ġoverride Ġfun ĠgetName () Ġ= Ġ" Module Check Ġmessage Ġrenderer " ĊĠ Ġoverride Ġfun ĠgetPath ( location : ĠCompiler Message Source Location ) Ġ= Ġlocation . path ĊĠ Ġoverride Ġfun Ġrender ( ĊĠĠĠ Ġseverity : ĠCompiler Message Severity , ĊĠĠĠ Ġmessage : ĠString , ĊĠĠĠ Ġlocation : ĠCompiler Message Source Location ? ĊĠ Ġ): ĠString Ġ{ ĊĠĠĠ Ġif Ġ(! severity . isError ) Ġreturn Ġ"" ĊĠĠĠ Ġreturn Ġsuper . render ( severity , Ġmessage , Ġlocation ) ĊĠ Ġ} Ċ } Ċ