JVM IR: Implement LookupLocation in IrSourceCompilerForInline

This is used when compiling calls to inline functions with a different
@JvmName for incremental compilation.
This commit is contained in:
Steven Schäfer
2020-02-04 15:07:02 +01:00
committed by Alexander Udalov
parent 3278451b07
commit 76f8109ff6
5 changed files with 25 additions and 9 deletions

View File

@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.backend.jvm.codegen
import com.intellij.openapi.util.TextRange
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import org.jetbrains.kotlin.backend.common.CodegenUtil
@@ -13,7 +14,6 @@ import org.jetbrains.kotlin.backend.jvm.lower.getOrCreateSuspendFunctionViewIfNe
import org.jetbrains.kotlin.codegen.BaseExpressionCodegen
import org.jetbrains.kotlin.codegen.ClassBuilder
import org.jetbrains.kotlin.codegen.OwnerKind
import org.jetbrains.kotlin.codegen.coroutines.INVOKE_SUSPEND_METHOD_NAME
import org.jetbrains.kotlin.codegen.inline.*
import org.jetbrains.kotlin.codegen.inline.coroutines.FOR_INLINE_SUFFIX
import org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings
@@ -21,15 +21,20 @@ import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithSource
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils
import org.jetbrains.kotlin.incremental.components.LocationInfo
import org.jetbrains.kotlin.incremental.components.LookupLocation
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.incremental.components.Position
import org.jetbrains.kotlin.ir.declarations.IrAttributeContainer
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.util.functions
import org.jetbrains.kotlin.ir.util.isSuspend
import org.jetbrains.kotlin.ir.util.parentAsClass
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.doNotAnalyze
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm.SUSPENSION_POINT_INSIDE_MONITOR
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
@@ -49,9 +54,24 @@ class IrSourceCompilerForInline(
private val data: BlockInfo
) : SourceCompilerForInline {
//TODO: KotlinLookupLocation(callElement)
override val lookupLocation: LookupLocation
get() = NoLookupLocation.FROM_BACKEND
get() = object : LookupLocation {
override val location: LocationInfo?
get() {
val ktFile = codegen.classCodegen.context.psiSourceManager.getKtFile(codegen.irFunction.fileParent)
?.takeUnless { it.doNotAnalyze != null } ?: return null
return object : LocationInfo {
override val filePath = ktFile.virtualFilePath
override val position: Position
get() = DiagnosticUtils.getLineAndColumnInPsiFile(
ktFile,
TextRange(callElement.startOffset, callElement.endOffset)
).let { Position(it.line, it.column) }
}
}
}
override val callElementText: String
get() = ir2string(callElement)

View File

@@ -1 +0,0 @@
// IGNORE_BACKEND: JVM_IR

View File

@@ -1 +0,0 @@
// IGNORE_BACKEND: JVM_IR

View File

@@ -1 +0,0 @@
// IGNORE_BACKEND: JVM_IR