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)