/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . resolve . check ers Ċ Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġorg . jetbrains . kotlin . builtins . Kotlin Built Ins Ċ import Ġorg . jetbrains . kotlin . config . ApiVersion Ċ import Ġorg . jetbrains . kotlin . descriptors . Declaration Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . annotations . Annotation Descriptor Ċ import Ġorg . jetbrains . kotlin . diagnostics . Errors Ċ import Ġorg . jetbrains . kotlin . diagnostics . report Diagnostic Once Ċ import Ġorg . jetbrains . kotlin . name . is Sub package Of Ċ import Ġorg . jetbrains . kotlin . psi . Kt Annotation Entry Ċ import Ġorg . jetbrains . kotlin . psi . Kt Declaration Ċ import Ġorg . jetbrains . kotlin . resolve . Require Kotlin Constants Ċ import Ġorg . jetbrains . kotlin . resolve . annotations . argument Value Ċ import Ġorg . jetbrains . kotlin . resolve . constants . StringValue Ċ import Ġorg . jetbrains . kotlin . resolve . deprecation . get Since Version Ċ import Ġorg . jetbrains . kotlin . resolve . descriptor Util . fq Name OrNull Ċ import Ġorg . jetbrains . kotlin . resolve . source . get Psi Ċ import Ġorg . jetbrains . kotlin . utils . addTo Std lib . safe As Ċ Ċ object ĠDeprecated Since Kotlin Annotation Checker Ġ: ĠDeclaration Checker Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcheck ( declaration : ĠK t Declaration , Ġdescriptor : ĠDeclaration Descriptor , Ġcontext : ĠDeclaration Checker Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeprecated Since Annotation Ġ= Ġdescriptor . annotations . find Annotation ( Kotlin Built Ins . FQ _ NAMES . deprecated Since Kotlin ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġdeprecated Since Annotation Psi Ġ= Ġdeprecated Since Annotation . source . get Psi () Ġas ? ĠK t Annotation Entry Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġdeprecated Annotation Ġ= Ġdescriptor . annotations . find Annotation ( Kotlin Built Ins . FQ _ NAMES . deprecated ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdeprecated Since Annotation Name Ġ= Ġdeprecated Since Annotation Psi . type Reference Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( descriptor . fq Name OrNull ()?. is Sub package Of ( Kotlin Built Ins . BUIL T _ INS _ PACKAGE _ FQ _ NAME ) Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . trace . report ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . DEPRECATED _ SIN CE _ K OT LIN _ OUT SIDE _ K OT LIN _ SUB PACKAGE . on ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeprecated Since Annotation Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( deprecated Annotation Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . trace . report ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . DEPRECATED _ SIN CE _ K OT LIN _ WITHOUT _ DEPRECATED . on ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeprecated Since Annotation Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( deprecated Annotation . argument Value ( Deprecated :: level . name ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . trace . report ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . DEPRECATED _ SIN CE _ K OT LIN _ WITH _ DEPRECATED _ LEVEL . on ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeprecated Since Annotation Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( deprecated Since Annotation . all Value Arguments . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . trace . report ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . DEPRECATED _ SIN CE _ K OT LIN _ WITHOUT _ ARGUMENT S . on ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeprecated Since Annotation Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠAnnotation Descriptor . get Checked Since Version ( name : ĠString ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Since Version ( name ). also Ġ{ Ġcheck Version ( it , Ġname , Ġcontext , Ġdeprecated Since Annotation Name ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġwarning Since Ġ= Ġdeprecated Since Annotation . get Checked Since Version (" warning Since ") ĊĠĠĠĠĠĠĠ Ġval Ġerror Since Ġ= Ġdeprecated Since Annotation . get Checked Since Version (" error Since ") ĊĠĠĠĠĠĠĠ Ġval Ġhidden Since Ġ= Ġdeprecated Since Annotation . get Checked Since Version (" hidden Since ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! less OrNull ( warning Since , Ġerror Since ) Ġ|| Ġ! less OrNull ( error Since , Ġhidden Since ) Ġ|| Ġ! less OrNull ( warning Since , Ġhidden Since )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . trace . report ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . DEPRECATED _ SIN CE _ K OT LIN _ WITH _ UN ORDER ED _ VERSION S . on ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeprecated Since Annotation Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠAnnotation Descriptor . check Version ( ĊĠĠĠĠĠĠĠ Ġparsed Version : ĠApi Version ?, ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġcontext : ĠDeclaration Checker Context , ĊĠĠĠĠĠĠĠ Ġreport On : ĠPsi Element ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġargument Value Ġ= Ġargument Value ( name ). safe As < StringValue >() ?. value ĊĠĠĠĠĠĠĠ Ġif Ġ( argument Value Ġ!= Ġnull Ġ&& Ġ( parsed Version Ġ== Ġnull Ġ|| Ġ! argument Value . matches ( Require Kotlin Constants . VERSION _ REGEX ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . trace . report Diagnostic Once ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . IL LEG AL _ K OT LIN _ VERSION _ STRING _ VALUE . on ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport On , Ġfq Name Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġless OrNull ( a : ĠApi Version ?, Ġb : ĠApi Version ?): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( a Ġ== Ġnull Ġ|| Ġb Ġ== Ġnull ) Ġtrue Ġelse Ġa Ġ<= Ġb Ċ } Ċ