Refactoring
This commit is contained in:
@@ -132,7 +132,9 @@ class InflowSlicer(
|
|||||||
argumentExpression?.passToProcessorAsValue()
|
argumentExpression?.passToProcessorAsValue()
|
||||||
}
|
}
|
||||||
|
|
||||||
(function as? KtFunction)?.processCalls(analysisScope, includeOverriders, ::processCall)
|
if (function is KtFunction) {
|
||||||
|
processCalls(function, analysisScope, includeOverriders, ::processCall)
|
||||||
|
}
|
||||||
|
|
||||||
if (parameter.valOrVarKeyword.toValVar() == KotlinValVar.Var) {
|
if (parameter.valOrVarKeyword.toValVar() == KotlinValVar.Var) {
|
||||||
processAssignments(parameter, analysisScope)
|
processAssignments(parameter, analysisScope)
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ class OutflowSlicer(
|
|||||||
|
|
||||||
private fun processFunction(function: KtFunction) {
|
private fun processFunction(function: KtFunction) {
|
||||||
if (function is KtConstructor<*> || function is KtNamedFunction && function.name != null) {
|
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) {
|
when (val refElement = usageInfo.element) {
|
||||||
null -> (usageInfo.reference as? LightMemberReference)?.element?.passToProcessor()
|
null -> (usageInfo.reference as? LightMemberReference)?.element?.passToProcessor()
|
||||||
is KtExpression -> {
|
is KtExpression -> {
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ abstract class Slicer(
|
|||||||
abstract fun processChildren()
|
abstract fun processChildren()
|
||||||
|
|
||||||
protected val analysisScope: SearchScope = parentUsage.scope.toSearchScope()
|
protected val analysisScope: SearchScope = parentUsage.scope.toSearchScope()
|
||||||
|
protected val project = element.project
|
||||||
|
|
||||||
protected class PseudocodeCache {
|
protected class PseudocodeCache {
|
||||||
private val computedPseudocodes = HashMap<KtElement, Pseudocode>()
|
private val computedPseudocodes = HashMap<KtElement, Pseudocode>()
|
||||||
@@ -61,14 +62,19 @@ abstract class Slicer(
|
|||||||
processor.process(KotlinSliceUsage(this, parentUsage, lambdaLevel, forcedExpressionMode))
|
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 {
|
val options = KotlinFunctionFindUsagesOptions(project).apply {
|
||||||
isSearchForTextOccurrences = false
|
isSearchForTextOccurrences = false
|
||||||
isSkipImportStatements = true
|
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)
|
val superDescriptors = if (includeOverriders)
|
||||||
descriptor.getDeepestSuperDeclarations()
|
descriptor.getDeepestSuperDeclarations()
|
||||||
else
|
else
|
||||||
@@ -119,7 +125,7 @@ abstract class Slicer(
|
|||||||
|
|
||||||
for (aDeclaration in allDeclarations) {
|
for (aDeclaration in allDeclarations) {
|
||||||
aDeclaration.processAllExactUsages(
|
aDeclaration.processAllExactUsages(
|
||||||
KotlinPropertyFindUsagesOptions(aDeclaration.project).apply {
|
KotlinPropertyFindUsagesOptions(project).apply {
|
||||||
isReadAccess = kind == AccessKind.READ_ONLY || kind == AccessKind.READ_OR_WRITE
|
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
|
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
|
isReadWriteAccess = kind == AccessKind.WRITE_WITH_OPTIONAL_READ || kind == AccessKind.READ_OR_WRITE
|
||||||
|
|||||||
Reference in New Issue
Block a user