package Ġcom . aut onomous apps . tasks Ċ Ċ import Ġcom . aut onomous apps . TASK _ GROUP _ DEP _ INTERNAL Ċ import Ġcom . aut onomous apps . internal . Usage s Ex clusions Ċ import Ġcom . aut onomous apps . internal . utils .* Ċ import Ġcom . aut onomous apps . model .* Ċ import Ġcom . aut onomous apps . model . inter medi ates .* Ċ import Ġcom . aut onomous apps . model . inter medi ates . Annotation Processor Dependency Ċ import Ġcom . aut onomous apps . model . inter medi ates . Explo ding Ab i Ċ import Ġcom . aut onomous apps . model . inter medi ates . Explo ding Byte code Ċ import Ġcom . aut onomous apps . model . inter medi ates . Explo ding Source Code Ċ import Ġorg . gradle . api . Default Task Ċ import Ġorg . gradle . api . file . Regular File Property Ċ import Ġorg . gradle . api . provider . Property Ċ import Ġorg . gradle . api . tasks .* Ċ import Ġorg . gradle . workers . Work Action Ċ import Ġorg . gradle . workers . Work Parameters Ċ import Ġorg . gradle . workers . Worker Executor Ċ import Ġjava . util . Tree Set Ċ import Ġjavax . inject . Inject Ċ Ċ @ Cache able Task Ċ abstract Ġclass ĠSynt hesize Project View Task Ġ@ Inject Ġconstructor ( ĊĠ Ġprivate Ġval Ġworker Executor : ĠWorker Executor Ċ ) Ġ: ĠDefault Task () Ġ{ ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġgroup Ġ= ĠTASK _ GROUP _ DEP _ INTERNAL ĊĠĠĠ Ġdescription Ġ= Ġ" Synt hes izes Ġproject Ġusage s Ġinformation Ġinto Ġa Ġsingle Ġview " ĊĠ Ġ} ĊĊĠ Ġ@ get : Input ĊĠ Ġabstract Ġval Ġproject Path : ĠProperty < String > ĊĊĠ Ġ/** ĠMay Ġbe Ġnull . Ġ*/ ĊĠ Ġ@ get : Optional ĊĠ Ġ@ get : Input ĊĠ Ġabstract Ġval Ġbuild Type : ĠProperty < String > ĊĊĠ Ġ/** ĠMay Ġbe Ġnull . Ġ*/ ĊĠ Ġ@ get : Optional ĊĠ Ġ@ get : Input ĊĠ Ġabstract Ġval Ġflavor : ĠProperty < String > ĊĊĠ Ġ@ get : Input ĊĠ Ġabstract Ġval Ġvariant : ĠProperty < String > ĊĊĠ Ġ@ get : Input ĊĠ Ġabstract Ġval Ġkind : ĠProperty < Source Set Kind > ĊĊĠ Ġ/** Ġ[` Dependency Graph View `][ Dependency Graph View ] Ġ*/ ĊĠ Ġ@ get : Path Sensitive ( Path Sensitivity . NONE ) ĊĠ Ġ@ get : Input File ĊĠ Ġabstract Ġval Ġgraph : ĠRegular File Property ĊĊĠ Ġ/** Ġ[` Set < Annotation Processor Dependency >` ][ com . aut onomous apps . model . inter medi ates . Annotation Processor Dependency ] Ġ*/ ĊĠ Ġ@ get : Path Sensitive ( Path Sensitivity . NONE ) ĊĠ Ġ@ get : Input File ĊĠ Ġabstract Ġval Ġannotation Processors : ĠRegular File Property ĊĊĠ Ġ/** Ġ[` Set < Explo ding Byte Code >` ][ Explo ding Byte code ] Ġ*/ ĊĠ Ġ@ get : Path Sensitive ( Path Sensitivity . NONE ) ĊĠ Ġ@ get : Input File ĊĠ Ġabstract Ġval Ġexplo ded Byte code : ĠRegular File Property ĊĊĠ Ġ/** Ġ[` Set < Explo ding Source Code >` ][ Explo ding Source Code ] Ġ*/ ĊĠ Ġ@ get : Path Sensitive ( Path Sensitivity . NONE ) ĊĠ Ġ@ get : Input File ĊĠ Ġabstract Ġval Ġexplo ded Source Code : ĠRegular File Property ĊĊĠ Ġ/** Ġ[` Usage s Ex clusions `][ com . aut onomous apps . internal . Usage s Ex clusions ] Ġ*/ ĊĠ Ġ@ get : Optional ĊĠ Ġ@ get : Input ĊĠ Ġabstract Ġval Ġusage s Ex clusions : ĠProperty < String > ĊĊĠ Ġ/** Ġ[` Set < Explo ding Ab i >` ][ Explo ding Ab i ] Ġ*/ ĊĠ Ġ@ get : Optional ĊĠ Ġ@ get : Path Sensitive ( Path Sensitivity . NONE ) ĊĠ Ġ@ get : Input File ĊĠ Ġabstract Ġval Ġexplo ding Ab i : ĠRegular File Property ĊĊĠ Ġ/** Ġ[` Set < Android Res Source >` ][ Android Res Source ] Ġ*/ ĊĠ Ġ@ get : Optional ĊĠ Ġ@ get : Path Sensitive ( Path Sensitivity . NONE ) ĊĠ Ġ@ get : Input File ĊĠ Ġabstract Ġval Ġandroid Res Source : ĠRegular File Property ĊĊĠ Ġ@ get : OutputFile ĊĠ Ġabstract Ġval Ġoutput : ĠRegular File Property ĊĊĠ Ġ@ Task Action Ġfun Ġaction () Ġ{ ĊĠĠĠ Ġworker Executor . no Isolation (). submit ( Synt hesize Project View Work Action :: class . java ) Ġ{ ĊĠĠĠĠĠ Ġproject Path . set ( this @ Synt hesize Project View Task . project Path ) ĊĠĠĠĠĠ Ġbuild Type . set ( this @ Synt hesize Project View Task . build Type ) ĊĠĠĠĠĠ Ġflavor . set ( this @ Synt hesize Project View Task . flavor ) ĊĠĠĠĠĠ Ġvariant . set ( this @ Synt hesize Project View Task . variant ) ĊĠĠĠĠĠ Ġkind . set ( this @ Synt hesize Project View Task . kind ) ĊĠĠĠĠĠ Ġgraph . set ( this @ Synt hesize Project View Task . graph ) ĊĠĠĠĠĠ Ġannotation Processors . set ( this @ Synt hesize Project View Task . annotation Processors ) ĊĠĠĠĠĠ Ġexplo ded Byte code . set ( this @ Synt hesize Project View Task . explo ded Byte code ) ĊĠĠĠĠĠ Ġexplo ded Source Code . set ( this @ Synt hesize Project View Task . explo ded Source Code ) ĊĠĠĠĠĠ Ġexplo ding Ab i . set ( this @ Synt hesize Project View Task . explo ding Ab i ) ĊĠĠĠĠĠ Ġusage s Ex clusions . set ( this @ Synt hesize Project View Task . us ages Ex clusions ) ĊĠĠĠĠĠ Ġandroid Res Source . set ( this @ Synt hesize Project View Task . android Res Source ) ĊĠĠĠĠĠ Ġoutput . set ( this @ Synt hesize Project View Task . output ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinterface ĠSynt hesize Project View Parameters Ġ: ĠWork Parameters Ġ{ ĊĠĠĠ Ġval Ġproject Path : ĠProperty < String > ĊĊĠĠĠ Ġ/** ĠMay Ġbe Ġnull . Ġ*/ ĊĠĠĠ Ġval Ġbuild Type : ĠProperty < String > ĊĊĠĠĠ Ġ/** ĠMay Ġbe Ġnull . Ġ*/ ĊĠĠĠ Ġval Ġflavor : ĠProperty < String > ĊĠĠĠ Ġval Ġvariant : ĠProperty < String > ĊĠĠĠ Ġval Ġkind : ĠProperty < Source Set Kind > ĊĠĠĠ Ġval Ġgraph : ĠRegular File Property ĊĠĠĠ Ġval Ġannotation Processors : ĠRegular File Property ĊĠĠĠ Ġval Ġexplo ded Byte code : ĠRegular File Property ĊĠĠĠ Ġval Ġexplo ded Source Code : ĠRegular File Property ĊĠĠĠ Ġval Ġusage s Ex clusions : ĠProperty < String > ĊĊĠĠĠ Ġ// ĠOptional ĊĠĠĠ Ġval Ġexplo ding Ab i : ĠRegular File Property ĊĠĠĠ Ġval Ġandroid Res Source : ĠRegular File Property ĊĊĠĠĠ Ġval Ġoutput : ĠRegular File Property ĊĠ Ġ} ĊĊĠ Ġabstract Ġclass ĠSynt hesize Project View Work Action Ġ: ĠWork Action < Synt hesize Project View Parameters > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbuild ers Ġ= Ġsorted Map Of < String , ĠCode Source Builder >() ĊĊĠĠĠ Ġ@ Suppress (" Un stable Api Usage ") Ġ// ĠGu ava ĠGraph ĊĠĠĠ Ġoverride Ġfun Ġexecute () Ġ{ ĊĠĠĠĠĠ Ġval Ġoutput Ġ= Ġparameters . output . get And Delete () ĊĊĠĠĠĠĠ Ġval Ġgraph Ġ= Ġparameters . graph . fromJson < Dependency Graph View >() ĊĠĠĠĠĠ Ġval Ġexplo ded Byte code Ġ= Ġparameters . explo ded Byte code . fromJson Set < Explo ding Byte code >() ĊĠĠĠĠĠ Ġval Ġexplo ding Ab i Ġ= Ġparameters . explo ding Ab i . from Nullable Json Set < Explo ding Ab i >(). or Empty () ĊĠĠĠĠĠ Ġval Ġexplo ded Source Code Ġ= Ġparameters . explo ded Source Code . fromJson Set < Explo ding Source Code >() ĊĠĠĠĠĠ Ġval Ġandroid Res Source Ġ= Ġparameters . android Res Source . from Nullable Json Set < Android Res Source >(). or Empty () ĊĊĠĠĠĠĠ Ġexplo ded Byte code . forEach Ġ{ Ġbytecode Ġ-> ĊĠĠĠĠĠĠĠ Ġbuild ers . merge ( ĊĠĠĠĠĠĠĠĠĠ Ġbytecode . className , ĊĠĠĠĠĠĠĠĠĠ ĠCode Source Builder ( byte code . className ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelative Path Ġ= Ġbytecode . relative Path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġused Classes . addAll ( byte code . used Classes ) ĊĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠ ĠCode Source Builder :: concat ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġexplo ding Ab i . forEach Ġ{ Ġabi Ġ-> ĊĠĠĠĠĠĠĠ Ġbuild ers . merge ( ĊĠĠĠĠĠĠĠĠĠ Ġabi . className , ĊĠĠĠĠĠĠĠĠĠ ĠCode Source Builder ( abi . className ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexposed Classes . addAll ( abi . ex posed Classes ) ĊĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠ ĠCode Source Builder :: concat ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġexplo ded Source Code . forEach Ġ{ Ġsource Ġ-> ĊĠĠĠĠĠĠĠ Ġbuild ers . merge ( ĊĠĠĠĠĠĠĠĠĠ Ġsource . className , ĊĠĠĠĠĠĠĠĠĠ ĠCode Source Builder ( source . className ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimports . addAll ( source . imports ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkind Ġ= Ġsource . kind ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelative Path Ġ= Ġsource . relative Path ĊĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠ ĠCode Source Builder :: concat ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġcode Source Ġ= Ġbuild ers . values . as Sequence () ĊĠĠĠĠĠĠĠ Ġ// Ġrelative Path Ġwill Ġbe Ġnull Ġfor Ġsynthetic Ġclasses , Ġlike ĠR Ġclass Ġfiles ĊĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġit . relative Path Ġ== Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . build () Ġ} ĊĠĠĠĠĠĠĠ Ġ. toSet () ĊĊĠĠĠĠĠ Ġval Ġproject Coordinates Ġ= ĠProject Coordinates ( parameters . project Path . get ()) ĊĠĠĠĠĠ Ġval Ġclasspath Ġ= Ġgraph . graph . nodes (). as Sequence (). filter Not Ġ{ ĊĠĠĠĠĠĠĠ Ġit Ġ== Ġproject Coordinates ĊĠĠĠĠĠ Ġ}. to Sorted Set () ĊĠĠĠĠĠ Ġval Ġannotation Processors Ġ= Ġparameters . annotation Processors . fromJson Set < Annotation Processor Dependency >() ĊĠĠĠĠĠĠĠ Ġ. map To Set Ġ{ Ġit . coordinates Ġ} ĊĊĠĠĠĠĠ Ġval Ġusage s Ex clusions Ġ= Ġparameters . us ages Ex clusions . or Null ?. fromJson < Usage s Ex clusions >() Ġ?: ĠUs ages Ex clusions . NONE ĊĠĠĠĠĠ Ġval Ġproject Variant Ġ= ĠProject Variant ( ĊĠĠĠĠĠĠĠ Ġcoordinates Ġ= Ġproject Coordinates , ĊĠĠĠĠĠĠĠ Ġbuild Type Ġ= Ġparameters . build Type . or Null , ĊĠĠĠĠĠĠĠ Ġflavor Ġ= Ġparameters . flavor . or Null , ĊĠĠĠĠĠĠĠ Ġvariant Ġ= ĠVariant ( parameters . variant . get (), Ġparameters . kind . get ()), ĊĠĠĠĠĠĠĠ Ġsources Ġ= ĠTree Set < Source >(). also Ġ{ Ġsources Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġcode Source . map To ( sources ) Ġ{ Ġit . exclude Usage s ( us ages Ex clusions ) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġandroid Res Source . map To ( sources ) Ġ{ Ġit . exclude Usage s ( us ages Ex clusions ) Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġclasspath Ġ= Ġclasspath , ĊĠĠĠĠĠĠĠ Ġannotation Processors Ġ= Ġannotation Processors ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġoutput . write Text ( project Variant . toJson ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠCode Source . exclude Usage s ( us ages Ex clusions : ĠUs ages Ex clusions ): ĠCode Source Ġ{ ĊĠĠĠĠĠ Ġreturn Ġcopy ( ĊĠĠĠĠĠĠĠ Ġused Classes Ġ= Ġusage s Ex clusions . exclude Classes From Set ( used Classes ), ĊĠĠĠĠĠĠĠ Ġimports Ġ= Ġusage s Ex clusions . exclude Classes From Set ( imports ), ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠAndroid Res Source . exclude Usage s ( us ages Ex clusions : ĠUs ages Ex clusions ): ĠAndroid Res Source Ġ{ ĊĠĠĠĠĠ Ġreturn Ġcopy ( ĊĠĠĠĠĠĠĠ Ġused Classes Ġ= Ġusage s Ex clusions . exclude Classes From Set ( used Classes ), ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠCode Source Builder ( val ĠclassName : ĠString ) Ġ{ ĊĊĠ Ġvar Ġrelative Path : ĠString ? Ġ= Ġnull ĊĠ Ġvar Ġkind : ĠCode Source . Kind Ġ= ĠCode Source . Kind . UNKNOWN ĊĠ Ġval Ġused Classes Ġ= Ġmutable Set Of < String >() ĊĠ Ġval Ġexposed Classes Ġ= Ġmutable Set Of < String >() ĊĠ Ġval Ġimports Ġ= Ġmutable Set Of < String >() ĊĊĠ Ġfun Ġconcat ( other : ĠCode Source Builder ): ĠCode Source Builder Ġ{ ĊĠĠĠ Ġused Classes . addAll ( other . used Classes ) ĊĠĠĠ Ġexposed Classes . addAll ( other . ex posed Classes ) ĊĠĠĠ Ġimports . addAll ( other . imports ) ĊĠĠĠ Ġother . relative Path ?. let Ġ{ Ġrelative Path Ġ= Ġit Ġ} ĊĠĠĠ Ġkind Ġ= Ġother . kind ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġfun Ġbuild (): ĠCode Source Ġ{ ĊĠĠĠ Ġval Ġrelative Path Ġ= ĠcheckNotNull ( relative Path ) Ġ{ Ġ"' relative Path ' Ġwas Ġnull Ġfor Ġ$ className " Ġ} ĊĠĠĠ Ġreturn ĠCode Source ( ĊĠĠĠĠĠ Ġrelative Path Ġ= Ġrelative Path , ĊĠĠĠĠĠ Ġkind Ġ= Ġkind , ĊĠĠĠĠĠ ĠclassName Ġ= ĠclassName , ĊĠĠĠĠĠ Ġused Classes Ġ= Ġused Classes , ĊĠĠĠĠĠ Ġexposed Classes Ġ= Ġexposed Classes , ĊĠĠĠĠĠ Ġimports Ġ= Ġimports ĊĠĠĠ Ġ) ĊĠ Ġ} Ċ } Ċ