diff --git a/idea/src/org/jetbrains/kotlin/idea/slicer/InflowSlicer.kt b/idea/src/org/jetbrains/kotlin/idea/slicer/InflowSlicer.kt index 879abf87cbf..3ade489e873 100644 --- a/idea/src/org/jetbrains/kotlin/idea/slicer/InflowSlicer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/slicer/InflowSlicer.kt @@ -100,14 +100,14 @@ class InflowSlicer( && function.hasModifier(KtTokens.OPERATOR_KEYWORD) ) { - ReferencesSearch.search(function, parentUsage.scope.toSearchScope()) + ReferencesSearch.search(function, analysisScope) .filterIsInstance() .forEach { (it.element.parent as? KtProperty)?.processPropertyAssignments() } } val parameterDescriptor = parameter.resolveToParameterDescriptorIfAny(BodyResolveMode.FULL) ?: return - (function as? KtFunction)?.processCalls(parentUsage.scope.toSearchScope(), includeOverriders) body@{ + (function as? KtFunction)?.processCalls(analysisScope, includeOverriders) body@{ val refElement = it.element ?: return@body val refParent = refElement.parent @@ -132,7 +132,7 @@ class InflowSlicer( } if (parameter.valOrVarKeyword.toValVar() == KotlinValVar.Var) { - processAssignments(parameter, parentUsage.scope.toSearchScope()) + processAssignments(parameter, analysisScope) } } @@ -201,7 +201,6 @@ class InflowSlicer( } private fun KtProperty.processPropertyAssignments() { - val analysisScope = parentUsage.scope.toSearchScope() val accessSearchScope = if (isVar) { analysisScope } else { @@ -272,7 +271,7 @@ class InflowSlicer( private fun PsiElement.passDeclarationToProcessorWithOverriders() { passToProcessor() - HierarchySearchRequest(this, parentUsage.scope.toSearchScope()) + HierarchySearchRequest(this, analysisScope) .searchOverriders() .forEach { it.namedUnwrappedElement?.passToProcessor() } } diff --git a/idea/src/org/jetbrains/kotlin/idea/slicer/OutflowSlicer.kt b/idea/src/org/jetbrains/kotlin/idea/slicer/OutflowSlicer.kt index 29a1b7da2cb..e176144950f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/slicer/OutflowSlicer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/slicer/OutflowSlicer.kt @@ -41,7 +41,7 @@ class OutflowSlicer( val accessKind = if (withDereferences) AccessKind.READ_OR_WRITE else AccessKind.READ_ONLY processVariableAccesses( variable, - parentUsage.scope.toSearchScope(), + analysisScope, accessKind ) body@{ val refElement = it.element @@ -62,12 +62,12 @@ class OutflowSlicer( private fun processFunction(function: KtFunction) { if (function is KtConstructor<*> || function is KtNamedFunction && function.name != null) { - function.processCalls(this.parentUsage.scope.toSearchScope(), includeOverriders = false) { + function.processCalls(analysisScope, includeOverriders = false) { when (val refElement = it.element) { null -> (it.reference as? LightMemberReference)?.element?.passToProcessor() is KtExpression -> { refElement.getCallElementForExactCallee()?.passToProcessor() - refElement.getCallableReferenceForExactCallee()?.passToProcessor(this.parentUsage.lambdaLevel + 1) + refElement.getCallableReferenceForExactCallee()?.passToProcessor(parentUsage.lambdaLevel + 1) } else -> refElement.passToProcessor() } @@ -88,8 +88,8 @@ class OutflowSlicer( when (instr) { is WriteValueInstruction -> instr.target.accessedDescriptor?.originalSource?.getPsi()?.passToProcessor() is CallInstruction -> { - if (this.parentUsage.lambdaLevel > 0 && instr.receiverValues[pseudoValue] != null) { - instr.element.passToProcessor(this.parentUsage.lambdaLevel - 1) + if (parentUsage.lambdaLevel > 0 && instr.receiverValues[pseudoValue] != null) { + instr.element.passToProcessor(parentUsage.lambdaLevel - 1) } else { instr.arguments[pseudoValue]?.originalSource?.getPsi()?.passToProcessor() } diff --git a/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt b/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt index ce3651a77b6..10e041704e5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt @@ -38,6 +38,8 @@ abstract class Slicer( ) { abstract fun processChildren() + protected val analysisScope = parentUsage.scope.toSearchScope() + protected class PseudocodeCache { private val computedPseudocodes = HashMap()