diff --git a/src/main/kotlin/com/github/suusan2go/kotlinfillclass/inspections/FillClassInspection.kt b/src/main/kotlin/com/github/suusan2go/kotlinfillclass/inspections/FillClassInspection.kt index f8427aa..8961eb0 100644 --- a/src/main/kotlin/com/github/suusan2go/kotlinfillclass/inspections/FillClassInspection.kt +++ b/src/main/kotlin/com/github/suusan2go/kotlinfillclass/inspections/FillClassInspection.kt @@ -12,11 +12,10 @@ import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiElement import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.isFunctionType -import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor import org.jetbrains.kotlin.descriptors.ClassKind +import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.core.CollectingNameValidator @@ -80,11 +79,11 @@ class FillClassInspection( } } -private fun KtValueArgumentList.descriptor(): CallableDescriptor? { +private fun KtValueArgumentList.descriptor(): FunctionDescriptor? { val calleeExpression = getStrictParentOfType()?.calleeExpression ?: return null - val descriptor = calleeExpression.resolveToCall()?.resultingDescriptor + val descriptor = calleeExpression.resolveToCall()?.resultingDescriptor as? FunctionDescriptor ?: return null if (descriptor is JavaCallableMemberDescriptor) return null - return descriptor.takeIf { it is ClassConstructorDescriptor || it is SimpleFunctionDescriptor } + return descriptor } class FillClassFix( diff --git a/src/test/kotlin/com/github/suusan2go/kotlinfillclass/inspections/FillClassInspectionTest.kt b/src/test/kotlin/com/github/suusan2go/kotlinfillclass/inspections/FillClassInspectionTest.kt index 07ca1ad..f6e6de8 100644 --- a/src/test/kotlin/com/github/suusan2go/kotlinfillclass/inspections/FillClassInspectionTest.kt +++ b/src/test/kotlin/com/github/suusan2go/kotlinfillclass/inspections/FillClassInspectionTest.kt @@ -189,6 +189,52 @@ class FillClassInspectionTest : BasePlatformTestCase() { ) } + fun `test extension function`() { + doAvailableTest( + """ + class Foo + fun Foo.foo(x: Int, y: Int) {} + fun test() { + Foo().foo() + } + """, + """ + class Foo + fun Foo.foo(x: Int, y: Int) {} + fun test() { + Foo().foo(x = 0, y = 0) + } + """, + "Fill function" + ) + } + + fun `test imported extension function`() { + doAvailableTest( + """ + import Bar.foo + class Foo + object Bar { + fun Foo.foo(x: Int, y: Int) {} + } + fun test() { + Foo().foo() + } + """, + """ + import Bar.foo + class Foo + object Bar { + fun Foo.foo(x: Int, y: Int) {} + } + fun test() { + Foo().foo(x = 0, y = 0) + } + """, + "Fill function" + ) + } + fun `test fill class constructor without default values`() { doAvailableTest( """