Files
kotlin-fork/plugins/lombok
Nikita Bobko 8f79e833a8 Drop all redundant kotlin-reflect, kotlin-reflect-api dependencies
Review: https://jetbrains.team/p/kt/reviews/6753

All redundant I managed to find, of course.

Why: I'm going to process all reflect dependencies in the next commits.
Cleanup reflect dependency before processing.

They are redundant because:
1. if `compileOnly` then compilation didn't break after dropping the
   dependency
2. if `test*` then tests didn't break after dropping the dependency.
3. `analysis/analysis-api-fir/analysis-api-fir-generator/build.gradle.kts`
   `compiler/fir/checkers/checkers-component-generator/build.gradle.kts`
   Drop `implementation(project(":kotlin-reflect-api"))` because the
   module already depends on
   `implementation(project(":kotlin-reflect"))`
4. `compiler/daemon/daemon-client/build.gradle.kts`. Drop `runtimeOnly`
   because after dropping `compileOnly` compilation didn't break (so
   `runtimeOnly` looks suspicious). Less safe than 1-3
2022-08-22 15:42:57 +02:00
..

Experimental Kotlin plugin to support Lombok annotations in the same compilation unit with kotlin

Features support:

[~] Config files

  • Basic support - single config file. Need to be specified explicitly by plugin config
  • Import other config files
  • Config files discovery and bubbling

[~] @Getter/@Setter

  • Basic support
  • Class-level
  • @Accessors config support: chain and fluent
  • [~] Config support
    • lombok.getter.noIsPrefix
    • lombok.accessors.fluent
    • lombok.accessors.chain
    • lombok.accessors.prefix
    • lombok.noArgsConstructor.extraPrivate (probably we don't need to support it - it is private after all)
    • lombok.copyableAnnotations (probably don't need it)
  • Copy annotations
  • Strip defined prefixes - in config and @Accessors
  • Skip generation with AccessLevel.NONE
  • Strip 'is' prefix for boolean fields

[~] @With

  • Basic support
  • Copy annotations (probably don't need it, because annotations don't affect members' resolution)

[x] @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor

  • @NoArgsConstructor
  • @AllArgsConstructor
  • @RequiredArgsConstructor

[x] @Data

[~] @Value

  • generate getters and constructors
  • make class final, make fields private and final

[ ] @Builder - will not be supported in the current prototype.

Other todos:

  • Generic classes
  • Actually run compiled code
  • Don't generate members that already exist (if having a duplicate is a problem)
  • Gradle integration (as subplugin or just a way to enable lombok support)
  • Gradle plugin integration test
  • Maven integration (as subplugin or just a way to enable lombok support)
  • Nullability from annotations. Check if it is inherited from variable definition