From 725c066c785abc3a94e189b984178bb4f05a78ec Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 6 Jan 2023 19:20:09 +0100 Subject: [PATCH] Kapt: dump declaration origins produced by backend This will be useful in diagnosing behavior differences between JVM and JVM_IR versions of kapt. --- .../jvm/diagnostics/JvmDeclarationOrigin.kt | 3 +++ .../stubs/ClassFileToSourceStubConverter.kt | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/JvmDeclarationOrigin.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/JvmDeclarationOrigin.kt index bfddd6715c1..80963ed883e 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/JvmDeclarationOrigin.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/diagnostics/JvmDeclarationOrigin.kt @@ -23,6 +23,9 @@ class JvmDeclarationOrigin( val descriptor: DeclarationDescriptor?, val parametersForJvmOverload: List? = null ) { + override fun toString(): String = + if (this == NO_ORIGIN) "NO_ORIGIN" else "origin=$originKind element=${element?.javaClass?.simpleName} descriptor=$descriptor" + companion object { @JvmField val NO_ORIGIN: JvmDeclarationOrigin = JvmDeclarationOrigin(OTHER, null, null) 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 a2edd7bcd1c..b281bb6f7aa 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,10 @@ class ClassFileToSourceStubConverter(val kaptContext: KaptContextForStubGenerati private var done = false fun convert(): List { + if (kaptContext.logger.isVerbose) { + dumpDeclarationOrigins() + } + if (done) error(ClassFileToSourceStubConverter::class.java.simpleName + " can convert classes only once") done = true @@ -154,6 +158,19 @@ class ClassFileToSourceStubConverter(val kaptContext: KaptContextForStubGenerati return stubs } + private fun dumpDeclarationOrigins() { + kaptContext.logger.info("Declaration origins:") + for ((key, value) in kaptContext.origins) { + val element = when (key) { + is ClassNode -> "class ${key.name}" + is FieldNode -> "field ${key.name}:${key.desc}" + is MethodNode -> "method ${key.name}${key.desc}" + else -> key.javaClass.toString() + } + kaptContext.logger.info("$element -> $value") + } + } + private fun generateNonExistentClass(): JCCompilationUnit { val nonExistentClass = treeMaker.ClassDef( treeMaker.Modifiers((Flags.PUBLIC or Flags.FINAL).toLong()),