)]}'
{
  "commit": "c20fb9044056a65132308804f668919748a37032",
  "tree": "fb6f5ef9cbc62c3fcd411579b1b0ab74c678bc5d",
  "parents": [
    "44c9427b0585332e1e785f9803b0ad5629a263ba"
  ],
  "author": {
    "name": "Ivan Kochurkin",
    "email": "ivan.kochurkin@jetbrains.com",
    "time": "Wed Jun 24 20:49:19 2026 +0200"
  },
  "committer": {
    "name": "Ivan Kochurkin",
    "email": "ivan.kochurkin@jetbrains.com",
    "time": "Wed Jun 24 20:49:19 2026 +0200"
  },
  "message": "[Lombok] Fix MISSING_DEPENDENCY_CLASS for Lombok-generated builder types\n\nWhen a Java class uses @Builder with a custom builderMethodName, a user\ncan write a hand-crafted factory method whose return type is the\nLombok-generated builder class (e.g. TestJavaBuilder).  PSI cannot\nresolve that class because it is synthesised by Lombok at compile time\nand is absent from the Java source file.  In this situation\nJavaClassifierTypeImpl.classifier is null, causing JavaTypeConversion\nto fall into the `null` branch which creates ClassId.topLevel(…) for\nthe builder name.  The resulting ConeClassLikeType has no resolvable\nFIR symbol, so FirMissingDependencyClassChecker reports\nMISSING_DEPENDENCY_CLASS.\n\nFix by introducing FirUnresolvedJavaClassNamesProvider in the fir-jvm\nmodule — an optional FirSessionComponent that maps simple class names\nto their correct nested ClassIds.  The Lombok plugin provides\nLombokUnresolvedJavaClassNamesProvider, which implements this interface\nand registers itself in FirSession using FirUnresolvedJavaClassNamesProvider\nas the component class (via an unchecked cast in componentClass).\n\nThe alias (simpleName → nestedClassId) is registered in\nAbstractBuilderGenerator.addEntityMethods, which runs during\ngetCallableNamesForClass for the entity class.  This is guaranteed to\nexecute before the return-type enhancement of any user-defined methods\non the same class, ensuring the registry is populated in time for\nJavaTypeConversion to consult it.\n\nJavaTypeConversion.toConeKotlinTypeForFlexibleBound now looks up the\nprovider in the null-classifier case:\n  val simpleName \u003d Name.identifier(qualifiedName.substringAfterLast(\u0027.\u0027))\n  val redirectClassId \u003d session.unresolvedJavaClassNamesProvider\n      ?.findClassIdBySimpleName(simpleName)\n  val classId \u003d redirectClassId ?: ClassId.topLevel(FqName(qualifiedName))\nIf the redirect is found the resulting ConeClassLikeType carries the\nnested ClassId, FirExtensionDeclarationsSymbolProvider resolves it to\nthe Lombok-generated FirJavaClass, and no error is emitted.\n\n^KT-83329 Fixed\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7160351671a8867ff4edbac52546b82cb538f7a6",
      "old_mode": 33188,
      "old_path": "compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/FirUnresolvedJavaClassNamesProvider.kt",
      "new_id": "e2e1cd673429881673e1f22c503895ef904696ae",
      "new_mode": 33188,
      "new_path": "compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/FirUnresolvedJavaClassNamesProvider.kt"
    },
    {
      "type": "modify",
      "old_id": "151405663fa57571318de1e51d4bb98b2e71ad3c",
      "old_mode": 33188,
      "old_path": "compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/JavaTypeConversion.kt",
      "new_id": "e095b3faad655cbf8f3581f435a1220f969aa834",
      "new_mode": 33188,
      "new_path": "compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/JavaTypeConversion.kt"
    },
    {
      "type": "modify",
      "old_id": "0459359df330ea8a894bd33490f762f9a61a8ae5",
      "old_mode": 33188,
      "old_path": "plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/FirLombokJavaRegistrar.kt",
      "new_id": "8655f5b5b6b4566f55af3c1326c0f00fb4297956",
      "new_mode": 33188,
      "new_path": "plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/FirLombokJavaRegistrar.kt"
    },
    {
      "type": "modify",
      "old_id": "acab67151fd7d3decc2b432e4a6344ba657c5f74",
      "old_mode": 33188,
      "old_path": "plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/LombokUnresolvedJavaClassNamesProvider.kt",
      "new_id": "f6ff7109114b4a54e5c89c1bfe7cfe49c3acdfcf",
      "new_mode": 33188,
      "new_path": "plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/LombokUnresolvedJavaClassNamesProvider.kt"
    },
    {
      "type": "modify",
      "old_id": "4cf6bab39ac5f34083099f71ae654a3e6aafe9df",
      "old_mode": 33188,
      "old_path": "plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/generators/AbstractBuilderGenerator.kt",
      "new_id": "1a214702ab3b69c4cf6d94949e53e8d73ec14c17",
      "new_mode": 33188,
      "new_path": "plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/generators/AbstractBuilderGenerator.kt"
    }
  ]
}
