From bf8de487a0552d0fce81e67d0fc2802bff0e8304 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 10 Dec 2020 09:36:54 +0300 Subject: [PATCH] CliTrace: rewrite smart cast-vulnerable piece of code --- .../jetbrains/kotlin/cli/jvm/compiler/CliTrace.kt | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliTrace.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliTrace.kt index a7142eaf1e0..16a55f3edfb 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliTrace.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliTrace.kt @@ -77,15 +77,23 @@ open class CliBindingTrace @TestOnly constructor() : BindingTraceContext() { this.kotlinCodeAnalyzer = kotlinCodeAnalyzer } + @Suppress("UNCHECKED_CAST") override fun get(slice: ReadOnlySlice, key: K): V? { val value = super.get(slice, key) if (value == null) { - if (BindingContext.FUNCTION === slice || BindingContext.VARIABLE === slice) { - if (key is KtDeclaration) { + if (key is KtDeclaration) { + // NB: intentional code duplication, see https://youtrack.jetbrains.com/issue/KT-43296 + if (BindingContext.FUNCTION === slice) { if (!KtPsiUtil.isLocal(key)) { kotlinCodeAnalyzer!!.resolveToDescriptor(key) - return super.get(slice, key) + return super.get(slice, key) as V? + } + } + if (BindingContext.VARIABLE === slice) { + if (!KtPsiUtil.isLocal(key)) { + kotlinCodeAnalyzer!!.resolveToDescriptor(key) + return super.get(slice, key) as V? } } }