/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠThe ĠD agger ĠAuthors . Ċ Ġ* Ċ Ġ* Ġ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 Ġdagger . lint Ċ Ċ import Ġcom . android . tools . lint . checks . infrastructure . Lint Detector Test Ċ import Ġcom . android . tools . lint . detector . api . Detector Ċ import Ġcom . android . tools . lint . detector . api . Issue Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . JUnit 4 Ċ Ċ @ Suppress (" Un stable Api Usage ") Ċ @ RunWith ( JUnit 4 :: class ) Ċ class ĠD agger Kotlin Issue Detector Test Ġ: ĠL int Detector Test () Ġ{ ĊĊĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġval Ġjavax Inject Stub s Ġ= Ġkotlin ( ĊĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġpackage Ġjavax . inject ĊĊĠĠĠĠĠĠĠ Ġannotation Ġclass ĠInject ĊĠĠĠĠĠĠĠ Ġannotation Ġclass ĠQual ifier ĊĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ). indent ed () ĊĊĠĠĠ Ġprivate Ġval Ġdagger Stub s Ġ= Ġkotlin ( ĊĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġpackage Ġdagger ĊĊĠĠĠĠĠĠĠ Ġannotation Ġclass ĠProvides ĊĠĠĠĠĠĠĠ Ġannotation Ġclass ĠModule ĊĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ). indent ed () ĊĊĠĠĠ Ġ// ĠFor Ġsome Ġreason Ġin ĠB azel Ġthe Ġstdlib Ġdependency Ġon Ġthe Ġclasspath Ġisn 't Ġvisible Ġto Ġthe ĊĠĠĠ Ġ// ĠL int Test Task , Ġso Ġwe Ġjust Ġinclude Ġit Ġourselves Ġhere Ġfor Ġnow . ĊĠĠĠ Ġprivate Ġval Ġj vm Static Stub s Ġ= Ġkotlin ( ĊĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġpackage Ġkotlin . jvm ĊĊĠĠĠĠĠĠĠ Ġannotation Ġclass ĠJ vm Static ĊĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ). indent ed () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Detector (): ĠDetector Ġ= ĠD agger Kotlin Issue Detector () ĊĊĠ Ġoverride Ġfun Ġget Issues (): ĠList < Issue > Ġ= ĠD agger Kotlin Issue Detector . issues ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġsimple S moke Test For Qual ifiers And Providers () Ġ{ ĊĠĠĠ Ġlint () ĊĠĠĠĠĠ Ġ. allow Missing Sdk () ĊĠĠĠĠĠ Ġ. files ( ĊĠĠĠĠĠĠĠ Ġjavax Inject Stub s , ĊĠĠĠĠĠĠĠ Ġdagger Stub s , ĊĠĠĠĠĠĠĠ Ġj vm Static Stub s , ĊĠĠĠĠĠĠĠ Ġkotlin ( ĊĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġpackage Ġfoo ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġjavax . inject . Inject ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġjavax . inject . Qualifier ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġkotlin . jvm . Jvm Static ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġdagger . Provides ĊĠĠĠĠĠĠĠĠĠ Ġimport Ġdagger . Module ĊĊĠĠĠĠĠĠĠĠĠ Ġ@ Qualifier ĊĠĠĠĠĠĠĠĠĠ Ġannotation Ġclass ĠMy Qualifier ĊĊĠĠĠĠĠĠĠĠĠ Ġclass ĠInject ed Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġshould Ġfail Ġbecause Ġof Ġ`: field ` ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Inject ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ field : My Qualifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġprop : ĠString ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġfine ! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Inject ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ My Qualifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġprop 2 : ĠString ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġ@ Module ĊĠĠĠĠĠĠĠĠĠ Ġobject ĠObject Module Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġshould Ġfail Ġbecause Ġit Ġuses Ġ`@ Jvm Static ` ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Provides ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġprovide Foo (): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġfine ! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Provides ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġprovide Bar (): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġ@ Module ĊĠĠĠĠĠĠĠĠĠ Ġclass ĠClass Module Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġshould Ġfail Ġbecause Ġthe Ġcompanion Ġobject Ġis Ġpart Ġof ĠClass Module , Ġso Ġthis Ġis Ġunnecessary . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Provides ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġprovide B az (): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġ@ Module ĊĠĠĠĠĠĠĠĠĠ Ġclass ĠClass Module Qualified Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġshould Ġfail Ġbecause Ġthe Ġcompanion Ġobject Ġis Ġpart Ġof ĠClass Module , Ġso Ġthis Ġis Ġunnecessary . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġspecifically Ġtests Ġa Ġfully Ġqualified Ġannotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ kotlin . jvm . Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Provides ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġprovide B az (): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġ@ Module ĊĠĠĠĠĠĠĠĠĠ Ġclass ĠClass Module 2 Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġshould Ġfail Ġbecause Ġthe Ġcompanion Ġobject Ġis Ġpart Ġof ĠClass Module ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Module ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Provides ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġprovide B az (): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġ@ Module ĊĠĠĠĠĠĠĠĠĠ Ġclass ĠClass Module 2 Qualified Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġshould Ġfail Ġbecause Ġthe Ġcompanion Ġobject Ġis Ġpart Ġof ĠClass Module ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġspecifically Ġtests Ġa Ġfully Ġqualified Ġannotation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ d agger . Module ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Provides ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġprovide B az (): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġcorrect Ġas Ġof ĠD agger Ġ 2 . 2 6 ! ĊĠĠĠĠĠĠĠĠĠ Ġ@ Module ĊĠĠĠĠĠĠĠĠĠ Ġclass ĠClass Module 3 Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Provides ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġprovide B az (): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġclass ĠClass Module 4 Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġshould Ġfail Ġbecause Ġthis Ġshould Ġbe Ġextracted Ġto Ġa Ġstandalone Ġobject . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Module ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Provides ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġprovide B az (): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġ). indent ed () ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ. allow Compilation Errors ( false ) ĊĠĠĠĠĠ Ġ. run () ĊĠĠĠĠĠ Ġ. expect ( ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġsrc / foo / My Qualifier . kt : 1 4 : ĠWarning : ĠRed undant Ġ' field :' Ġused Ġfor ĠD agger Ġqualifier Ġannotation . Ġ[ Field Site Target On Qualifier Annotation ] ĊĠĠĠĠĠĠĠĠĠ Ġ@ field : My Qualifier ĊĠĠĠĠĠĠĠĠĠ Ġ ~~~~~~~~~~~~~~~~ ~~ ĊĠĠĠĠĠĠĠ Ġsrc / foo / My Qualifier . kt : 2 6 : ĠWarning : Ġ@ Jvm Static Ġused Ġfor Ġ@ Provides Ġfunction Ġin Ġan Ġobject Ġclass Ġ[ Jvm Static Provides In Object Detector ] ĊĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠĠĠ Ġ ~~~~~~~~ ~~ ĊĠĠĠĠĠĠĠ Ġsrc / foo / My Qualifier . kt : 4 3 : ĠWarning : Ġ@ Jvm Static Ġused Ġfor Ġ@ Provides Ġfunction Ġin Ġan Ġobject Ġclass Ġ[ Jvm Static Provides In Object Detector ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ ~~~~~~~~ ~~ ĊĠĠĠĠĠĠĠ Ġsrc / foo / My Qualifier . kt : 5 6 : ĠWarning : Ġ@ Jvm Static Ġused Ġfor Ġ@ Provides Ġfunction Ġin Ġan Ġobject Ġclass Ġ[ Jvm Static Provides In Object Detector ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ kotlin . jvm . Jvm Static ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ ~~~~~~~~~~~~~~~~ ~~~~ ~ ĊĠĠĠĠĠĠĠ Ġsrc / foo / My Qualifier . kt : 6 6 : ĠWarning : ĠModule Ġcompanion Ġobjects Ġshould Ġnot Ġbe Ġannotated Ġwith Ġ@ Module . Ġ[ Module Companion Objects ] ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġshould Ġfail Ġbecause Ġthe Ġcompanion Ġobject Ġis Ġpart Ġof ĠClass Module ĊĠĠĠĠĠĠĠĠĠ Ġ^ ĊĠĠĠĠĠĠĠ Ġsrc / foo / My Qualifier . kt : 7 8 : ĠWarning : ĠModule Ġcompanion Ġobjects Ġshould Ġnot Ġbe Ġannotated Ġwith Ġ@ Module . Ġ[ Module Companion Objects ] ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġshould Ġfail Ġbecause Ġthe Ġcompanion Ġobject Ġis Ġpart Ġof ĠClass Module ĊĠĠĠĠĠĠĠĠĠ Ġ^ ĊĠĠĠĠĠĠĠ Ġsrc / foo / My Qualifier . kt : 1 0 1 : ĠWarning : ĠModule Ġcompanion Ġobjects Ġshould Ġnot Ġbe Ġannotated Ġwith Ġ@ Module . Ġ[ Module Companion Objects ] ĊĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġshould Ġfail Ġbecause Ġthis Ġshould Ġbe Ġextracted Ġto Ġa Ġstandalone Ġobject . ĊĠĠĠĠĠĠĠĠĠ Ġ^ ĊĠĠĠĠĠĠĠĠ 0 Ġerrors , Ġ 7 Ġwarnings ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ. expect Fix D iffs ( ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ ĠFix Ġfor Ġsrc / foo / My Qualifier . kt Ġline Ġ 1 4 : ĠRemove Ġ' field : ': ĊĠĠĠĠĠĠĠ Ġ@@ Ġ- 1 4 Ġ+ 1 4 ĊĠĠĠĠĠĠĠ Ġ- ĠĠ Ġ@ field : My Qualifier ĊĠĠĠĠĠĠĠ Ġ+ ĠĠ Ġ@ My Qualifier ĊĠĠĠĠĠĠĠ ĠFix Ġfor Ġsrc / foo / My Qualifier . kt Ġline Ġ 2 6 : ĠRemove Ġ@ Jvm Static : ĊĠĠĠĠĠĠĠ Ġ@@ Ġ- 2 6 Ġ+ 2 6 ĊĠĠĠĠĠĠĠ Ġ- ĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ+ ĠĠĊĠĠĠĠĠĠĠ ĠFix Ġfor Ġsrc / foo / My Qualifier . kt Ġline Ġ 4 3 : ĠRemove Ġ@ Jvm Static : ĊĠĠĠĠĠĠĠ Ġ@@ Ġ- 4 3 Ġ+ 4 3 ĊĠĠĠĠĠĠĠ Ġ- ĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ+ ĠĠĠĠĊĠĠĠĠĠĠĠ ĠFix Ġfor Ġsrc / foo / My Qualifier . kt Ġline Ġ 5 6 : ĠRemove Ġ@ Jvm Static : ĊĠĠĠĠĠĠĠ Ġ@@ Ġ- 5 6 Ġ+ 5 6 ĊĠĠĠĠĠĠĠ Ġ- ĠĠĠĠ Ġ@ kotlin . jvm . Jvm Static ĊĠĠĠĠĠĠĠ Ġ+ ĠĠĠĠĊĠĠĠĠĠĠĠ ĠFix Ġfor Ġsrc / foo / My Qualifier . kt Ġline Ġ 6 6 : ĠRemove Ġ@ Module : ĊĠĠĠĠĠĠĠ Ġ@@ Ġ- 6 7 Ġ+ 6 7 ĊĠĠĠĠĠĠĠ Ġ- ĠĠ Ġ@ Module ĊĠĠĠĠĠĠĠ Ġ+ ĠĠĊĠĠĠĠĠĠĠ ĠFix Ġfor Ġsrc / foo / My Qualifier . kt Ġline Ġ 7 8 : ĠRemove Ġ@ Module : ĊĠĠĠĠĠĠĠ Ġ@@ Ġ- 8 0 Ġ+ 8 0 ĊĠĠĠĠĠĠĠ Ġ- ĠĠ Ġ@ d agger . Module ĊĠĠĠĠĠĠĠ Ġ+ ĠĠĊĠĠĠĠĠĠĠ ĠFix Ġfor Ġsrc / foo / My Qualifier . kt Ġline Ġ 1 0 1 : ĠRemove Ġ@ Module : ĊĠĠĠĠĠĠĠ Ġ@@ Ġ- 1 0 2 Ġ+ 1 0 2 ĊĠĠĠĠĠĠĠ Ġ- ĠĠ Ġ@ Module ĊĠĠĠĠĠĠĠ Ġ+ ĠĠĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠ Ġ) ĊĠ Ġ} Ċ } Ċ