Skip to content

Commit 8293c8f

Browse files
committed
KAPT: Use reflection to access code, changed in JDK 21
#KT-57389 Fixed
1 parent e459a6d commit 8293c8f

File tree

3 files changed

+17
-5
lines changed

3 files changed

+17
-5
lines changed

plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/javac/KaptJavaLog.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package org.jetbrains.kotlin.kapt3.base.javac
77

88
import com.sun.tools.javac.tree.JCTree
9+
import com.sun.tools.javac.tree.JCTree.JCImport
910
import com.sun.tools.javac.util.*
1011
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticType
1112
import org.jetbrains.kotlin.kapt3.base.KaptContext
@@ -55,6 +56,8 @@ class KaptJavaLog(
5556

5657
private val _reportedDiagnostics = mutableListOf<JCDiagnostic>()
5758

59+
private val jcImportQualidField = JCImport::class.java.declaredFields.single { it.name == "qualid" }
60+
5861
override fun flush(kind: WriterKind?) {
5962
super.flush(kind)
6063

@@ -197,7 +200,7 @@ class KaptJavaLog(
197200
val visitor = object : JCTree.Visitor() {
198201
override fun visitImport(that: JCTree.JCImport) {
199202
super.visitImport(that)
200-
if (!found) that.qualid.accept(this)
203+
if (!found) (jcImportQualidField.get(that) as JCTree).accept(this)
201204
}
202205

203206
override fun visitSelect(that: JCTree.JCFieldAccess) {

plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt

+6-2
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ class ClassFileToSourceStubConverter(val kaptContext: KaptContextForStubGenerati
144144

145145
private var done = false
146146

147+
private val treeMakerImportMethod = TreeMaker::class.java.declaredMethods.single { it.name == "Import" }
148+
147149
fun convert(): List<KaptStub> {
148150
if (kaptContext.logger.isVerbose) {
149151
dumpDeclarationOrigins()
@@ -315,13 +317,15 @@ class ClassFileToSourceStubConverter(val kaptContext: KaptContextForStubGenerati
315317
val importedExpr = treeMaker.FqName(importedFqName.asString())
316318

317319
imports += if (importDirective.isAllUnder) {
318-
treeMaker.Import(treeMaker.Select(importedExpr, treeMaker.nameTable.names.asterisk), false)
320+
treeMakerImportMethod.invoke(
321+
treeMaker, treeMaker.Select(importedExpr, treeMaker.nameTable.names.asterisk), false
322+
) as JCImport
319323
} else {
320324
if (!importedShortNames.add(importedFqName.shortName().asString())) {
321325
continue
322326
}
323327

324-
treeMaker.Import(importedExpr, false)
328+
treeMakerImportMethod.invoke(treeMaker, importedExpr, false) as JCImport
325329
}
326330
}
327331

plugins/kapt4/src/org/jetbrains/kotlin/kapt4/Kapt4StubGenerator.kt

+7-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import com.sun.tools.javac.code.TypeTag
1515
import com.sun.tools.javac.parser.Tokens
1616
import com.sun.tools.javac.tree.JCTree
1717
import com.sun.tools.javac.tree.JCTree.*
18+
import com.sun.tools.javac.tree.TreeMaker
1819
import kotlinx.kapt.KaptIgnored
1920
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
2021
import org.jetbrains.kotlin.analysis.api.symbols.KtClassOrObjectSymbol
@@ -84,6 +85,8 @@ internal class Kapt4StubGenerator {
8485
private val JAVA_KEYWORDS = Tokens.TokenKind.values()
8586
.filter { JAVA_KEYWORD_FILTER_REGEX.matches(it.toString().orEmpty()) }
8687
.mapTo(hashSetOf(), Any::toString)
88+
89+
private val treeMakerImportMethod = TreeMaker::class.java.declaredMethods.single { it.name == "Import" }
8790
}
8891

8992
private val strictMode = options[KaptFlag.STRICT]
@@ -260,13 +263,15 @@ internal class Kapt4StubGenerator {
260263
if (!isValidQualifiedName(importedFqName)) continue
261264
val importedExpr = treeMaker.FqName(importedFqName.asString())
262265
imports += if (importDirective.isAllUnder) {
263-
treeMaker.Import(treeMaker.Select(importedExpr, treeMaker.nameTable.names.asterisk), false)
266+
treeMakerImportMethod.invoke(
267+
treeMaker, treeMaker.Select(importedExpr, treeMaker.nameTable.names.asterisk), false
268+
) as JCImport
264269
} else {
265270
if (!importedShortNames.add(importedFqName.shortName().asString())) {
266271
continue
267272
}
268273

269-
treeMaker.Import(importedExpr, false)
274+
treeMakerImportMethod.invoke(treeMaker, importedExpr, false) as JCImport
270275
}
271276
}
272277

0 commit comments

Comments
 (0)