package Ġcom . gmail . blue box ware . lib gdx plugin . ins pe ctions . global Ċ Ċ import Ġcom . gmail . blue box ware . lib gdx plugin . message Ċ import Ġcom . gmail . blue box ware . lib gdx plugin . utils . android Manifest . Manifest Model Ċ import Ġcom . gmail . blue box ware . lib gdx plugin . utils . android Manifest . Sdk Version Type Ċ import Ġcom . gmail . blue box ware . lib gdx plugin . utils . first Parent Ċ import Ġcom . gmail . blue box ware . lib gdx plugin . utils . is Lib G DX Project Ċ import Ġcom . intellij . analysis . Analysis Scope Ċ import Ġcom . intellij . code Highlighting . Highlight Display Level Ċ import Ġcom . intellij . code Inspection .* Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . search . Filename Index Ċ import Ġcom . intellij . psi . xml . Xml File Ċ import Ġcom . intellij . psi . xml . Xml Tag Ċ import Ġorg . jetbrains . kotlin . idea . search . project Scope Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . Gro ovy File Base Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . Gro ovy Psi Element Visitor Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . Gro ovy Recursive Element Visitor Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . api . statements . expressions . Gr Application Statement Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . api . statements . expressions . Gr MethodCall Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . api . statements . expressions . literals . Gr Literal Ċ import Ġorg . jetbrains . plugins . groovy . lang . psi . api . statements . expressions . path . Gr Call Expression Ċ Ċ /* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 ĠBlue ĠBox ĠW are Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ class ĠDesign ed For Table ts Inspection : ĠGlobal Inspection Tool () Ġ{ ĊĊĠ Ġoverride Ġfun ĠgetDefault Level (): ĠHighlight Display Level Ġ= ĠHighlight Display Level . WARNING ĊĊĠ Ġoverride Ġfun Ġget DisplayName () Ġ= Ġmessage (" de signed . for . table ts . inspection ") ĊĊĠ Ġoverride Ġfun Ġget Group Path () Ġ= ĠarrayOf (" Lib G DX ", Ġ" Android ") ĊĊĠ Ġoverride Ġfun Ġget Group DisplayName () Ġ= Ġ" Lib G DX " ĊĊĠ Ġoverride Ġfun ĠgetStatic Description () Ġ= Ġmessage (" de signed . for . table ts . html . description ") ĊĊĠ Ġoverride Ġfun Ġis Enabled ByDefault () Ġ= Ġtrue ĊĊĠ Ġoverride Ġfun Ġget ShortName () Ġ= Ġ" Lib G DX Design ed For Table ts " ĊĊĠ Ġoverride Ġfun Ġrun Inspection ( ĊĠĠĠĠĠĠĠĠĠ Ġscope : ĠAnalysis Scope , ĊĠĠĠĠĠĠĠĠĠ Ġmanager : ĠIns pection Manager , ĊĠĠĠĠĠĠĠĠĠ Ġglobal Context : ĠGlobal Inspection Context , ĊĠĠĠĠĠĠĠĠĠ Ġproblem Descriptions Processor : ĠProblem Descriptions Processor ĊĠ Ġ) Ġ{ ĊĊĠĠĠ Ġif Ġ(! global Context . project . is Lib G DX Project ()) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġproblems Ġ= Ġmutable ListOf < Pair < Psi Element , ĠString >>() ĊĠĠĠ Ġval Ġversions Map Ġ= Ġmutable Map Of < Sdk Version Type , ĠInt >() ĊĊĠĠĠ Ġval Ġgradle Files Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFilename Index . get Files ByName ( global Context . project , Ġ" build . gradle ", Ġglobal Context . project . project Scope ()) ĊĊĠĠĠ Ġgradle Files . sortBy Ġ{ Ġit . virtual File . path Ġ} ĊĊĠĠĠ Ġfor Ġ( gradle File Ġin Ġgradle Files ) Ġ{ ĊĠĠĠĠĠ Ġgradle File . accept ( Gro ovy Psi Element Visitor ( Design ed For Table ts Gradle Visitor ( problems , Ġversions Map ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġmanifest s Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFilename Index . get Files ByName ( global Context . project , Ġ" Android Manifest . xml ", Ġglobal Context . project . project Scope ()) ĊĊĠĠĠ Ġfor Ġ( manifest Ġin Ġmanifest s ) Ġ{ ĊĠĠĠĠĠ Ġ( manifest Ġas ? ĠXml File )?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġprocess Manifest ( problems , Ġit , Ġversions Map ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfor Ġ(( element , Ġmsg ) Ġin Ġproblems ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ(! is Sup pressed For ( element )) Ġ{ ĊĠĠĠĠĠĠĠ Ġproblem Descriptions Processor . add Problem Element ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglobal Context . ref Manager . getReference ( element . containing File ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . create Problem Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProblem Highlight Type . WE AK _ WARNING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġprocess Manifest ( problems : ĠMutable List < Pair < Psi Element , ĠString >>, Ġmanifest : ĠXml File , Ġversions Map : ĠMap < Sdk Version Type , ĠInt >) Ġ{ ĊĊĠĠĠ Ġval Ġmodel Ġ= ĠManifest Model . from File ( manifest ) ĊĠĠĠ Ġmodel . apply External Versions ( versions Map ) ĊĊĠĠĠ Ġval Ġversion Tag Ġ= Ġ( model . target SDK ?. element Ġ?: Ġmodel . min SDK . element Ġ?: Ġmodel . max SDK ?. element )?. let Ġ{ Ġattribute Ġ-> ĊĠĠĠĠĠ Ġattribute . first Parent Ġ{ Ġit Ġis ĠXml Tag Ġ} ĊĠĠĠ Ġ} Ġ?: Ġmanifest ĊĠĠĠ Ġif Ġ( model . resolve Target SDK () Ġ< Ġ 1 1 Ġ&& Ġmodel . min SDK . value Ġ< Ġ 1 1 ) Ġ{ ĊĠĠĠĠĠ Ġproblems . add ( version Tag Ġto Ġmessage (" de signed . for . table ts . problem . descriptor . target . or . min ")) ĊĠĠĠ Ġ} Ġelse Ġif Ġ( model . max SDK ?. value Ġ?: Ġ 1 1 Ġ< Ġ 1 1 ) Ġ{ ĊĠĠĠĠĠ Ġproblems . add ( version Tag Ġto Ġmessage (" de signed . for . table ts . problem . descriptor . max ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( model . support Scre ens Ġ== Ġnull Ġ&& Ġmodel . min SDK . value Ġ< Ġ 1 3 ) Ġ{ ĊĠĠĠĠĠ Ġproblems . add ( manifest Ġto Ġmessage (" de signed . for . table ts . problem . descriptor . missing . support . screens ")) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġval Ġsupport Scre ens Ġ= Ġmodel . resolve Supports Scre ens () ĊĠĠĠĠĠ Ġval Ġsupport Scre ens Element Ġ= Ġmodel . support Scre ens ?. element Ġ?: Ġmanifest ĊĊĠĠĠĠĠ Ġif Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( model . has Large Scre ens Support Attribute Ġ&& Ġsupport Scre ens . large Scre ens Ġ!= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ( model . has X Large Screen Support Attribute Ġ&& Ġsupport Scre ens . xlarge Scre ens Ġ!= Ġtrue ) ĊĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproblems . add ( support Scre ens Element Ġto Ġmessage (" de signed . for . table ts . problem . descriptor . large . false ")) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif Ġ( model . min SDK . value Ġ< Ġ 1 3 Ġ&& Ġ(! model . has Large Scre ens Support Attribute Ġ|| Ġ! model . has X Large Screen Support Attribute )) Ġ{ ĊĠĠĠĠĠĠĠ Ġproblems . add ( support Scre ens Element Ġto Ġmessage (" de signed . for . table ts . problem . descriptor . large . missing ")) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġ} Ċ Ċ } Ċ Ċ private Ġclass ĠDesign ed For Table ts Gradle Visitor ( ĊĠĠĠĠĠĠĠ Ġval Ġproblems : ĠMutable List < Pair < Psi Element , ĠString >>, ĊĠĠĠĠĠĠĠ Ġval Ġversions Map : ĠMutable Map < Sdk Version Type , ĠInt > Ċ ): ĠGro ovy Recursive Element Visitor () Ġ{ ĊĊĠ Ġprivate Ġvar Ġfound Element Map : ĠMutable Map < Sdk Version Type , ĠGr MethodCall > Ġ= Ġmutable Map Of () ĊĊĠ Ġprivate Ġfun Ġupdate Version Map ( call : ĠGr MethodCall ) Ġ{ ĊĊĠĠĠ Ġval Ġinvoked Text Ġ= Ġcall . inv oked Expression . text ĊĊĠĠĠ Ġif Ġ( inv oked Text Ġ!= Ġ" min Sdk Version " Ġ&& Ġinvoked Text Ġ!= Ġ" max Sdk Version " Ġ&& Ġinvoked Text Ġ!= Ġ" target Sdk Version ") Ġreturn ĊĊĠĠĠ Ġif Ġ( call . argument List . all Arguments . isEmpty ()) Ġreturn ĊĊĠĠĠ Ġval Ġargument Ġ= Ġcall . argument List . all Arguments [ 0 ] ĊĊĠĠĠ Ġval Ġversion Ġ= Ġ(( argument Ġas ? ĠGr Literal )?. value Ġas ? ĠInt ) Ġ?: Ġreturn ĊĊĠĠĠ Ġvar Ġtype : ĠS dk Version Type ? Ġ= Ġnull ĊĊĠĠĠ Ġwhen Ġ( inv oked Text ) Ġ{ ĊĠĠĠĠĠ Ġ" max Sdk Version " Ġ-> Ġtype Ġ= ĠS dk Version Type . MAX ĊĠĠĠĠĠ Ġ" min Sdk Version " Ġ-> Ġtype Ġ= ĠS dk Version Type . MIN ĊĠĠĠĠĠ Ġ" target Sdk Version " Ġ-> Ġtype Ġ= ĠS dk Version Type . TARGET ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtype ?. let Ġ{ Ġtype NotNull Ġ-> ĊĠĠĠĠĠ Ġif Ġ( version Ġ> Ġversions Map [ type NotNull ] Ġ?: Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġversions Map [ type NotNull ] Ġ= Ġversion ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġfound Element Map [ type NotNull ] Ġ= Ġcall ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( inv oked Text Ġ== Ġ" max Sdk Version " Ġ&& Ġversions Map [ Sdk Version Type . MAX ] Ġ?: Ġ 1 1 Ġ< Ġ 1 1 ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( problems . none Ġ{ Ġit . first Ġ== Ġcall Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġproblems . add ( call Ġto Ġmessage (" de signed . for . table ts . problem . descriptor . max ")) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvisit File ( file : ĠGro ovy File Base ) Ġ{ ĊĠĠĠ Ġsuper . visit File ( file ) ĊĊĠĠĠ Ġif Ġ( found Element Map [ Sdk Version Type . TARGET ] Ġ!= Ġnull Ġ|| Ġfound Element Map [ Sdk Version Type . MIN ] Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( versions Map [ Sdk Version Type . TARGET ] Ġ?: Ġ 1 1 Ġ< Ġ 1 1 Ġ&& Ġversions Map [ Sdk Version Type . MIN ] Ġ?: Ġ 1 1 Ġ< Ġ 1 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfound Element Map [ Sdk Version Type . TARGET ]?. let Ġ{ Ġproblems . add ( it Ġto Ġmessage (" de signed . for . table ts . problem . descriptor . target . or . min ")) Ġ} ĊĠĠĠĠĠĠĠ Ġfound Element Map [ Sdk Version Type . MIN ]?. let Ġ{ Ġproblems . add ( it Ġto Ġmessage (" de signed . for . table ts . problem . descriptor . target . or . min ")) Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvisit Call Expression ( call Expression : ĠGr Call Expression ) Ġ{ ĊĠĠĠ Ġsuper . visit Call Expression ( call Expression ) ĊĊĠĠĠ Ġif Ġ( call Expression Ġis ĠGr MethodCall ) Ġ{ ĊĠĠĠĠĠ Ġupdate Version Map ( call Expression ) ĊĠĠĠ Ġ} ĊĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvisit Application Statement ( application Statement : ĠGr Application Statement ) Ġ{ ĊĠĠĠ Ġsuper . visit Application Statement ( application Statement ) ĊĊĠĠĠ Ġupdate Version Map ( application Statement ) ĊĊĠ Ġ} Ċ }