/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . android . layout lib . reflection Ċ Ċ import Ġcom . android . ide . common . rendering . api . ILayout Log Ċ import Ġcom . android . tools . idea . flags . Studio Flags . NE LE _ WARN _ NEW _ THREADS Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ Ċ private Ġconst Ġval ĠRE STRI CTION _ MESSAGE Ġ= Ġ" It Ġis Ġnot Ġallowed Ġto Ġcreate Ġnew Ġthreads Ġin Ġthe Ġpreview " Ċ private Ġconst Ġval ĠCOR OUT INE _ DEFAULT _ EXECUT OR Ġ= Ġ" kotlin x . coroutines . Default Executor " Ċ Ċ open Ġclass ĠTracking Thread Ġ: ĠThread Ġ{ ĊĠ Ġconstructor () Ġ: Ġsuper () Ġ{ ĊĠĠĠ Ġreport Illegal Thread () ĊĠ Ġ} ĊĊĠ Ġconstructor ( target : ĠRunnable ) Ġ: Ġsuper ( target ) Ġ{ ĊĠĠĠ Ġreport Illegal Thread () ĊĠ Ġ} ĊĊĠ Ġconstructor ( group : ĠThread Group , Ġtarget : ĠRunnable ) Ġ: Ġsuper ( group , Ġtarget ) Ġ{ ĊĠĠĠ Ġreport Illegal Thread () ĊĠ Ġ} ĊĊĠ Ġconstructor ( name : ĠString ) Ġ: Ġsuper ( name ) Ġ{ ĊĠĠĠ Ġreport Illegal Thread () ĊĠ Ġ} ĊĊĠ Ġconstructor ( group : ĠThread Group , Ġname : ĠString ) Ġ: Ġsuper ( group , Ġname ) Ġ{ ĊĠĠĠ Ġreport Illegal Thread () ĊĠ Ġ} ĊĊĠ Ġconstructor ( target : ĠRunnable , Ġname : ĠString ) Ġ: Ġsuper ( target , Ġname ) Ġ{ ĊĠĠĠ Ġif Ġ( name Ġ!= ĠCOR OUT INE _ DEFAULT _ EXECUT OR ) Ġ{ ĊĠĠĠĠĠ Ġreport Illegal Thread () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġconstructor ( group : ĠThread Group , Ġtarget : ĠRunnable , Ġname : ĠString ) Ġ: Ġsuper ( group , Ġtarget , Ġname ) Ġ{ ĊĠĠĠ Ġreport Illegal Thread () ĊĠ Ġ} ĊĊĠ Ġconstructor ( group : ĠThread Group , Ġtarget : ĠRunnable , Ġname : ĠString , Ġstack Size : ĠLong ) Ġ: Ġsuper ( group , Ġtarget , Ġname , Ġstack Size ) Ġ{ ĊĠĠĠ Ġreport Illegal Thread () ĊĠ Ġ} ĊĊĠ Ġconstructor ( group : ĠThread Group , Ġtarget : ĠRunnable , Ġname : ĠString , Ġstack Size : ĠLong , Ġinherit Thread Local s : ĠBoolean ) Ġ: ĊĠĠĠ Ġsuper ( group , Ġtarget , Ġname , Ġstack Size , Ġinherit Thread Local s ) Ġ{ ĊĠĠĠ Ġreport Illegal Thread () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġreport Illegal Thread () Ġ{ ĊĠĠĠ Ġif Ġ(! NE LE _ WARN _ NEW _ THREADS . get ()) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠThrow ing Ġshould Ġbe Ġthe Ġonly Ġoption Ġin Ġthe Ġfuture Ġbut Ġso Ġfar Ġwe Ġjust Ġwarn Ġthe Ġusers Ġin Ġproduction ĊĠĠĠ Ġval Ġthrowable Ġ= Ġcreate Throwable () ĊĠĠĠ Ġif Ġ( Application Manager . getApplication (). is UnitTest Mode ) Ġ{ ĊĠĠĠĠĠ Ġthrow Ġthrowable ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġlog Warning ( throwable ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġlog Warning ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġlogger Ġ= Ġget Logger () ĊĠĠĠĠĠ Ġlogger . warning ( ILayout Log . TAG _ THREAD _ CRE ATION , Ġ" Do Ġnot Ġcreate ĠThread s Ġin Ġthe Ġpreview ", Ġnull , Ġthrowable ) ĊĠĠĠ Ġ} Ġcatch Ġ( ignore : ĠThrowable ) Ġ{ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Logger (): ĠI Layout Log Ġ{ ĊĠĠĠ Ġval Ġbridge Class Ġ= ĠClass . forName (" com . android . layout lib . bridge . Bridge ") ĊĠĠĠ Ġval Ġlogger Field Ġ= Ġbridge Class . getDeclared Field (" s Current Log ") ĊĠĠĠ Ġlogger Field . is Accessible Ġ= Ġtrue ĊĠĠĠ Ġval Ġlogger Object Ġ= Ġlogger Field . get ( null ) ĊĠĠĠ Ġreturn Ġlogger Object Ġas ĠI Layout Log ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Throwable (): ĠThrowable Ġ{ ĊĠĠĠ Ġval Ġthrowable Ġ= ĠIllegalStateException ( RE STRI CTION _ MESSAGE ) ĊĠĠĠ Ġval Ġelements ToRemove Ġ= Ġ 3 ĊĠĠĠ Ġval Ġstack trace Ġ= Ġthrowable . stack Trace ĊĠĠĠ Ġ// ĠRemove Ġthe Ġstack Ġentries Ġfor Ġ< init >, Ġreport Illegal Thread , Ġcreate Throwable ĊĠĠĠ Ġthrowable . stack Trace Ġ= Ġstack trace . copyOf Range ( elements ToRemove , Ġstack trace . size ) ĊĠĠĠ Ġreturn Ġthrowable ĊĠ Ġ} Ċ }