JavaMapForEachInspection: do not report when lambda parameter is destructuring declaration
#KT-34511 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
8857827dce
commit
afc680d5c9
@@ -32,7 +32,8 @@ class JavaMapForEachInspection : AbstractApplicabilityBasedInspection<KtDotQuali
|
|||||||
if (calleeExpression.text != "forEach") return false
|
if (calleeExpression.text != "forEach") return false
|
||||||
|
|
||||||
val lambda = callExpression.lambda() ?: return false
|
val lambda = callExpression.lambda() ?: return false
|
||||||
if (lambda.valueParameters.size != 2) return false
|
val lambdaParameters = lambda.valueParameters
|
||||||
|
if (lambdaParameters.size != 2 || lambdaParameters.any { it.destructuringDeclaration != null }) return false
|
||||||
|
|
||||||
val context = element.analyze(BodyResolveMode.PARTIAL)
|
val context = element.analyze(BodyResolveMode.PARTIAL)
|
||||||
if (!element.receiverExpression.getType(context).isMap(DefaultBuiltIns.Instance)) return false
|
if (!element.receiverExpression.getType(context).isMap(DefaultBuiltIns.Instance)) return false
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
// PROBLEM: none
|
||||||
|
// RUNTIME_WITH_FULL_JDK
|
||||||
|
fun test(map: Map<Int, String>) {
|
||||||
|
val mapOfPairs = mapOf<Pair<Int, Int>, Int>()
|
||||||
|
mapOfPairs.<caret>forEach { (first, second), value ->
|
||||||
|
println(first)
|
||||||
|
println(second)
|
||||||
|
println(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
+5
@@ -5066,6 +5066,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/testData/inspectionsLocal/javaMapForEach"), Pattern.compile("^([\\w\\-_]+)\\.(kt|kts)$"), null, true);
|
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/testData/inspectionsLocal/javaMapForEach"), Pattern.compile("^([\\w\\-_]+)\\.(kt|kts)$"), null, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("destructuringDeclaration.kt")
|
||||||
|
public void testDestructuringDeclaration() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/javaMapForEach/destructuringDeclaration.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("java.kt")
|
@TestMetadata("java.kt")
|
||||||
public void testJava() throws Exception {
|
public void testJava() throws Exception {
|
||||||
runTest("idea/testData/inspectionsLocal/javaMapForEach/java.kt");
|
runTest("idea/testData/inspectionsLocal/javaMapForEach/java.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user