Use new utility method for getting lexical scope

It's expected that for call expressing some nearest parent will have
lexical scope written in binding context. Under this circumstances it's
refactoring.
This commit is contained in:
Nikolay Krasko
2017-03-09 15:42:06 +03:00
parent 0a7a73d4be
commit 6d9b519bb2
@@ -25,7 +25,6 @@ import com.intellij.openapi.project.DumbService
import com.intellij.openapi.roots.libraries.LibraryUtil
import com.intellij.openapi.ui.MessageType
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.search.searches.ReferencesSearch
import com.intellij.psi.util.PsiTreeUtil
@@ -47,16 +46,15 @@ import org.jetbrains.kotlin.idea.debugger.evaluate.KotlinDebuggerCaches.Computed
import org.jetbrains.kotlin.idea.search.usagesSearch.isImportUsage
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
import org.jetbrains.kotlin.idea.util.application.runReadAction
import org.jetbrains.kotlin.idea.util.getResolutionScope
import org.jetbrains.kotlin.load.java.JvmAbi
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.parents
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
import org.jetbrains.kotlin.resolve.inline.InlineUtil
import org.jetbrains.kotlin.resolve.scopes.LexicalScope
import org.jetbrains.kotlin.resolve.scopes.LexicalScopeKind
import org.jetbrains.kotlin.resolve.source.getPsi
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
@@ -222,7 +220,7 @@ class DebuggerClassNameProvider(val myDebugProcess: DebugProcess, val scopes: Li
}?.first
} ?: return emptyList()
val lexicalScope = runReadAction { inlineCall.getExpressionResolutionScope(context) } ?: return emptyList()
val lexicalScope = runReadAction { inlineCall.getResolutionScope(context) } ?: return emptyList()
val baseClassName = classNamesForPosition(inlineCall, false).firstOrNull() ?: return emptyList()
val resolvedCall = runReadAction { inlineCall.getResolvedCall(context) } ?: return emptyList()
@@ -431,11 +429,4 @@ private fun String.substringIndex(): String {
return substringBeforeLast("$") + "$"
}
return this
}
private fun KtCallExpression.getExpressionResolutionScope(bindingContext: BindingContext): LexicalScope? {
return parentsWithSelf
.takeWhile { it !is KtClassBody && it !is KtBlockExpression && it !is PsiFile }
.map { if (it is KtElement) bindingContext[BindingContext.LEXICAL_SCOPE, it] else null }
.firstOrNull { it != null }
}