From 6a1923a4777be955d0b7cb92aa2a740d1065d2e8 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Thu, 26 Mar 2020 12:00:18 +0900 Subject: [PATCH] "Convert to anonymous object" intention: suggest for kotlin fun interface #KT-37749 Fixed --- .../SamConversionToAnonymousObjectIntention.kt | 18 ++++++++++-------- .../funInterface.kt | 9 +++++++++ .../funInterface.kt.after | 13 +++++++++++++ .../intentions/IntentionTestGenerated.java | 5 +++++ 4 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 idea/testData/intentions/samConversionToAnonymousObject/funInterface.kt create mode 100644 idea/testData/intentions/samConversionToAnonymousObject/funInterface.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/SamConversionToAnonymousObjectIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/SamConversionToAnonymousObjectIntention.kt index bc58b150dc7..c0edec37075 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/SamConversionToAnonymousObjectIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/SamConversionToAnonymousObjectIntention.kt @@ -15,11 +15,10 @@ import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.core.replaced -import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor import org.jetbrains.kotlin.load.java.sam.JavaSingleAbstractMethodUtils import org.jetbrains.kotlin.psi.KtCallExpression +import org.jetbrains.kotlin.psi.KtFunctionLiteral import org.jetbrains.kotlin.psi.KtLambdaExpression import org.jetbrains.kotlin.psi.KtPsiFactory import org.jetbrains.kotlin.psi.psiUtil.anyDescendantOfType @@ -39,13 +38,12 @@ class SamConversionToAnonymousObjectIntention : SelfTargetingRangeIntention { call -> @@ -65,18 +63,22 @@ class SamConversionToAnonymousObjectIntention : SelfTargetingRangeIntentionKotlinFace {}) +} \ No newline at end of file diff --git a/idea/testData/intentions/samConversionToAnonymousObject/funInterface.kt.after b/idea/testData/intentions/samConversionToAnonymousObject/funInterface.kt.after new file mode 100644 index 00000000000..5a3d2792d3f --- /dev/null +++ b/idea/testData/intentions/samConversionToAnonymousObject/funInterface.kt.after @@ -0,0 +1,13 @@ +fun interface KotlinFace { + fun single() +} + +fun useSam(kf: KotlinFace) {} + +fun callSam() { + useSam(kf = object : KotlinFace { + override fun single() { + + } + }) +} \ 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 a90fb138786..12c2e785836 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -14790,6 +14790,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest { KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/testData/intentions/samConversionToAnonymousObject"), Pattern.compile("^([\\w\\-_]+)\\.(kt|kts)$"), null, true); } + @TestMetadata("funInterface.kt") + public void testFunInterface() throws Exception { + runTest("idea/testData/intentions/samConversionToAnonymousObject/funInterface.kt"); + } + @TestMetadata("labeledReturn.kt") public void testLabeledReturn() throws Exception { runTest("idea/testData/intentions/samConversionToAnonymousObject/labeledReturn.kt");