package Ġnet . cord a . gradle . jar filter Ċ Ċ import Ġkotlinx . metadata .* Ċ import Ġkotlinx . metadata . Flag . Constructor . IS _ PRIMARY Ċ import Ġkotlinx . metadata . jvm . field Signature Ċ import Ġkotlinx . metadata . jvm . getter Signature Ċ import Ġkotlinx . metadata . jvm . setter Signature Ċ import Ġkotlinx . metadata . jvm . signature Ċ import Ġkotlinx . metadata . jvm . synt hetic Method For Annotations Ċ import Ġorg . gradle . api . logging . Logger Ċ Ċ /** Ċ Ġ* ĠBase Ġclass Ġfor Ġremoving Ġun wanted Ġelements Ġfrom Ġ[ kotlin . Metadata ] Ġannotations . Ċ Ġ* ĠThis Ġis Ġused Ġby Ġ[ Filter Transformer ] Ġfor Ġ[ Jar Filter Task ]. Ċ Ġ*/ Ċ abstract Ġclass ĠMetadata Transformer < out ĠT Ġ: ĠK m Declaration Container >( ĊĠĠĠ Ġ@ Jvm Field Ġprotected Ġval Ġlogger : ĠLogger , ĊĠĠĠ Ġprivate Ġval Ġdeleted Fields : ĠCollection < Field Element >, ĊĠĠĠ Ġprivate Ġval Ġdeleted Functions : ĠCollection < Method Element >, ĊĠĠĠ Ġ@ Jvm Field Ġprotected Ġval Ġhandle Extra Method : Ġ( Method Element ) Ġ-> ĠUnit , ĊĠĠĠ Ġ@ Jvm Field Ġprotected Ġval Ġhandle Extra Field : Ġ( Field Element ) Ġ-> ĠUnit , ĊĠĠĠ Ġ@ Jvm Field Ġprotected Ġval Ġhandle Same As : ĠMethod Element .( Method Element ) Ġ-> ĠUnit , ĊĠĠĠ Ġ@ Jvm Field Ġprotected Ġval Ġmetadata : ĠT Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfunctions : ĠMutable List < Km Function > Ġ= Ġmetadata . functions ĊĠĠĠ Ġprivate Ġval Ġproperties : ĠMutable List < Km Property > Ġ= Ġmetadata . properties ĊĠĠĠ Ġprivate Ġval Ġtype Aliases : ĠMutable List < Km Type Alias > Ġ= Ġmetadata . type Aliases ĊĊĠĠĠ Ġprotected Ġopen Ġval Ġclass Descriptor : ĠClass Name Ġ= Ġ"" ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġfilter (): ĠInt ĊĊĠĠĠ Ġfun Ġtransform (): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Before Filtering () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( filter () Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġdo Before Filtering () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( function Ġin Ġfunctions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( function . value Parameters . has Any Default Values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġfunction . signature ?. to Method Element () Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsynthetic Ġ= Ġmethod . as Kotlin Default Function ( class Descriptor ) Ġ?: Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġsynthetic Ġ"$ default " Ġmethod Ġmay Ġnot Ġhave Ġbeen Ġannotated , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġso Ġensure Ġwe Ġhandle Ġit Ġin Ġthe Ġsame Ġway Ġas Ġits Ġ" host " Ġmethod . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynthetic . handle Same As ( method ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġfilter Functions (): ĠInt Ġ= Ġdeleted Functions . count (:: filter Function ) ĊĊĠĠĠ Ġprivate Ġfun Ġfilter Function ( deleted : ĠMethod Element ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( idx Ġin Ġ 0 Ġuntil Ġfunctions . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfunction Ġ= Ġfunctions [ idx ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( function . name Ġ== Ġdeleted . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġfunction . signature ?. to Method Element () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( signature Ġ== Ġdeleted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("-- Ġremoving Ġfunction : Ġ{}", Ġdeleted . signature ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunctions . remove At ( idx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġfilter Properties (): ĠInt Ġ= ĠArrayList ( deleted Fields ). count (:: filter Property ) ĊĊĠĠĠ Ġprivate Ġfun Ġfilter Property ( deleted : ĠField Element ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġannotated Method Ġ= Ġdeleted . as Kotlin Annotations Method () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( annotated Method Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġ" delete " Ġannotation Ġhas Ġbeen Ġapplied Ġto Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġproperty 's Ġsynthetic Ġ" annotation Ġholder " Ġmethod . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Property By Annotated Method ( deleted , Ġannotated Method ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġproperty 's Ġunderlying Ġfield Ġwas Ġannotated . ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Property By Field ( deleted ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfilter Property By Annotated Method ( deleted : ĠField Element , Ġannotated Method : ĠMethod Element ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( idx Ġin Ġ 0 Ġuntil Ġproperties . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperty Ġ= Ġproperties [ idx ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsynthetic Method Ġ= Ġproperty . synt hetic Method For Annotations Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( annotated Method . name Ġ== Ġsynthetic Method . name Ġ&& Ġannotated Method . descriptor Ġ== Ġsynthetic Method . desc ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠEnsure Ġthat Ġthe Ġaccessor Ġfunctions Ġand Ġthe Ġunderlying Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġare Ġdeleted Ġalong Ġwith Ġthe Ġsynthetic Ġannotation - holder . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperty . field Signature ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Extra ( to Field Element ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Accessors For ( property ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deleted . extension Ġ== Ġ" () ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠKotlin Ġ 1 . 4 Ġhas Ġrenamed Ġthe Ġsynthetic Ġannotation - holder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġmethod Ġto Ġuse Ġthe Ġname Ġof Ġthe Ġproperty 's Ġgetter Ġrather ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġthan Ġthe Ġproperty Ġitself . ĠHowever , Ġthe Ġlogic Ġfor Ġalso ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġdeleting Ġany Ġsynthetic Ġinner Ġclasses Ġit Ġmay Ġhave Ġdepends ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġon Ġknowing Ġthe Ġname Ġof Ġthe Ġdeleted Ġproperty . ĠSo Ġinject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġa Ġ" fake " Ġdeleted Ġreference Ġto Ġthe Ġpre - Kotlin Ġ 1 . 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġannotation - holder Ġmethod Ġinto Ġthe Ġworking Ġdata . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Extra Method ( deleted . as Kotlin Annotations Method ( property . name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("-- Ġremoving Ġproperty : Ġ{}, {}", Ġproperty . name , Ġdeleted . descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . remove At ( idx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfilter Property By Field ( deleted : ĠField Element ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( idx Ġin Ġ 0 Ġuntil Ġproperties . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperty Ġ= Ġproperties [ idx ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( property . name Ġ== Ġdeleted . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠWe Ġalready Ġknow Ġabout Ġthe Ġunderlying Ġfield , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġso Ġwe Ġjust Ġneed Ġto Ġdelete Ġthe Ġaccessors Ġhere . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Accessors For ( property ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠInject Ġa Ġ" fake " Ġdeleted Ġmethod Ġreference Ġto Ġthe Ġpre - Kotlin Ġ 1 . 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġannotation - holder Ġinto Ġthe Ġworking Ġdata , Ġfor Ġthe Ġsake Ġof Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġinner Ġclass Ġlogic Ġ( see Ġcomment Ġabove ). ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Extra Method ( deleted . as Kotlin Annotations Method ( property . name )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("-- Ġremoving Ġproperty : Ġ{}, {}", Ġproperty . name , Ġdeleted . descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . remove At ( idx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Accessors For ( property : ĠK m Property ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproperty . getter Signature ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Extra ( to Method Element ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġproperty . setter Signature ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Extra ( to Method Element ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Extra ( func : ĠMethod Element ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! deleted Functions . contains ( func )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("-- Ġidentified Ġextra Ġmethod Ġ{} Ġfor Ġdeletion ", Ġfunc . signature ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Extra Method ( func ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Function ( func ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Extra ( field : ĠField Element ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! deleted Fields . contains ( field )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("-- Ġidentified Ġextra Ġfield Ġ{}, {} Ġfor Ġdeletion ", Ġfield . name , Ġfield . descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Extra Field ( field ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġfilter Type Aliases (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( deleted Fields . isEmpty ()) Ġreturn Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġidx Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( idx Ġ< Ġtype Aliases . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalias Name Ġ= Ġtype Aliases [ idx ]. name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deleted Fields . any Ġ{ Ġit . name Ġ== Ġalias Name Ġ&& Ġit . extension Ġ== Ġ" ()" Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("-- Ġremoving Ġtype alias : Ġ{}", Ġalias Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Aliases . remove At ( idx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ idx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcount ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠRemoves Ġelements Ġfrom Ġa Ġ[ kotlin . Metadata ] Ġannotation Ġthat Ġcontains Ċ Ġ* Ġa Ġ[ Km Class ] Ġobject Ġin Ġits Ġ[ data 1 ][ kotlin . Metadata . data 1 ] Ġfield . Ċ Ġ*/ Ċ class ĠClass Metadata Transformer ( ĊĠĠĠ Ġlogger : ĠLogger , ĊĠĠĠ Ġdeleted Fields : ĠCollection < Field Element >, ĊĠĠĠ Ġdeleted Functions : ĠCollection < Method Element >, ĊĠĠĠ Ġprivate Ġval Ġdeleted Construct ors : ĠCollection < Method Element >, ĊĠĠĠ Ġprivate Ġval Ġdeleted Nested Classes : ĠCollection < String >, ĊĠĠĠ Ġprivate Ġval Ġdeleted Classes : ĠCollection < String >, ĊĠĠĠ Ġhandle Extra Method : Ġ( Method Element ) Ġ-> ĠUnit , ĊĠĠĠ Ġhandle Extra Field : Ġ( Field Element ) Ġ-> ĠUnit , ĊĠĠĠ Ġhandle Same As : ĠMethod Element .( Method Element ) Ġ-> ĠUnit , ĊĠĠĠ Ġkm Class : ĠK m Class Ċ ) Ġ: ĠMetadata Transformer < Km Class >( ĊĠĠĠ Ġlogger , ĊĠĠĠ Ġdeleted Fields , ĊĠĠĠ Ġdeleted Functions , ĊĠĠĠ Ġhandle Extra Method , ĊĠĠĠ Ġhandle Extra Field , ĊĠĠĠ Ġhandle Same As , ĊĠĠĠ Ġmetadata Ġ= Ġkm Class Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠclassName Ġ= Ġkm Class . name ĊĠĠĠ Ġprivate Ġval Ġnested ClassNames Ġ= Ġkm Class . nested Classes ĊĠĠĠ Ġprivate Ġval Ġsealed Subclass Names Ġ= Ġkm Class . sealed Sub classes ĊĠĠĠ Ġprivate Ġval Ġconstructors Ġ= Ġkm Class . construct ors ĊĊĠĠĠ Ġoverride Ġval Ġclass Descriptor Ġ= Ġ" L ${ className . to Internal Name ()}; " ĊĊĠĠĠ Ġoverride Ġfun Ġdo Before Filtering () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . do Before Filtering () ĊĠĠĠĠĠĠĠ Ġfor Ġ( constructor Ġin Ġconstructors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( constructor . value Parameters . has Any Default Values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġconstructor . signature ?. to Method Element () Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsynthetic Ġ= Ġmethod . as Kotlin Default Constructor () Ġ?: Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġsynthetic Ġ" default Ġvalues " Ġconstructor Ġmay Ġnot Ġhave Ġbeen Ġannotated , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġso Ġensure Ġwe Ġhandle Ġit Ġin Ġthe Ġsame Ġway Ġas Ġits Ġ" host " Ġmethod . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynthetic . handle Same As ( method ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfilter (): ĠInt Ġ= Ġ( ĊĠĠĠĠĠĠĠ Ġfilter Properties () ĊĠĠĠĠĠĠĠ Ġ+ Ġfilter Functions () ĊĠĠĠĠĠĠĠ Ġ+ Ġfilter Construct ors () ĊĠĠĠĠĠĠĠ Ġ+ Ġfilter Nested Classes () ĊĠĠĠĠĠĠĠ Ġ+ Ġfilter Type Aliases () ĊĠĠĠĠĠĠĠ Ġ+ Ġfilter Se aled Sub classes () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġfilter Construct ors (): ĠInt Ġ= Ġdeleted Construct ors . count (:: filter Constructor ) ĊĊĠĠĠ Ġprivate Ġfun Ġfilter Constructor ( deleted : ĠMethod Element ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġ* ĠConstructors Ġwith Ġthe Ġdefault Ġparameter Ġmarker Ġare Ġsynthetic Ġand ĠDO ĠNOT Ġhave ĊĠĠĠĠĠĠĠĠ Ġ* Ġentries Ġin Ġthe Ġmetadata . ĠSo Ġwe Ġconstruct Ġan Ġelement Ġfor Ġthe Ġ" primary " Ġone ĊĠĠĠĠĠĠĠĠ Ġ* Ġthat Ġit Ġwas Ġsynt hes ised Ġfor , Ġand Ġwhich Ġwe ĠDO Ġexpect Ġto Ġfind . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġdeleted Primary Ġ= Ġdeleted . as Kotlin Non Default Constructor () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( idx Ġin Ġ 0 Ġuntil Ġconstructors . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstructor Ġ= Ġconstructors [ idx ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġ( constructor . signature Ġ?: Ġcontinue ). to Method Element () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( signature Ġ== Ġdeleted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( IS _ PRIMARY ( constructor . flags )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Removing Ġprimary Ġconstructor : Ġ{} {}", ĠclassName , Ġdeleted . descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("-- Ġremoving Ġconstructor : Ġ{}", Ġdeleted . signature ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructors . remove At ( idx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( signature Ġ== Ġdeleted Primary ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor . value Parameters . forEach Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . clear Decl ares DefaultValue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("-- Ġremoving Ġdefault Ġparameter Ġvalues : Ġ{}", Ġdeleted Primary . signature ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfilter Nested Classes (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( deleted Nested Classes . isEmpty ()) Ġreturn Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġidx Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( idx Ġ< Ġnested ClassNames . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnested ClassName Ġ= Ġnested ClassNames [ idx ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deleted Nested Classes . contains ( nested ClassName )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("-- Ġremoving Ġnested Ġclass : Ġ{}", Ġnested ClassName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnested ClassNames . remove At ( idx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ idx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcount ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġfilter Se aled Sub classes (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( deleted Classes . isEmpty ()) Ġreturn Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġidx Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( idx Ġ< Ġsealed Subclass Names . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub className Ġ= Ġsealed Subclass Names [ idx ]. to Internal Name () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( deleted Classes . contains ( sub className )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("-- Ġremoving Ġsealed Ġsubclass : Ġ{}", Ġsub className ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsealed Subclass Names . remove At ( idx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ idx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcount ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠRemoves Ġelements Ġfrom Ġa Ġ[ kotlin . Metadata ] Ġannotation Ġthat Ġcontains Ċ Ġ* Ġa Ġ[ Km Package ] Ġobject Ġin Ġits Ġ[ data 1 ][ kotlin . Metadata . data 1 ] Ġfield . Ċ Ġ*/ Ċ class ĠPackage Metadata Transformer ( ĊĠĠĠ Ġlogger : ĠLogger , ĊĠĠĠ Ġdeleted Fields : ĠCollection < Field Element >, ĊĠĠĠ Ġdeleted Functions : ĠCollection < Method Element >, ĊĠĠĠ Ġhandle Extra Method : Ġ( Method Element ) Ġ-> ĠUnit , ĊĠĠĠ Ġhandle Extra Field : Ġ( Field Element ) Ġ-> ĠUnit , ĊĠĠĠ Ġhandle Same As : ĠMethod Element .( Method Element ) Ġ-> ĠUnit , ĊĠĠĠ Ġkm Package : ĠK m Package Ċ ) Ġ: ĠMetadata Transformer < Km Package >( ĊĠĠĠ Ġlogger , ĊĠĠĠ Ġdeleted Fields , ĊĠĠĠ Ġdeleted Functions , ĊĠĠĠ Ġhandle Extra Method , ĊĠĠĠ Ġhandle Extra Field , ĊĠĠĠ Ġhandle Same As , ĊĠĠĠ Ġmetadata Ġ= Ġkm Package Ċ ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġfilter (): ĠInt Ġ= Ġ( ĊĠĠĠĠĠĠĠ Ġfilter Properties () ĊĠĠĠĠĠĠĠ Ġ+ Ġfilter Functions () ĊĠĠĠĠĠĠĠ Ġ+ Ġfilter Type Aliases () ĊĠĠĠ Ġ) Ċ } Ċ