The source declaration (sourceDeclaration
property) holds the reference to actual type declaration such as class or interface.
Konsist API allows for verify properties of such type e.g.:
- Check if property type implements certain interface
- Check if function return type name ends with
Repository
- Check if parent class is annotated with given annotation
Every declaration that is using another type such as property, function, parent exposes sourceDeclaration
property.
Let's look at few examples:
Check if type of current
property is has a type which is a class declaration heaving internal
modifier:
// Code Snippet
internal class Engine
val current: Engine? = null
// Konsist test
Konsist
.scopeFromProject()
.properties()
.assertTrue {
it
.type
?.sourceDeclaration
?.asClassDeclaration()
?.hasInternalModifier // true
}
{% hint style="info" %}
Note that explicit casting (asXDeclaration
) has to be used to access specific properties of the declaration.
{% endhint %}
Check if function return type is a basic Kotlin type:
// Code Snippet
internal class Engine {
fun start(): Boolean
}
// Konsist test
Konsist
.scopeFromProject()
.classes()
.functions()
.assertTrue {
it.returnType?
.sourceDeclaration
?.isKotlinBasicType
}
// Code Snippet
internal class Engine {
fun start(): Boolean
}
// Konsist test
Konsist
.scopeFromProject()
.classes()
.parents()
.assertTrue {
it
.sourceDeclaration
?.isInterface
}