From 9b5110b9f32391c36e807cf7048f4618b908f9c4 Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Fri, 7 Feb 2020 12:51:21 +0300 Subject: [PATCH] Refactor `RedundantSamConstructorInspection` - Does not change the behaviour --- .../RedundantSamConstructorInspection.kt | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantSamConstructorInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantSamConstructorInspection.kt index dc2400e2e96..88a5a4042c0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantSamConstructorInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantSamConstructorInspection.kt @@ -148,7 +148,7 @@ class RedundantSamConstructorInspection : AbstractKotlinInspection() { private class CallWithConvertedArguments( original: Call, - val callArgumentMapToConvert: Map + callArgumentMapToConvert: Map, ) : DelegatingCall(original) { private val newArguments: List @@ -166,26 +166,19 @@ class RedundantSamConstructorInspection : AbstractKotlinInspection() { fun samConstructorCallsToBeConverted(functionCall: KtCallExpression): Collection { val valueArguments = functionCall.valueArguments - if (valueArguments.all { !canBeSamConstructorCall(it) }) { - return emptyList() - } + if (valueArguments.none { canBeSamConstructorCall(it) }) return emptyList() val bindingContext = functionCall.analyze(BodyResolveMode.PARTIAL) val functionResolvedCall = functionCall.getResolvedCall(bindingContext) ?: return emptyList() if (!functionResolvedCall.isReallySuccess()) return emptyList() - val samConstructorCallArgumentMap = valueArguments.keysToMapExceptNulls { it.toCallExpression() }.filter { (_, call) -> + val samConstructorCallArgumentMap = valueArguments.keysToMapExceptNulls { it.toCallExpression() }.filterValues { call -> call.getResolvedCall(bindingContext)?.resultingDescriptor?.original is SamConstructorDescriptor } if (samConstructorCallArgumentMap.isEmpty()) return emptyList() - if (samConstructorCallArgumentMap.values.any { - val samValueArgument = it.samConstructorValueArgument() - val samConstructorName = (it.calleeExpression as? KtSimpleNameExpression)?.getReferencedNameAsName() - samValueArgument == null || samConstructorName == null || - samValueArgument.hasLabeledReturnPreventingConversion(samConstructorName) - }) return emptyList() + if (samConstructorCallArgumentMap.values.any(::containsLabeledReturnPreventingConversion)) return emptyList() val originalFunctionDescriptor = functionResolvedCall.resultingDescriptor.original as? FunctionDescriptor ?: return emptyList() val containingClass = originalFunctionDescriptor.containingDeclaration as? ClassDescriptor ?: return emptyList() @@ -250,6 +243,14 @@ class RedundantSamConstructorInspection : AbstractKotlinInspection() { return parametersWithSamTypeCount == samConstructorsCount } + private fun containsLabeledReturnPreventingConversion(it: KtCallExpression): Boolean { + val samValueArgument = it.samConstructorValueArgument() + val samConstructorName = (it.calleeExpression as? KtSimpleNameExpression)?.getReferencedNameAsName() + return samValueArgument == null || + samConstructorName == null || + samValueArgument.hasLabeledReturnPreventingConversion(samConstructorName) + } + private fun KtValueArgument.hasLabeledReturnPreventingConversion(samConstructorName: Name) = anyDescendantOfType { it.getLabelNameAsName() == samConstructorName } }