Development
Kora plugin¶
Kora Support is a community plugin for IntelliJ IDEA by dsudomoin. It helps trace dependency injection and move between configuration files and the code that consumes them. It supports Java and Kotlin, including the Kotlin K2 IDE mode.
Dependency injection navigation¶
The plugin adds gutter icons next to injection parameters and providers. Use these icons to answer both “where does this dependency come from?” and “which components receive this provider?”
| Location | Navigation |
|---|---|
A constructor parameter in a @Component class |
Matching provider classes or factory methods |
| A factory method parameter in a Kora module/application context | Providers for that parameter |
A @Component or @Repository declaration |
Injection sites that consume the provided type |
| A factory method declaration | Injection sites that consume its return type |
For example, for a constructor parameter such as OrderService(OrderRepository repository), click the gutter icon
beside repository to inspect matching repository providers. From the provider declaration, use its gutter icon to navigate back to consumers.
When several targets exist, the plugin offers a selection popup.
Provider discovery includes factory methods in @KoraApp, @Module, @KoraSubmodule, and @Generated contexts,
as well as inherited module declarations. Resolution considers assignable types, generic arguments, @Tag, tag meta-annotations,
and @Tag.Any. It unwraps All<T> and ValueOf<T> when looking for the underlying dependency.
The resolver also recognizes selected annotation-generated providers: ConfigValueExtractor<T>, JsonReader<T>, and JsonWriter<T>
can lead to the annotated source type rather than requiring a hand-written provider.
Configuration navigation¶
Configuration support works in both directions:
- From a config interface method or Kotlin data-class property associated with
@ConfigSource, click its gutter icon to find the corresponding key. - From a YAML or HOCON key, use Go to Declaration to navigate to the config type/member or an annotation that refers to that path.
- From a supported annotation's string value, use Go to Declaration to locate its configuration entry.
The default Go to Declaration shortcuts are Ctrl+B on Windows/Linux and Cmd+B on macOS.
Navigation works in .yaml, .yml, and .conf project files. Enable the HOCON IDE plugin for .conf support.
For example:
The batchSize() gutter icon can navigate to orders.batch-size; Go to Declaration on that YAML key can return to the Java method.
The resolver handles nested config types, camelCase/kebab-case member names, and map value types with dynamic key segments.
Annotation values and configuration paths¶
| Annotation value | Configuration path searched |
|---|---|
@Retry("name") |
resilient.retry.name |
@CircuitBreaker("name") |
resilient.circuitbreaker.name |
@Timeout("name") |
resilient.timeout.name |
@Fallback("name") |
resilient.fallback.name |
@Cacheable("name"), @CachePut("name"), @CacheInvalidate("name") |
cache.caffeine.name and cache.redis.name |
@HttpClient(configPath = "orders") |
httpClient.orders |
@KafkaListener("messaging.orders") |
messaging.orders, exactly as specified |
@ScheduleAtFixedRate(config = "scheduling.cleanup") |
scheduling.cleanup, exactly as specified |
@ScheduleWithFixedDelay, @ScheduleOnce, @ScheduleWithCron |
The config attribute's path, exactly as specified |
Scheduling navigation uses the complete config value; it does not automatically prepend scheduling..
Config-to-code navigation can also find annotation consumers when selecting a child key beneath an annotation's configured path.
YAML completion¶
Invoke Basic Completion while editing a YAML key. The plugin suggests configuration path segments derived from
@ConfigSource declarations and registered annotation prefixes, such as resilient, cache, and httpClient.
Under a partially written path, it suggests the next recognized segment.
Path completion is available in YAML; HOCON support provides navigation.
Inspections¶
Configure the plugin's inspections under Settings / Preferences → Editor → Inspections → Kora Framework.
| Inspection | Default | Behavior |
|---|---|---|
| Missing Kora DI provider | Enabled; weak warning | Marks an injection parameter when the IDE resolver finds no provider. Empty All<T> collections are allowed and skipped. |
| Unknown Kora config key | Disabled; weak warning | Marks YAML keys not recognized through config declarations, annotation mappings, or known framework prefixes. |
The unknown-key inspection skips known framework areas such as httpServer, database, logging, and tracing.
Annotation processors validate the application graph during compilation.