From 37417f791950bb5fe484edfa8894f26e113fca27 Mon Sep 17 00:00:00 2001 From: Ilmir Usmanov Date: Thu, 26 Oct 2023 04:31:15 +0200 Subject: [PATCH] KAPT: Use reflection to access code, changed in JDK 21 #KT-57389 Fixed --- .../org/jetbrains/kotlin/kapt3/base/javac/KaptJavaLog.kt | 5 ++++- .../kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt | 8 ++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/javac/KaptJavaLog.kt b/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/javac/KaptJavaLog.kt index af5d6c2aa00..fb88bc87e0c 100644 --- a/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/javac/KaptJavaLog.kt +++ b/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/javac/KaptJavaLog.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.kapt3.base.javac import com.sun.tools.javac.tree.JCTree +import com.sun.tools.javac.tree.JCTree.JCImport import com.sun.tools.javac.util.* import com.sun.tools.javac.util.JCDiagnostic.DiagnosticType import org.jetbrains.kotlin.kapt3.base.KaptContext @@ -55,6 +56,8 @@ class KaptJavaLog( private val _reportedDiagnostics = mutableListOf() + private val jcImportQualidField = JCImport::class.java.declaredFields.single { it.name == "qualid" } + override fun flush(kind: WriterKind?) { super.flush(kind) @@ -197,7 +200,7 @@ class KaptJavaLog( val visitor = object : JCTree.Visitor() { override fun visitImport(that: JCTree.JCImport) { super.visitImport(that) - if (!found) that.qualid.accept(this) + if (!found) (jcImportQualidField.get(that) as JCTree).accept(this) } override fun visitSelect(that: JCTree.JCFieldAccess) { diff --git a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt index be22d213ca5..2c8222cd1e3 100644 --- a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt +++ b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt @@ -142,6 +142,8 @@ class ClassFileToSourceStubConverter(val kaptContext: KaptContextForStubGenerati private var done = false + private val treeMakerImportMethod = TreeMaker::class.java.declaredMethods.single { it.name == "Import" } + fun convert(): List { if (kaptContext.logger.isVerbose) { dumpDeclarationOrigins() @@ -313,13 +315,15 @@ class ClassFileToSourceStubConverter(val kaptContext: KaptContextForStubGenerati val importedExpr = treeMaker.FqName(importedFqName.asString()) imports += if (importDirective.isAllUnder) { - treeMaker.Import(treeMaker.Select(importedExpr, treeMaker.nameTable.names.asterisk), false) + treeMakerImportMethod.invoke( + treeMaker, treeMaker.Select(importedExpr, treeMaker.nameTable.names.asterisk), false + ) as JCImport } else { if (!importedShortNames.add(importedFqName.shortName().asString())) { continue } - treeMaker.Import(importedExpr, false) + treeMakerImportMethod.invoke(treeMaker, importedExpr, false) as JCImport } }