From 1109348b6d4b06403e93624d4ca08f901a9bec11 Mon Sep 17 00:00:00 2001 From: pyos Date: Thu, 27 May 2021 18:39:49 +0200 Subject: [PATCH] JVM: remove lookupLocation from SourceCompilerForInline --- .../inline/PsiSourceCompilerForInline.kt | 6 ++-- .../codegen/inline/SourceCompilerForInline.kt | 12 +++---- .../jvm/codegen/IrSourceCompilerForInline.kt | 34 +++++++------------ 3 files changed, 19 insertions(+), 33 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/PsiSourceCompilerForInline.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/PsiSourceCompilerForInline.kt index fbf1cc89c07..d50b28dae6a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/PsiSourceCompilerForInline.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/PsiSourceCompilerForInline.kt @@ -54,8 +54,6 @@ class PsiSourceCompilerForInline( additionalInnerClasses ) as MethodContext - override val lookupLocation = KotlinLookupLocation(callElement) - override val callElementText: String by lazy { callElement.text } override val callsiteFile by lazy { callElement.containingFile } @@ -247,7 +245,9 @@ class PsiSourceCompilerForInline( val asmMethod = if (callDefault) mapDefault() else jvmSignature.asmMethod if (asmMethod.name != functionDescriptor.name.asString()) { - trackLookup(DescriptorUtils.getFqNameSafe(functionDescriptor.containingDeclaration), asmMethod.name) // ? + KotlinLookupLocation(callElement).location?.let { + state.trackLookup(DescriptorUtils.getFqNameSafe(functionDescriptor.containingDeclaration), asmMethod.name, it) + } } val directMember = getDirectMemberAndCallableFromObject() diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SourceCompilerForInline.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SourceCompilerForInline.kt index 04ca767f055..f51abc496ec 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SourceCompilerForInline.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SourceCompilerForInline.kt @@ -14,7 +14,7 @@ import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.incremental.components.LookupLocation +import org.jetbrains.kotlin.incremental.components.LocationInfo import org.jetbrains.kotlin.incremental.components.Position import org.jetbrains.kotlin.incremental.components.ScopeKind import org.jetbrains.kotlin.name.ClassId @@ -30,8 +30,6 @@ interface SourceCompilerForInline { val callElement: Any - val lookupLocation: LookupLocation - val callElementText: String val callsiteFile: PsiFile? @@ -68,13 +66,11 @@ interface SourceCompilerForInline { fun reportSuspensionPointInsideMonitor(stackTraceElement: String) } -fun SourceCompilerForInline.trackLookup(container: FqName, functionName: String) { - val lookupTracker = state.configuration.get(CommonConfigurationKeys.LOOKUP_TRACKER) ?: return - val location = lookupLocation.location ?: return - val position = if (lookupTracker.requiresPosition) location.position else Position.NO_POSITION +fun GenerationState.trackLookup(container: FqName, functionName: String, location: LocationInfo) { + val lookupTracker = configuration.get(CommonConfigurationKeys.LOOKUP_TRACKER) ?: return lookupTracker.record( location.filePath, - position, + if (lookupTracker.requiresPosition) location.position else Position.NO_POSITION, container.asString(), ScopeKind.CLASSIFIER, functionName diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrSourceCompilerForInline.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrSourceCompilerForInline.kt index 6c9e4115bfd..127c60d029c 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrSourceCompilerForInline.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/IrSourceCompilerForInline.kt @@ -19,7 +19,6 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor 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.Position import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.* @@ -46,26 +45,6 @@ class IrSourceCompilerForInline( internal val codegen: ExpressionCodegen, private val data: BlockInfo ) : SourceCompilerForInline { - - override val lookupLocation: LookupLocation - get() = object : LookupLocation { - override val location: LocationInfo? - get() { - val ktFile = codegen.irFunction.fileParent.getKtFile() - ?.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) @@ -110,7 +89,18 @@ class IrSourceCompilerForInline( return it } if (jvmSignature.asmMethod.name != callee.name.asString()) { - trackLookup(callee.parentAsClass.kotlinFqName, jvmSignature.asmMethod.name) // ? + val ktFile = codegen.irFunction.fileParent.getKtFile() + if (ktFile != null && ktFile.doNotAnalyze == null) { + state.trackLookup(callee.parentAsClass.kotlinFqName, jvmSignature.asmMethod.name, 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) } + }) + } } callee.parentClassId?.let { return loadCompiledInlineFunction(it, jvmSignature.asmMethod, callee.isSuspend, callee.hasMangledReturnType, state)