diff --git a/idea/resources/intentionDescriptions/LambdaToAnonymousFunctionIntention/after.kt.template b/idea/resources/intentionDescriptions/LambdaToAnonymousFunctionIntention/after.kt.template new file mode 100644 index 00000000000..017a02de029 --- /dev/null +++ b/idea/resources/intentionDescriptions/LambdaToAnonymousFunctionIntention/after.kt.template @@ -0,0 +1,7 @@ +fun foo(f: () -> Int) { + f() +} + +fun main(args: String) { + foo(fun(): Int { return 1 }) +} \ No newline at end of file diff --git a/idea/resources/intentionDescriptions/LambdaToAnonymousFunctionIntention/before.kt.template b/idea/resources/intentionDescriptions/LambdaToAnonymousFunctionIntention/before.kt.template new file mode 100644 index 00000000000..b1515663e20 --- /dev/null +++ b/idea/resources/intentionDescriptions/LambdaToAnonymousFunctionIntention/before.kt.template @@ -0,0 +1,7 @@ +fun foo(f: () -> Int) { + f() +} + +fun main(args: String) { + foo { 1 } +} \ No newline at end of file diff --git a/idea/resources/intentionDescriptions/LambdaToAnonymousFunctionIntention/description.html b/idea/resources/intentionDescriptions/LambdaToAnonymousFunctionIntention/description.html new file mode 100644 index 00000000000..1073766fd29 --- /dev/null +++ b/idea/resources/intentionDescriptions/LambdaToAnonymousFunctionIntention/description.html @@ -0,0 +1,5 @@ + + +This intention converts a lambda expression into a call of an anonymous function. + + diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index d7b8ebd393d..a02ddf7aef8 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -1609,6 +1609,11 @@ Kotlin + + org.jetbrains.kotlin.idea.intentions.LambdaToAnonymousFunctionIntention + Kotlin + + Kotlin + + org.jetbrains.kotlin.idea.intentions.LambdaToAnonymousFunctionIntention + Kotlin + + Kotlin + + org.jetbrains.kotlin.idea.intentions.LambdaToAnonymousFunctionIntention + Kotlin + + Kotlin + + org.jetbrains.kotlin.idea.intentions.LambdaToAnonymousFunctionIntention + Kotlin + + Kotlin + + org.jetbrains.kotlin.idea.intentions.LambdaToAnonymousFunctionIntention + Kotlin + + Kotlin + + org.jetbrains.kotlin.idea.intentions.LambdaToAnonymousFunctionIntention + Kotlin + + ( + KtLambdaExpression::class.java, + "Convert to anonymous function", + "Convert lambda expression to anonymous function" +) { + + override fun isApplicableTo(element: KtLambdaExpression, caretOffset: Int): Boolean { + if (element.getStrictParentOfType() == null) return false + val descriptor = element.functionLiteral.descriptor as? AnonymousFunctionDescriptor ?: return false + return descriptor.valueParameters.none { it.name.isSpecial } + } + + override fun applyTo(element: KtLambdaExpression, editor: Editor?) { + val functionLiteral = element.functionLiteral + val bodyExpression = functionLiteral.bodyExpression ?: return + val descriptor = functionLiteral.descriptor as? AnonymousFunctionDescriptor ?: return + val psiFactory = KtPsiFactory(element) + + val context = element.analyze(BodyResolveMode.PARTIAL) + bodyExpression.collectDescendantsOfType().forEach { + if (it.getTargetFunctionDescriptor(context) == descriptor) it.labeledExpression?.delete() + } + + val extension = descriptor.extensionReceiverParameter?.type?.let { "$it." } ?: "" + val params = descriptor.valueParameters.joinToString { "${it.name}: ${it.type}" } + val returnType = descriptor.returnType?.let { if (it.isUnit()) "" else ": $it" } ?: "" + if (returnType.isNotEmpty()) { + val lastStatement = bodyExpression.statements.lastOrNull() + if (lastStatement != null && lastStatement !is KtReturnExpression) { + val foldableReturns = BranchedFoldingUtils.getFoldableReturns(lastStatement) + if (foldableReturns == null || foldableReturns.isEmpty()) { + lastStatement.replace(psiFactory.createExpressionByPattern("return $0", lastStatement)) + } + } + } + val anonymousFunction = element.replaced( + psiFactory.createExpressionByPattern("fun $0($1)$2 { $3 }", extension, params, returnType, bodyExpression, reformat = false) + ) as KtNamedFunction + + (anonymousFunction.parent as? KtLambdaArgument)?.also { it.moveInsideParentheses(it.analyze(BodyResolveMode.PARTIAL)) } + } +} diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/.intention b/idea/testData/intentions/lambdaToAnonymousFunction/.intention new file mode 100644 index 00000000000..e303c108828 --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/.intention @@ -0,0 +1 @@ +org.jetbrains.kotlin.idea.intentions.LambdaToAnonymousFunctionIntention \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/argument.kt b/idea/testData/intentions/lambdaToAnonymousFunction/argument.kt new file mode 100644 index 00000000000..f88e20f0718 --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/argument.kt @@ -0,0 +1,5 @@ +fun foo(f: (Int) -> String) {} + +fun test() { + foo({ "" }) +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/argument.kt.after b/idea/testData/intentions/lambdaToAnonymousFunction/argument.kt.after new file mode 100644 index 00000000000..dffa03f2729 --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/argument.kt.after @@ -0,0 +1,5 @@ +fun foo(f: (Int) -> String) {} + +fun test() { + foo(fun(it: Int): String { return "" }) +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/destructuringParameter.kt b/idea/testData/intentions/lambdaToAnonymousFunction/destructuringParameter.kt new file mode 100644 index 00000000000..371e3744f44 --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/destructuringParameter.kt @@ -0,0 +1,7 @@ +// IS_APPLICABLE: false +// WITH_RUNTIME +fun foo(f: (Pair) -> String) {} + +fun test() { + foo { (i, j) -> "" } +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/explicitParameterName.kt b/idea/testData/intentions/lambdaToAnonymousFunction/explicitParameterName.kt new file mode 100644 index 00000000000..4314a717ad6 --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/explicitParameterName.kt @@ -0,0 +1,5 @@ +fun bar(f: (Int, Int) -> String) {} + +fun test() { + bar { i, j -> "$i$j" } +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/explicitParameterName.kt.after b/idea/testData/intentions/lambdaToAnonymousFunction/explicitParameterName.kt.after new file mode 100644 index 00000000000..e4776bf141e --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/explicitParameterName.kt.after @@ -0,0 +1,5 @@ +fun bar(f: (Int, Int) -> String) {} + +fun test() { + bar(fun(i: Int, j: Int): String { return "$i$j" }) +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/extention1.kt b/idea/testData/intentions/lambdaToAnonymousFunction/extention1.kt new file mode 100644 index 00000000000..ad2bbaf208b --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/extention1.kt @@ -0,0 +1,6 @@ +class Foo +fun bar(f: Foo.() -> Unit) {} + +fun main(args: Array) { + bar {} +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/extention1.kt.after b/idea/testData/intentions/lambdaToAnonymousFunction/extention1.kt.after new file mode 100644 index 00000000000..401b6e0bb0f --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/extention1.kt.after @@ -0,0 +1,6 @@ +class Foo +fun bar(f: Foo.() -> Unit) {} + +fun main(args: Array) { + bar(fun Foo.() {}) +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/extention2.kt b/idea/testData/intentions/lambdaToAnonymousFunction/extention2.kt new file mode 100644 index 00000000000..583e491436a --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/extention2.kt @@ -0,0 +1,6 @@ +class Foo +fun baz(f: Foo.(i: Int, j: Int) -> Int) {} + +fun main(args: Array) { + baz { i, j -> i + j } +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/extention2.kt.after b/idea/testData/intentions/lambdaToAnonymousFunction/extention2.kt.after new file mode 100644 index 00000000000..c3971833087 --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/extention2.kt.after @@ -0,0 +1,6 @@ +class Foo +fun baz(f: Foo.(i: Int, j: Int) -> Int) {} + +fun main(args: Array) { + baz(fun Foo.(i: Int, j: Int): Int { return i + j }) +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/hasComment.kt b/idea/testData/intentions/lambdaToAnonymousFunction/hasComment.kt new file mode 100644 index 00000000000..eb17371a349 --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/hasComment.kt @@ -0,0 +1,9 @@ +fun foo(f: (Int) -> String) {} + +fun test() { + foo { + // comment1 + "" + // comment2 + } +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/hasComment.kt.after b/idea/testData/intentions/lambdaToAnonymousFunction/hasComment.kt.after new file mode 100644 index 00000000000..cc7bf9cd4aa --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/hasComment.kt.after @@ -0,0 +1,9 @@ +fun foo(f: (Int) -> String) {} + +fun test() { + foo(fun(it: Int): String { + // comment1 + return "" + // comment2 + }) +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn1.kt b/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn1.kt new file mode 100644 index 00000000000..db4ab19524e --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn1.kt @@ -0,0 +1,5 @@ +fun foo(f: (Int) -> String) {} + +fun test() { + foo { return@foo "$it" } +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn1.kt.after b/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn1.kt.after new file mode 100644 index 00000000000..68be908f141 --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn1.kt.after @@ -0,0 +1,5 @@ +fun foo(f: (Int) -> String) {} + +fun test() { + foo(fun(it: Int): String { return "$it" }) +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn2.kt b/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn2.kt new file mode 100644 index 00000000000..761d6fa6dca --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn2.kt @@ -0,0 +1,10 @@ +fun foo(f: (Int) -> String) {} + +fun test() { + foo { + if (it == 1) { + return@foo "1" + } + "$it" + } +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn2.kt.after b/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn2.kt.after new file mode 100644 index 00000000000..09659ab731d --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn2.kt.after @@ -0,0 +1,10 @@ +fun foo(f: (Int) -> String) {} + +fun test() { + foo(fun(it: Int): String { + if (it == 1) { + return "1" + } + return "$it" + }) +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn3.kt b/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn3.kt new file mode 100644 index 00000000000..b0c58484881 --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn3.kt @@ -0,0 +1,13 @@ +fun foo(f: (Int) -> String) {} + +fun test() { + foo { + if (it == 1) { + return@foo "1" + } else if (it == 2) { + return@foo "2" + } else { + return@foo "$it" + } + } +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn3.kt.after b/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn3.kt.after new file mode 100644 index 00000000000..edda1dfacdc --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn3.kt.after @@ -0,0 +1,13 @@ +fun foo(f: (Int) -> String) {} + +fun test() { + foo(fun(it: Int): String { + if (it == 1) { + return "1" + } else if (it == 2) { + return "2" + } else { + return "$it" + } + }) +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn4.kt b/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn4.kt new file mode 100644 index 00000000000..5cf575d9828 --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn4.kt @@ -0,0 +1,11 @@ +// WITH_RUNTIME +fun foo(f: (Int) -> String) {} + +fun test() { + foo { + listOf(1).map { + return@map 2 + } + return@foo "$it" + } +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn4.kt.after b/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn4.kt.after new file mode 100644 index 00000000000..c58e967242f --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/hasReturn4.kt.after @@ -0,0 +1,11 @@ +// WITH_RUNTIME +fun foo(f: (Int) -> String) {} + +fun test() { + foo(fun(it: Int): String { + listOf(1).map { + return@map 2 + } + return "$it" + }) +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/hasSomeStatements.kt b/idea/testData/intentions/lambdaToAnonymousFunction/hasSomeStatements.kt new file mode 100644 index 00000000000..8f15ccfbaad --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/hasSomeStatements.kt @@ -0,0 +1,8 @@ +fun foo(f: (Int) -> String) {} + +fun test() { + foo { + val b = it == 1 + if (b) "1" else "2" + } +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/hasSomeStatements.kt.after b/idea/testData/intentions/lambdaToAnonymousFunction/hasSomeStatements.kt.after new file mode 100644 index 00000000000..831d4f1ffed --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/hasSomeStatements.kt.after @@ -0,0 +1,8 @@ +fun foo(f: (Int) -> String) {} + +fun test() { + foo(fun(it: Int): String { + val b = it == 1 + return if (b) "1" else "2" + }) +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/implicitParameterName.kt b/idea/testData/intentions/lambdaToAnonymousFunction/implicitParameterName.kt new file mode 100644 index 00000000000..8a33751b3a9 --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/implicitParameterName.kt @@ -0,0 +1,5 @@ +fun foo(f: (Int) -> String) {} + +fun test() { + foo { "$it" } +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/implicitParameterName.kt.after b/idea/testData/intentions/lambdaToAnonymousFunction/implicitParameterName.kt.after new file mode 100644 index 00000000000..68be908f141 --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/implicitParameterName.kt.after @@ -0,0 +1,5 @@ +fun foo(f: (Int) -> String) {} + +fun test() { + foo(fun(it: Int): String { return "$it" }) +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/namedArgument.kt b/idea/testData/intentions/lambdaToAnonymousFunction/namedArgument.kt new file mode 100644 index 00000000000..7d0099cc358 --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/namedArgument.kt @@ -0,0 +1,5 @@ +fun baz(name: String, f: (Int) -> String) {} + +fun test() { + baz(name = "", f = { "$it" }) +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/namedArgument.kt.after b/idea/testData/intentions/lambdaToAnonymousFunction/namedArgument.kt.after new file mode 100644 index 00000000000..cfe76b06a72 --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/namedArgument.kt.after @@ -0,0 +1,5 @@ +fun baz(name: String, f: (Int) -> String) {} + +fun test() { + baz(name = "", f = fun(it: Int): String { return "$it" }) +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/noParameter.kt b/idea/testData/intentions/lambdaToAnonymousFunction/noParameter.kt new file mode 100644 index 00000000000..031f05d615e --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/noParameter.kt @@ -0,0 +1,5 @@ +fun foo(f: () -> String) {} + +fun test() { + foo { "" } +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/noParameter.kt.after b/idea/testData/intentions/lambdaToAnonymousFunction/noParameter.kt.after new file mode 100644 index 00000000000..39bac0dc598 --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/noParameter.kt.after @@ -0,0 +1,5 @@ +fun foo(f: () -> String) {} + +fun test() { + foo(fun(): String { return "" }) +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/returnUnit.kt b/idea/testData/intentions/lambdaToAnonymousFunction/returnUnit.kt new file mode 100644 index 00000000000..0079f1b10c1 --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/returnUnit.kt @@ -0,0 +1,10 @@ +fun unit(f: (Int) -> Unit) {} + +fun foo(i: Int) {} + +fun test() { + unit { + foo(it) + foo(it) + } +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/returnUnit.kt.after b/idea/testData/intentions/lambdaToAnonymousFunction/returnUnit.kt.after new file mode 100644 index 00000000000..b350eff4b22 --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/returnUnit.kt.after @@ -0,0 +1,10 @@ +fun unit(f: (Int) -> Unit) {} + +fun foo(i: Int) {} + +fun test() { + unit(fun(it: Int) { + foo(it) + foo(it) + }) +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/underscoreParameter.kt b/idea/testData/intentions/lambdaToAnonymousFunction/underscoreParameter.kt new file mode 100644 index 00000000000..536c6f02267 --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/underscoreParameter.kt @@ -0,0 +1,6 @@ +// IS_APPLICABLE: false +fun foo(f: (Int, Int) -> String) {} + +fun test() { + foo { i, _ -> "" } +} \ No newline at end of file diff --git a/idea/testData/intentions/lambdaToAnonymousFunction/variable.kt b/idea/testData/intentions/lambdaToAnonymousFunction/variable.kt new file mode 100644 index 00000000000..f15cf06de8e --- /dev/null +++ b/idea/testData/intentions/lambdaToAnonymousFunction/variable.kt @@ -0,0 +1,4 @@ +// IS_APPLICABLE: false +fun test() { + val a: (Int) -> String = { "" } +} \ No newline at end of file diff --git a/idea/testData/quickfix/removeSingleLambdaParameter/multiple.kt b/idea/testData/quickfix/removeSingleLambdaParameter/multiple.kt index 55ca2f13ab8..74e42de87c3 100644 --- a/idea/testData/quickfix/removeSingleLambdaParameter/multiple.kt +++ b/idea/testData/quickfix/removeSingleLambdaParameter/multiple.kt @@ -3,6 +3,7 @@ // ACTION: Rename to _ // ACTION: Specify explicit lambda signature // ACTION: Specify type explicitly +// ACTION: Convert to anonymous function // RUNTIME_WITH_FULL_JDK fun main() { diff --git a/idea/testData/quickfix/renameToUnderscore/lambdaParameterNoRemoveParameter.kt b/idea/testData/quickfix/renameToUnderscore/lambdaParameterNoRemoveParameter.kt index d61be95a8b0..1504c3027b2 100644 --- a/idea/testData/quickfix/renameToUnderscore/lambdaParameterNoRemoveParameter.kt +++ b/idea/testData/quickfix/renameToUnderscore/lambdaParameterNoRemoveParameter.kt @@ -2,6 +2,7 @@ // ACTION: Move lambda argument into parentheses // ACTION: Remove explicit lambda parameter types (may break code) // ACTION: Rename to _ +// ACTION: Convert to anonymous function fun foo(block: (String, Int) -> Unit) { block("", 1) diff --git a/idea/testData/quickfix/replaceWithSafeCallForScopeFunction/letWithWrongImplicitThis.kt b/idea/testData/quickfix/replaceWithSafeCallForScopeFunction/letWithWrongImplicitThis.kt index a4b33f616c0..c0554205d35 100644 --- a/idea/testData/quickfix/replaceWithSafeCallForScopeFunction/letWithWrongImplicitThis.kt +++ b/idea/testData/quickfix/replaceWithSafeCallForScopeFunction/letWithWrongImplicitThis.kt @@ -6,6 +6,7 @@ // ACTION: Replace with safe (this?.) call // ACTION: Specify explicit lambda signature // ACTION: Add return@let +// ACTION: Convert to anonymous function // ERROR: Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String? fun String?.foo(a: String?) { diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index c26c78cd899..39be8aabab3 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -9627,6 +9627,104 @@ public class IntentionTestGenerated extends AbstractIntentionTest { } } + @TestMetadata("idea/testData/intentions/lambdaToAnonymousFunction") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class LambdaToAnonymousFunction extends AbstractIntentionTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.ANY, testDataFilePath); + } + + public void testAllFilesPresentInLambdaToAnonymousFunction() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/intentions/lambdaToAnonymousFunction"), Pattern.compile("^([\\w\\-_]+)\\.(kt|kts)$"), TargetBackend.ANY, true); + } + + @TestMetadata("argument.kt") + public void testArgument() throws Exception { + runTest("idea/testData/intentions/lambdaToAnonymousFunction/argument.kt"); + } + + @TestMetadata("destructuringParameter.kt") + public void testDestructuringParameter() throws Exception { + runTest("idea/testData/intentions/lambdaToAnonymousFunction/destructuringParameter.kt"); + } + + @TestMetadata("explicitParameterName.kt") + public void testExplicitParameterName() throws Exception { + runTest("idea/testData/intentions/lambdaToAnonymousFunction/explicitParameterName.kt"); + } + + @TestMetadata("extention1.kt") + public void testExtention1() throws Exception { + runTest("idea/testData/intentions/lambdaToAnonymousFunction/extention1.kt"); + } + + @TestMetadata("extention2.kt") + public void testExtention2() throws Exception { + runTest("idea/testData/intentions/lambdaToAnonymousFunction/extention2.kt"); + } + + @TestMetadata("hasComment.kt") + public void testHasComment() throws Exception { + runTest("idea/testData/intentions/lambdaToAnonymousFunction/hasComment.kt"); + } + + @TestMetadata("hasReturn1.kt") + public void testHasReturn1() throws Exception { + runTest("idea/testData/intentions/lambdaToAnonymousFunction/hasReturn1.kt"); + } + + @TestMetadata("hasReturn2.kt") + public void testHasReturn2() throws Exception { + runTest("idea/testData/intentions/lambdaToAnonymousFunction/hasReturn2.kt"); + } + + @TestMetadata("hasReturn3.kt") + public void testHasReturn3() throws Exception { + runTest("idea/testData/intentions/lambdaToAnonymousFunction/hasReturn3.kt"); + } + + @TestMetadata("hasReturn4.kt") + public void testHasReturn4() throws Exception { + runTest("idea/testData/intentions/lambdaToAnonymousFunction/hasReturn4.kt"); + } + + @TestMetadata("hasSomeStatements.kt") + public void testHasSomeStatements() throws Exception { + runTest("idea/testData/intentions/lambdaToAnonymousFunction/hasSomeStatements.kt"); + } + + @TestMetadata("implicitParameterName.kt") + public void testImplicitParameterName() throws Exception { + runTest("idea/testData/intentions/lambdaToAnonymousFunction/implicitParameterName.kt"); + } + + @TestMetadata("namedArgument.kt") + public void testNamedArgument() throws Exception { + runTest("idea/testData/intentions/lambdaToAnonymousFunction/namedArgument.kt"); + } + + @TestMetadata("noParameter.kt") + public void testNoParameter() throws Exception { + runTest("idea/testData/intentions/lambdaToAnonymousFunction/noParameter.kt"); + } + + @TestMetadata("returnUnit.kt") + public void testReturnUnit() throws Exception { + runTest("idea/testData/intentions/lambdaToAnonymousFunction/returnUnit.kt"); + } + + @TestMetadata("underscoreParameter.kt") + public void testUnderscoreParameter() throws Exception { + runTest("idea/testData/intentions/lambdaToAnonymousFunction/underscoreParameter.kt"); + } + + @TestMetadata("variable.kt") + public void testVariable() throws Exception { + runTest("idea/testData/intentions/lambdaToAnonymousFunction/variable.kt"); + } + } + @TestMetadata("idea/testData/intentions/loopToCallChain") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)