From f2c7b6b8c4d2f0245dd9d5056c838432a01f4d69 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Thu, 28 Mar 2019 00:12:35 +0900 Subject: [PATCH] Convert to anonymous object: don't remove type arguments #KT-30208 Fixed --- .../LambdaToAnonymousFunctionIntention.kt | 16 ++++++++++++++-- .../SamConversionToAnonymousObjectIntention.kt | 10 ++++++++-- .../typeArgument.1.java | 3 +++ .../typeArgument.1.java.after | 3 +++ .../typeArgument.kt | 1 + .../typeArgument.kt.after | 5 +++++ .../convertToAnonymousObject/typeArgument.kt | 6 ++++++ .../typeArgument.kt.after | 10 ++++++++++ .../idea/intentions/IntentionTestGenerated.java | 5 +++++ .../idea/quickfix/QuickFixTestGenerated.java | 5 +++++ 10 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 idea/testData/intentions/samConversionToAnonymousObject/typeArgument.1.java create mode 100644 idea/testData/intentions/samConversionToAnonymousObject/typeArgument.1.java.after create mode 100644 idea/testData/intentions/samConversionToAnonymousObject/typeArgument.kt create mode 100644 idea/testData/intentions/samConversionToAnonymousObject/typeArgument.kt.after create mode 100644 idea/testData/quickfix/convertToAnonymousObject/typeArgument.kt create mode 100644 idea/testData/quickfix/convertToAnonymousObject/typeArgument.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/LambdaToAnonymousFunctionIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/LambdaToAnonymousFunctionIntention.kt index 2ac14eb8ed2..08a662adc34 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/LambdaToAnonymousFunctionIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/LambdaToAnonymousFunctionIntention.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.resolve.bindingContextUtil.getTargetFunctionDescriptor import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.isFlexible +import org.jetbrains.kotlin.types.typeUtil.isTypeParameter import org.jetbrains.kotlin.types.typeUtil.isUnit import org.jetbrains.kotlin.types.typeUtil.makeNotNullable @@ -54,6 +55,7 @@ class LambdaToAnonymousFunctionIntention : SelfTargetingIntention = emptyMap(), replaceElement: (KtNamedFunction) -> KtExpression = { lambda.replaced(it) } ): KtExpression? { val functionLiteral = lambda.functionLiteral @@ -76,7 +78,12 @@ class LambdaToAnonymousFunctionIntention : SelfTargetingIntention { + U foo(T x); +} \ No newline at end of file diff --git a/idea/testData/intentions/samConversionToAnonymousObject/typeArgument.1.java.after b/idea/testData/intentions/samConversionToAnonymousObject/typeArgument.1.java.after new file mode 100644 index 00000000000..ad5af42f392 --- /dev/null +++ b/idea/testData/intentions/samConversionToAnonymousObject/typeArgument.1.java.after @@ -0,0 +1,3 @@ +public interface A { + U foo(T x); +} \ No newline at end of file diff --git a/idea/testData/intentions/samConversionToAnonymousObject/typeArgument.kt b/idea/testData/intentions/samConversionToAnonymousObject/typeArgument.kt new file mode 100644 index 00000000000..f5e4fecfc1d --- /dev/null +++ b/idea/testData/intentions/samConversionToAnonymousObject/typeArgument.kt @@ -0,0 +1 @@ +val a = A { "" } \ No newline at end of file diff --git a/idea/testData/intentions/samConversionToAnonymousObject/typeArgument.kt.after b/idea/testData/intentions/samConversionToAnonymousObject/typeArgument.kt.after new file mode 100644 index 00000000000..75a18c30a2f --- /dev/null +++ b/idea/testData/intentions/samConversionToAnonymousObject/typeArgument.kt.after @@ -0,0 +1,5 @@ +val a = object : A { + override fun foo(it: Int): String { + return "" + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/convertToAnonymousObject/typeArgument.kt b/idea/testData/quickfix/convertToAnonymousObject/typeArgument.kt new file mode 100644 index 00000000000..69a55656767 --- /dev/null +++ b/idea/testData/quickfix/convertToAnonymousObject/typeArgument.kt @@ -0,0 +1,6 @@ +// "Convert to anonymous object" "true" +interface B { + fun bar(x: T): U +} + +val b = B { "" } \ No newline at end of file diff --git a/idea/testData/quickfix/convertToAnonymousObject/typeArgument.kt.after b/idea/testData/quickfix/convertToAnonymousObject/typeArgument.kt.after new file mode 100644 index 00000000000..90a3726b895 --- /dev/null +++ b/idea/testData/quickfix/convertToAnonymousObject/typeArgument.kt.after @@ -0,0 +1,10 @@ +// "Convert to anonymous object" "true" +interface B { + fun bar(x: T): U +} + +val b = object : B { + override fun bar(x: Int): String { + return "" + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index b9aed83d542..e5d7e68f16b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -16178,6 +16178,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/samConversionToAnonymousObject/simple3.kt"); } + @TestMetadata("typeArgument.kt") + public void testTypeArgument() throws Exception { + runTest("idea/testData/intentions/samConversionToAnonymousObject/typeArgument.kt"); + } + @TestMetadata("usedSameFunction.kt") public void testUsedSameFunction() throws Exception { runTest("idea/testData/intentions/samConversionToAnonymousObject/usedSameFunction.kt"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 444d1b25469..579d5b03872 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -2499,6 +2499,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/convertToAnonymousObject/simple.kt"); } + @TestMetadata("typeArgument.kt") + public void testTypeArgument() throws Exception { + runTest("idea/testData/quickfix/convertToAnonymousObject/typeArgument.kt"); + } + @TestMetadata("unit.kt") public void testUnit() throws Exception { runTest("idea/testData/quickfix/convertToAnonymousObject/unit.kt");