Links
Comment on page

Declaration Vs Property

Some code constructs can be represented as declarations (declaration-site) and as properties (use-site).

Declaration Site

Consider this annotation class:
annotation class CustomLogger
The above code represents the declaration of the CustomLogger annotation class, the place in the code where this annotation is declared (declaration-site). This declaration can be retrieved by filtering KoScope declarations...
koScope
.classes()
.withAnnotationModifier()
For example, such declaration can be used to check if annotations reside in a desired package:
// Every annotation class must reside in the "annotation" package
koScope
.classes()
.withAnnotationModifier()
.assertTrue { it.resideInPackage("..annotation..") }

Use Site

Now consider this function:
@CustomLogger
fun logHello() {
println("Hello")
}
The above code also contains CustomLogger annotation. However, this time code represents the place in the code where the annotation is used (use-site). Such annotations can be accessed using the annotations property:
koScope
.functions()
.annotations
Such properties can be used to check if the function annotated with CustomLogger annotation has the correct name prefix:
// Every function with a name starting with "log" is annotated with CustomLogger
koScope
.functions()
.withAllAnnotations("CustomLogger")
.assertTrue {
it.hasNameStartingWith("log")
}