JVM IR: extract JvmIrDeclarationOrigin
This commit is contained in:
-1
@@ -19,7 +19,6 @@ enum class JvmDeclarationOriginKind {
|
|||||||
SYNTHETIC, // this means that there's no proper descriptor for this jvm declaration,
|
SYNTHETIC, // this means that there's no proper descriptor for this jvm declaration,
|
||||||
COLLECTION_STUB,
|
COLLECTION_STUB,
|
||||||
AUGMENTED_BUILTIN_API,
|
AUGMENTED_BUILTIN_API,
|
||||||
ERASED_INLINE_CLASS,
|
|
||||||
UNBOX_METHOD_OF_INLINE_CLASS,
|
UNBOX_METHOD_OF_INLINE_CLASS,
|
||||||
JVM_OVERLOADS,
|
JVM_OVERLOADS,
|
||||||
INLINE_VERSION_OF_SUSPEND_FUN,
|
INLINE_VERSION_OF_SUSPEND_FUN,
|
||||||
|
|||||||
+3
-4
@@ -3,6 +3,8 @@
|
|||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@file:Suppress("FunctionName")
|
||||||
|
|
||||||
package org.jetbrains.kotlin.resolve.jvm.diagnostics
|
package org.jetbrains.kotlin.resolve.jvm.diagnostics
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
@@ -17,7 +19,7 @@ enum class MemberKind { FIELD, METHOD }
|
|||||||
|
|
||||||
data class RawSignature(val name: String, val desc: String, val kind: MemberKind)
|
data class RawSignature(val name: String, val desc: String, val kind: MemberKind)
|
||||||
|
|
||||||
class JvmDeclarationOrigin(
|
open class JvmDeclarationOrigin(
|
||||||
val originKind: JvmDeclarationOriginKind,
|
val originKind: JvmDeclarationOriginKind,
|
||||||
val element: PsiElement?,
|
val element: PsiElement?,
|
||||||
val descriptor: DeclarationDescriptor?,
|
val descriptor: DeclarationDescriptor?,
|
||||||
@@ -80,8 +82,5 @@ val CollectionStub = JvmDeclarationOrigin(COLLECTION_STUB, null, null)
|
|||||||
fun AugmentedBuiltInApi(descriptor: CallableDescriptor): JvmDeclarationOrigin =
|
fun AugmentedBuiltInApi(descriptor: CallableDescriptor): JvmDeclarationOrigin =
|
||||||
JvmDeclarationOrigin(AUGMENTED_BUILTIN_API, null, descriptor)
|
JvmDeclarationOrigin(AUGMENTED_BUILTIN_API, null, descriptor)
|
||||||
|
|
||||||
fun ErasedInlineClassOrigin(element: PsiElement?, descriptor: ClassDescriptor): JvmDeclarationOrigin =
|
|
||||||
JvmDeclarationOrigin(ERASED_INLINE_CLASS, element, descriptor)
|
|
||||||
|
|
||||||
fun UnboxMethodOfInlineClass(descriptor: FunctionDescriptor): JvmDeclarationOrigin =
|
fun UnboxMethodOfInlineClass(descriptor: FunctionDescriptor): JvmDeclarationOrigin =
|
||||||
JvmDeclarationOrigin(UNBOX_METHOD_OF_INLINE_CLASS, null, descriptor)
|
JvmDeclarationOrigin(UNBOX_METHOD_OF_INLINE_CLASS, null, descriptor)
|
||||||
|
|||||||
+8
-6
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.backend.common.psi.PsiSourceManager
|
|||||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||||
import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin
|
import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.backend.jvm.MultifileFacadeFileEntry
|
import org.jetbrains.kotlin.backend.jvm.MultifileFacadeFileEntry
|
||||||
|
import org.jetbrains.kotlin.backend.jvm.extensions.JvmIrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.backend.jvm.ir.*
|
import org.jetbrains.kotlin.backend.jvm.ir.*
|
||||||
import org.jetbrains.kotlin.backend.jvm.mapping.IrTypeMapper
|
import org.jetbrains.kotlin.backend.jvm.mapping.IrTypeMapper
|
||||||
import org.jetbrains.kotlin.backend.jvm.mapping.MethodSignatureMapper
|
import org.jetbrains.kotlin.backend.jvm.mapping.MethodSignatureMapper
|
||||||
@@ -33,7 +34,6 @@ import org.jetbrains.kotlin.descriptors.DescriptorVisibility
|
|||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.ir.builders.declarations.addFunction
|
import org.jetbrains.kotlin.ir.builders.declarations.addFunction
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.descriptors.toIrBasedDescriptor
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConst
|
import org.jetbrains.kotlin.ir.expressions.IrConst
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
@@ -59,7 +59,9 @@ import org.jetbrains.kotlin.psi.KtClassOrObject
|
|||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.KtPropertyDelegate
|
import org.jetbrains.kotlin.psi.KtPropertyDelegate
|
||||||
import org.jetbrains.kotlin.resolve.jvm.checkers.JvmSimpleNameBacktickChecker
|
import org.jetbrains.kotlin.resolve.jvm.checkers.JvmSimpleNameBacktickChecker
|
||||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.*
|
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind
|
||||||
|
import org.jetbrains.kotlin.resolve.jvm.diagnostics.MemberKind
|
||||||
|
import org.jetbrains.kotlin.resolve.jvm.diagnostics.RawSignature
|
||||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmClassSignature
|
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmClassSignature
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||||
import org.jetbrains.org.objectweb.asm.*
|
import org.jetbrains.org.objectweb.asm.*
|
||||||
@@ -525,17 +527,17 @@ class ClassCodegen private constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val IrDeclaration.descriptorOrigin: JvmDeclarationOrigin
|
private val IrDeclaration.descriptorOrigin: JvmIrDeclarationOrigin
|
||||||
get() {
|
get() {
|
||||||
val psiElement = findPsiElementForDeclarationOrigin()
|
val psiElement = findPsiElementForDeclarationOrigin()
|
||||||
return when {
|
return when {
|
||||||
origin == IrDeclarationOrigin.FILE_CLASS ->
|
origin == IrDeclarationOrigin.FILE_CLASS ->
|
||||||
JvmDeclarationOrigin(JvmDeclarationOriginKind.PACKAGE_PART, psiElement, toIrBasedDescriptor())
|
JvmIrDeclarationOrigin(JvmDeclarationOriginKind.PACKAGE_PART, psiElement, this)
|
||||||
(this is IrSimpleFunction && isSuspend && isEffectivelyInlineOnly()) ||
|
(this is IrSimpleFunction && isSuspend && isEffectivelyInlineOnly()) ||
|
||||||
origin == JvmLoweredDeclarationOrigin.FOR_INLINE_STATE_MACHINE_TEMPLATE ||
|
origin == JvmLoweredDeclarationOrigin.FOR_INLINE_STATE_MACHINE_TEMPLATE ||
|
||||||
origin == JvmLoweredDeclarationOrigin.FOR_INLINE_STATE_MACHINE_TEMPLATE_CAPTURES_CROSSINLINE ->
|
origin == JvmLoweredDeclarationOrigin.FOR_INLINE_STATE_MACHINE_TEMPLATE_CAPTURES_CROSSINLINE ->
|
||||||
JvmDeclarationOrigin(JvmDeclarationOriginKind.INLINE_VERSION_OF_SUSPEND_FUN, psiElement, toIrBasedDescriptor())
|
JvmIrDeclarationOrigin(JvmDeclarationOriginKind.INLINE_VERSION_OF_SUSPEND_FUN, psiElement, this)
|
||||||
else -> OtherOrigin(psiElement, toIrBasedDescriptor())
|
else -> JvmIrDeclarationOrigin(JvmDeclarationOriginKind.OTHER, psiElement, this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+18
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.backend.jvm.extensions
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||||
|
import org.jetbrains.kotlin.ir.descriptors.toIrBasedDescriptor
|
||||||
|
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind
|
||||||
|
|
||||||
|
class JvmIrDeclarationOrigin(
|
||||||
|
originKind: JvmDeclarationOriginKind,
|
||||||
|
element: PsiElement?,
|
||||||
|
val declaration: IrDeclaration?,
|
||||||
|
) : JvmDeclarationOrigin(originKind, element, declaration?.toIrBasedDescriptor(), null)
|
||||||
Reference in New Issue
Block a user