/* Ċ Ġ* ĠCopyright Ġ 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 . Ċ Ġ*/ Ċ Ċ @ file : Suppress (" Un stable Api Usage ") Ċ Ċ package Ġandroidx . compose . animation . core . lint Ċ Ċ import Ġandroidx . compose . lint . Name Ċ import Ġandroidx . compose . lint . Names Ċ import Ġandroidx . compose . lint . isIn PackageName Ċ import Ġandroidx . compose . lint . isNot Remember ed Ċ import Ġcom . android . tools . lint . client . api . U Element Handler Ċ import Ġcom . android . tools . lint . detector . api . Category Ċ import Ġcom . android . tools . lint . detector . api . Detector Ċ import Ġcom . android . tools . lint . detector . api . Implementation Ċ import Ġcom . android . tools . lint . detector . api . Issue Ċ import Ġcom . android . tools . lint . detector . api . Java Context Ċ import Ġcom . android . tools . lint . detector . api . Scope Ċ import Ġcom . android . tools . lint . detector . api . Severity Ċ import Ġcom . android . tools . lint . detector . api . Source Code Scanner Ċ import Ġcom . intellij . psi . impl . source . Psi Class Reference Type Ċ import Ġorg . jetbrains . u ast . U Call Expression Ċ import Ġorg . jetbrains . u ast . util . is Constructor Call Ċ import Ġjava . util . Enum Set Ċ Ċ /** Ċ Ġ* Ġ[ Detector ] Ġthat Ġchecks Ġ` Anim atable ` Ġcalls Ġto Ġmake Ġsure Ġthat Ġif Ġthey Ġare Ġcalled Ġinside Ġa Ċ Ġ* ĠComp osable Ġbody , Ġthey Ġare Ġ` remember ` ed . Ċ Ġ*/ Ċ class ĠUn remember ed Anim atable Detector Ġ: ĠDetector (), ĠSource Code Scanner Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Applicable U ast Types () Ġ= ĠlistOf ( U Call Expression :: class . java ) ĊĊĠĠĠ Ġoverride Ġfun Ġcreate U ast Handler ( context : ĠJava Context ) Ġ= Ġobject Ġ: ĠU Element Handler () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Call Expression ( node : ĠU Call Expression ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġnode . resolve () Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMatch Ġcalls Ġto Ġconstructor , Ġand Ġtop Ġlevel Ġ' factory ' Ġfunctions Ġnamed ĠAnim atable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthat Ġreturn ĠAnim atable Ġ( this Ġis Ġneeded Ġas Ġwe Ġhave ĠAnim atable () Ġfactory Ġfunctions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġin Ġseparate Ġmodules Ġfor Ġdifferent Ġtypes , Ġand Ġdevelopers Ġcould Ġcreate Ġtheir Ġown Ġas ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwell ). ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . is Constructor Call ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! method . isIn PackageName ( Names . Animation Core . PackageName )) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( method . containing Class ?. name Ġ!= ĠAnim atable . short Name ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . methodName Ġ!= ĠAnim atable . short Name ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠreturnType Ġ= Ġmethod . returnType Ġas ? ĠPsi Class Reference Type Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRaw Ġtype Ġsince Ġwe Ġwant Ġto Ġignore Ġgeneric Ġtyping ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! returnType . raw Type (). equals ToText ( Anim atable . java F qn )) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . isNot Remember ed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . report ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUn remember ed Anim atable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getName Location ( node ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Creating Ġan ĠAnim atable Ġduring Ġcomposition Ġwithout Ġusing Ġ` remember `" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠUn remember ed Anim atable Ġ= ĠIssue . create ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Un remember ed Anim atable ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Creating Ġan ĠAnim atable Ġduring Ġcomposition Ġwithout Ġusing Ġ` remember `", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Anim atable Ġinstances Ġcreated Ġduring Ġcomposition Ġneed Ġto Ġbe Ġ` remember ` ed , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" otherwise Ġthey Ġwill Ġbe Ġre created Ġduring Ġre composition , Ġand Ġlose Ġtheir Ġstate . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Either Ġho ist Ġthe ĠAnim atable Ġto Ġan Ġobject Ġthat Ġis Ġnot Ġcreated Ġduring Ġcomposition ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġor Ġwrap Ġthe ĠAnim atable Ġin Ġa Ġcall Ġto Ġ` remember `. ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCategory . CORRECT NESS , Ġ 3 , ĠSeverity . ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImplementation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUn remember ed Anim atable Detector :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnum Set . of ( Scope . JAVA _ FILE , ĠScope . TEST _ SOURCES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval ĠAnim atable Ġ= ĠName ( Names . Animation Core . PackageName , Ġ" Anim atable ") Ċ