From f43626f57f57ac40b4367f0b30bdaee31f47d2af Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Mon, 10 Feb 2020 11:38:40 +0200 Subject: [PATCH] Refactoring --- .../jetbrains/kotlin/idea/slicer/InflowSlicer.kt | 4 +++- .../jetbrains/kotlin/idea/slicer/OutflowSlicer.kt | 2 +- .../src/org/jetbrains/kotlin/idea/slicer/Slicer.kt | 14 ++++++++++---- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/slicer/InflowSlicer.kt b/idea/src/org/jetbrains/kotlin/idea/slicer/InflowSlicer.kt index 0c862c6ed76..a7528cf8efa 100644 --- a/idea/src/org/jetbrains/kotlin/idea/slicer/InflowSlicer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/slicer/InflowSlicer.kt @@ -132,7 +132,9 @@ class InflowSlicer( argumentExpression?.passToProcessorAsValue() } - (function as? KtFunction)?.processCalls(analysisScope, includeOverriders, ::processCall) + if (function is KtFunction) { + processCalls(function, analysisScope, includeOverriders, ::processCall) + } if (parameter.valOrVarKeyword.toValVar() == KotlinValVar.Var) { processAssignments(parameter, analysisScope) diff --git a/idea/src/org/jetbrains/kotlin/idea/slicer/OutflowSlicer.kt b/idea/src/org/jetbrains/kotlin/idea/slicer/OutflowSlicer.kt index d1dc1b2c702..8dff197f73d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/slicer/OutflowSlicer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/slicer/OutflowSlicer.kt @@ -62,7 +62,7 @@ class OutflowSlicer( private fun processFunction(function: KtFunction) { if (function is KtConstructor<*> || function is KtNamedFunction && function.name != null) { - function.processCalls(analysisScope, includeOverriders = false) { usageInfo -> + processCalls(function, analysisScope, includeOverriders = false) { usageInfo -> when (val refElement = usageInfo.element) { null -> (usageInfo.reference as? LightMemberReference)?.element?.passToProcessor() is KtExpression -> { diff --git a/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt b/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt index b2e2e2c0678..fd5f7aa5609 100644 --- a/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt @@ -39,6 +39,7 @@ abstract class Slicer( abstract fun processChildren() protected val analysisScope: SearchScope = parentUsage.scope.toSearchScope() + protected val project = element.project protected class PseudocodeCache { private val computedPseudocodes = HashMap() @@ -61,14 +62,19 @@ abstract class Slicer( processor.process(KotlinSliceUsage(this, parentUsage, lambdaLevel, forcedExpressionMode)) } - protected fun KtFunction.processCalls(scope: SearchScope, includeOverriders: Boolean, usageProcessor: (UsageInfo) -> Unit) { + protected fun processCalls( + function: KtFunction, + scope: SearchScope, + includeOverriders: Boolean, + usageProcessor: (UsageInfo) -> Unit + ) { val options = KotlinFunctionFindUsagesOptions(project).apply { isSearchForTextOccurrences = false isSkipImportStatements = true - searchScope = scope.intersectWith(useScope) + searchScope = scope.intersectWith(function.useScope) } - val descriptor = unsafeResolveToDescriptor() as? CallableMemberDescriptor ?: return + val descriptor = function.unsafeResolveToDescriptor() as? CallableMemberDescriptor ?: return val superDescriptors = if (includeOverriders) descriptor.getDeepestSuperDeclarations() else @@ -119,7 +125,7 @@ abstract class Slicer( for (aDeclaration in allDeclarations) { aDeclaration.processAllExactUsages( - KotlinPropertyFindUsagesOptions(aDeclaration.project).apply { + KotlinPropertyFindUsagesOptions(project).apply { isReadAccess = kind == AccessKind.READ_ONLY || kind == AccessKind.READ_OR_WRITE isWriteAccess = kind == AccessKind.WRITE_ONLY || kind == AccessKind.WRITE_WITH_OPTIONAL_READ || kind == AccessKind.READ_OR_WRITE isReadWriteAccess = kind == AccessKind.WRITE_WITH_OPTIONAL_READ || kind == AccessKind.READ_OR_WRITE