Skip to content

Java-first annotations disappear when same property comes from multiple superclass sources on KSP2 #2833

@luanpotter

Description

@luanpotter

We are currently in the process of migrating our codebase from KSP1 to KSP2 (we are updating to Kotlin 2.2.20 + KSP 2.2.20-2.0.4).

I've noticed a behavioural difference on KSP2 w.r.t. to how getAllProperties() handles annotations coming from multiple sources from inherited properties.

I wrote a simple MRE to showcase the issue; but in essence we have:

interface HasName {
    val name: String
}

abstract class BaseEntity {
    @Column(name = "name") lateinit var name: String
}

@InspectProperties
class WithInterface : BaseEntity(), HasName

Before (with KSP1), the annotations in the properties returned by getAllProperties() would include the @Column interface as I'd expect. On KSP2, it is no longer included. As far as I can tell, this only happens if:

  • @Column is defined as a Java interface
  • the class inherits from two sources (an abstract class and an interface) that both declare the same column

Feel free to browse the complete MRE on my repo; there is a ./scripts/run.sh script to make it easier to see and play around with.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions