Konsist
GitHubSlack (kotlinlang)Twitter
  • 🚀GETTING STARTED
    • What is Konsist?
    • Getting Started
      • Add Konsist Dependency
      • Create First Konsist Test - Declaration Check
      • Create Secound Konsist Test - Architectural Check
    • Articles & Videos
  • ✅WRITING TESTS
    • Create The Scope
    • Declaration Filtering
    • Declaration Assertion
    • Architecture Assertion
    • Suppress Konsist Test
  • ✏️VERYFYING CODEBASE
    • Verify Classes
    • Verify Interfaces
    • Verify Functions
    • Verify Properties
    • Verify Generics
    • Verify Source Declarations
  • 📗FEATURES
    • Add Konsist Existing To Project (Baseline)
    • Debug Konsist Test
    • Declaration
    • Declaration Vs Property
    • Compiler Type Inference
    • Package Wildcard
    • Declaration References
    • Indirect Parents
    • Kotest Support
  • 🔍INSPIRATION
    • Starter Projects
    • Snippets
      • General Snippets
      • Android Snippets
      • Spring Snippets
      • Test Snippets
      • JUnit Snippets
      • Kotest Snippets
      • Architecture Snippets
      • Clean Architecture Snippets
      • Kotlin Serialization Snippets
      • Library Snippets
      • Generic Types Snippets
  • 🎓ADVANCED
    • Isolate Konsist Tests
    • Enable Full Command Line Logging
    • Dynamic Konsist Tests
      • Explicit Test Names
    • When Konsist API Is Not Enough
    • Additional JUnit5 Setup
    • Why There Are No Pre-defined Rules?
    • Konsist Snapshots
  • ❓HELP
    • Getting Help
    • Known Issues
      • java.lang.OutOfMemoryError: Java heap space
    • Compatibility
  • ℹ️OTHER
    • Changelog
    • Project Status
    • Contributing
    • Contributors
    • Assets And Logos
    • Open Source Licenses
    • Sponsor Konsist
Powered by GitBook
On this page
  • Declaration Site
  • Use Site
Edit on GitHub
Export as PDF
  1. FEATURES

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")
    }
PreviousDeclarationNextCompiler Type Inference

Last updated 1 year ago

📗