Simplifiable call: support case w/out receiver, add minor enhancements
Related to KT-30501
This commit is contained in:
+6
-7
@@ -21,8 +21,7 @@ import org.jetbrains.kotlin.types.typeUtil.builtIns
|
|||||||
|
|
||||||
class SimplifiableCallInspection : AbstractKotlinInspection() {
|
class SimplifiableCallInspection : AbstractKotlinInspection() {
|
||||||
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean) =
|
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean) =
|
||||||
qualifiedExpressionVisitor(fun(expression) {
|
callExpressionVisitor(fun(callExpression) {
|
||||||
val callExpression = expression.selectorExpression as? KtCallExpression ?: return
|
|
||||||
val calleeExpression = callExpression.calleeExpression ?: return
|
val calleeExpression = callExpression.calleeExpression ?: return
|
||||||
val (conversion, resolvedCall) = callExpression.findConversionAndResolvedCall() ?: return
|
val (conversion, resolvedCall) = callExpression.findConversionAndResolvedCall() ?: return
|
||||||
if (!conversion.callChecker(resolvedCall)) return
|
if (!conversion.callChecker(resolvedCall)) return
|
||||||
@@ -30,7 +29,7 @@ class SimplifiableCallInspection : AbstractKotlinInspection() {
|
|||||||
|
|
||||||
holder.registerProblem(
|
holder.registerProblem(
|
||||||
calleeExpression,
|
calleeExpression,
|
||||||
"${conversion.fqName.shortName()} call could be simplified to $replacement",
|
"${conversion.shortName} call could be simplified to $replacement",
|
||||||
ProblemHighlightType.GENERIC_ERROR_OR_WARNING,
|
ProblemHighlightType.GENERIC_ERROR_OR_WARNING,
|
||||||
SimplifyCallFix(conversion, replacement)
|
SimplifyCallFix(conversion, replacement)
|
||||||
)
|
)
|
||||||
@@ -94,9 +93,9 @@ class SimplifiableCallInspection : AbstractKotlinInspection() {
|
|||||||
if (statement.operationToken != KtTokens.EXCLEQ && statement.operationToken != KtTokens.EXCLEQEQEQ) return null
|
if (statement.operationToken != KtTokens.EXCLEQ && statement.operationToken != KtTokens.EXCLEQEQEQ) return null
|
||||||
val left = statement.left ?: return null
|
val left = statement.left ?: return null
|
||||||
val right = statement.right ?: return null
|
val right = statement.right ?: return null
|
||||||
if (left.isNameReferenceTo(lambdaParameterName) && right.isNull()) {
|
if (left.isNameReferenceTo(lambdaParameterName) && right.isNull() ||
|
||||||
return "filterNotNull()"
|
right.isNameReferenceTo(lambdaParameterName) && left.isNull()
|
||||||
} else if (right.isNameReferenceTo(lambdaParameterName) && left.isNull()) {
|
) {
|
||||||
return "filterNotNull()"
|
return "filterNotNull()"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -116,7 +115,7 @@ class SimplifiableCallInspection : AbstractKotlinInspection() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private class SimplifyCallFix(val conversion: Conversion, val replacement: String) : LocalQuickFix {
|
private class SimplifyCallFix(val conversion: Conversion, val replacement: String) : LocalQuickFix {
|
||||||
override fun getName() = "Convert '${conversion.fqName.shortName()}' call to '$replacement'"
|
override fun getName() = "Convert '${conversion.shortName}' call to '$replacement'"
|
||||||
|
|
||||||
override fun getFamilyName() = name
|
override fun getFamilyName() = name
|
||||||
|
|
||||||
|
|||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun List<Any>.test() {
|
||||||
|
<caret>filter { it is String }
|
||||||
|
}
|
||||||
Vendored
+4
@@ -0,0 +1,4 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
fun List<Any>.test() {
|
||||||
|
filterIsInstance<String>()
|
||||||
|
}
|
||||||
+5
@@ -1108,6 +1108,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
|
|||||||
runTest("idea/testData/inspectionsLocal/collections/simplifiableCall/explicitLambdaParameter.kt");
|
runTest("idea/testData/inspectionsLocal/collections/simplifiableCall/explicitLambdaParameter.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("filterIsInstanceReceiver.kt")
|
||||||
|
public void testFilterIsInstanceReceiver() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/collections/simplifiableCall/filterIsInstanceReceiver.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("filterIsInstanceSimple.kt")
|
@TestMetadata("filterIsInstanceSimple.kt")
|
||||||
public void testFilterIsInstanceSimple() throws Exception {
|
public void testFilterIsInstanceSimple() throws Exception {
|
||||||
runTest("idea/testData/inspectionsLocal/collections/simplifiableCall/filterIsInstanceSimple.kt");
|
runTest("idea/testData/inspectionsLocal/collections/simplifiableCall/filterIsInstanceSimple.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user