package Ġnet . cord a . reflection s . reflection s Ċ Ċ import Ġio . github . class graph . Class Graph Ċ import Ġio . github . class graph . Class Info Ċ import Ġio . github . class graph . Class InfoList ĊĊ Ċ class ĠState MetaData Extractor ( private Ġval ĠpackageName : ĠString Ġ= Ġ" net . cord a ") Ġ{ ĊĊĠĠĠ Ġvar Ġstate Classes : ĠList < Class Info > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġstate Classes Ġ= Ġscan J ars () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġavailable States (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġstate Classes . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk clazz Ġ= ĠClass . forName ( it . name ). kotlin Ġas ĠK Class < Any > ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( it . simple Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresults ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġscan J ars (): ĠList < Class Info > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= ĠArrayList < Class Info >() ĊĠĠĠĠĠĠĠ ĠClass Graph () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable All Info () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. whitelist Packages ( packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scan () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Ġ{ Ġscan Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscan Result . all Classes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġis Linear State ( it . interfaces ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Collection ( results ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresults ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Linear State ( interfaces : ĠClass InfoList ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( clazz Ġin Ġinterfaces ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( clazz . name Ġ== Ġ" net . cord a . core . contracts . Linear State ") Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊ Ċ } ĊĊ