From ee7425c1dec4b3781cc0d0ac6c3e03f0ee5a1640 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 9 Oct 2015 18:22:44 +0300 Subject: [PATCH] Checking "infix" modifier in completion and import popup --- .../org/jetbrains/kotlin/idea/util/CallType.kt | 3 +-- .../common/AfterIntSeparatedWithComments.kt | 2 +- .../testData/basic/common/InfixCall.kt | 12 ++++++------ .../InfixCallNoSpecialLambdaArgumentItem.kt | 4 ++-- .../NoGenericFunDuplication.dependency.kt | 2 +- .../NotImportedInfixExtension.dependency.kt | 4 ++-- .../testData/handlers/InfixCall.kt | 2 +- .../testData/handlers/InfixCall.kt.after | 2 +- .../testData/handlers/InfixCallOnSpace.kt | 2 +- .../testData/handlers/InfixCallOnSpace.kt.after | 2 +- .../multifile/InfixExtensionCallImport-2.kt | 2 +- .../idea-completion/testData/smart/InfixCall.kt | 8 ++++---- .../autoImports/infixCall.before.Dependency.kt | 2 +- .../autoImports/infixCall2.before.Dependency.kt | 3 +++ .../autoImports/infixCall2.before.Main.kt | 17 +++++++++++++++++ .../QuickFixMultiFileTestGenerated.java | 6 ++++++ 16 files changed, 49 insertions(+), 24 deletions(-) create mode 100644 idea/testData/quickfix/autoImports/infixCall2.before.Dependency.kt create mode 100644 idea/testData/quickfix/autoImports/infixCall2.before.Main.kt diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt index d96df6ccfbf..3bff2b5e371 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt @@ -57,9 +57,8 @@ public sealed class CallType(val descriptorKindFilter: object TYPE : CallType(DescriptorKindFilter(DescriptorKindFilter.CLASSIFIERS_MASK or DescriptorKindFilter.PACKAGES_MASK)) private object NonInfixExclude : DescriptorKindExclude() { - //TODO: check 'infix' modifier override fun excludes(descriptor: DeclarationDescriptor) = - !(descriptor is SimpleFunctionDescriptor && descriptor.valueParameters.size() == 1) + !(descriptor is SimpleFunctionDescriptor && descriptor.isInfix) override val fullyExcludedDescriptorKinds: Int get() = 0 diff --git a/idea/idea-completion/testData/basic/common/AfterIntSeparatedWithComments.kt b/idea/idea-completion/testData/basic/common/AfterIntSeparatedWithComments.kt index e634666d510..1ca06db0c95 100644 --- a/idea/idea-completion/testData/basic/common/AfterIntSeparatedWithComments.kt +++ b/idea/idea-completion/testData/basic/common/AfterIntSeparatedWithComments.kt @@ -1,4 +1,4 @@ -fun Int.func(s: String): Int{} +infix fun Int.func(s: String): Int{} fun test() { val floor = "Floor" diff --git a/idea/idea-completion/testData/basic/common/InfixCall.kt b/idea/idea-completion/testData/basic/common/InfixCall.kt index 48c6c8a18b6..72b88e4e671 100644 --- a/idea/idea-completion/testData/basic/common/InfixCall.kt +++ b/idea/idea-completion/testData/basic/common/InfixCall.kt @@ -1,18 +1,18 @@ class C { - fun foo(){} - fun bar(p: Int) {} + fun foo(p: Int){} + infix fun bar(p: Int) {} fun zoo(p1: Int, p2: Int){} val prop: Int = 1 } -fun C.xxx() {} -fun C.yyy(p: Int) {} +fun C.xxx(p: Int) {} +infix fun C.yyy(p: Int) {} fun C.zzz(p1: Int, p2: Int) {} val C.extensionProp: Int get() = 1 -fun A.and(that: B): Pair = Pair(this, that) +infix fun A.and(that: B): Pair = Pair(this, that) -fun String.ttt(p: Int) {} +infix fun String.ttt(p: Int) {} fun f() { C() diff --git a/idea/idea-completion/testData/basic/common/InfixCallNoSpecialLambdaArgumentItem.kt b/idea/idea-completion/testData/basic/common/InfixCallNoSpecialLambdaArgumentItem.kt index 9f10b1a0e0a..a2822d69787 100644 --- a/idea/idea-completion/testData/basic/common/InfixCallNoSpecialLambdaArgumentItem.kt +++ b/idea/idea-completion/testData/basic/common/InfixCallNoSpecialLambdaArgumentItem.kt @@ -1,6 +1,6 @@ // checks that no special item "ext1 { String, Int -> ... }" created for infix call -fun Int.ext1(handler: (String, Int) -> Unit){} -fun Int.ext2(c: Char){} +infix fun Int.ext1(handler: (String, Int) -> Unit){} +infix fun Int.ext2(c: Char){} fun foo() { val pair = 1 ext diff --git a/idea/idea-completion/testData/basic/multifile/NoGenericFunDuplication/NoGenericFunDuplication.dependency.kt b/idea/idea-completion/testData/basic/multifile/NoGenericFunDuplication/NoGenericFunDuplication.dependency.kt index 01925ed7f2f..983dae0f2e3 100644 --- a/idea/idea-completion/testData/basic/multifile/NoGenericFunDuplication/NoGenericFunDuplication.dependency.kt +++ b/idea/idea-completion/testData/basic/multifile/NoGenericFunDuplication/NoGenericFunDuplication.dependency.kt @@ -2,4 +2,4 @@ package dependency class MyPair(public val first: A, public val second: B) -public fun A.pair(that: B): MyPair = MyPair(this, that) +infix fun A.pair(that: B): MyPair = MyPair(this, that) diff --git a/idea/idea-completion/testData/basic/multifile/NotImportedInfixExtension/NotImportedInfixExtension.dependency.kt b/idea/idea-completion/testData/basic/multifile/NotImportedInfixExtension/NotImportedInfixExtension.dependency.kt index ae0fecdc1e7..b5d8d5a2246 100644 --- a/idea/idea-completion/testData/basic/multifile/NotImportedInfixExtension/NotImportedInfixExtension.dependency.kt +++ b/idea/idea-completion/testData/basic/multifile/NotImportedInfixExtension/NotImportedInfixExtension.dependency.kt @@ -2,8 +2,8 @@ package other import pack.C -fun C.xxx() {} -fun C.yyy(p: Int) {} +fun C.xxx(p: Int) {} +infix fun C.yyy(p: Int) {} fun C.zzz(p1: Int, p2: Int) {} val C.extensionProp: Int get() = 1 diff --git a/idea/idea-completion/testData/handlers/InfixCall.kt b/idea/idea-completion/testData/handlers/InfixCall.kt index 8d3ddf5cb26..1f011468b43 100644 --- a/idea/idea-completion/testData/handlers/InfixCall.kt +++ b/idea/idea-completion/testData/handlers/InfixCall.kt @@ -1,4 +1,4 @@ -fun A.to(that: B): Pair = Pair(this, that) +infix fun A.to(that: B): Pair = Pair(this, that) fun foo() { val pair = 1 to diff --git a/idea/idea-completion/testData/handlers/InfixCall.kt.after b/idea/idea-completion/testData/handlers/InfixCall.kt.after index 08973d8e874..af7fe1c0da6 100644 --- a/idea/idea-completion/testData/handlers/InfixCall.kt.after +++ b/idea/idea-completion/testData/handlers/InfixCall.kt.after @@ -1,4 +1,4 @@ -fun A.to(that: B): Pair = Pair(this, that) +infix fun A.to(that: B): Pair = Pair(this, that) fun foo() { val pair = 1 to diff --git a/idea/idea-completion/testData/handlers/InfixCallOnSpace.kt b/idea/idea-completion/testData/handlers/InfixCallOnSpace.kt index 8d3ddf5cb26..1f011468b43 100644 --- a/idea/idea-completion/testData/handlers/InfixCallOnSpace.kt +++ b/idea/idea-completion/testData/handlers/InfixCallOnSpace.kt @@ -1,4 +1,4 @@ -fun A.to(that: B): Pair = Pair(this, that) +infix fun A.to(that: B): Pair = Pair(this, that) fun foo() { val pair = 1 to diff --git a/idea/idea-completion/testData/handlers/InfixCallOnSpace.kt.after b/idea/idea-completion/testData/handlers/InfixCallOnSpace.kt.after index 08973d8e874..af7fe1c0da6 100644 --- a/idea/idea-completion/testData/handlers/InfixCallOnSpace.kt.after +++ b/idea/idea-completion/testData/handlers/InfixCallOnSpace.kt.after @@ -1,4 +1,4 @@ -fun A.to(that: B): Pair = Pair(this, that) +infix fun A.to(that: B): Pair = Pair(this, that) fun foo() { val pair = 1 to diff --git a/idea/idea-completion/testData/handlers/multifile/InfixExtensionCallImport-2.kt b/idea/idea-completion/testData/handlers/multifile/InfixExtensionCallImport-2.kt index 1e1e13d1752..44d923db947 100644 --- a/idea/idea-completion/testData/handlers/multifile/InfixExtensionCallImport-2.kt +++ b/idea/idea-completion/testData/handlers/multifile/InfixExtensionCallImport-2.kt @@ -1,3 +1,3 @@ package other -fun A.makePair(that: B): Pair = Pair(this, that) +infix fun A.makePair(that: B): Pair = Pair(this, that) diff --git a/idea/idea-completion/testData/smart/InfixCall.kt b/idea/idea-completion/testData/smart/InfixCall.kt index 0aa7ce7973f..eeb2d970d2f 100644 --- a/idea/idea-completion/testData/smart/InfixCall.kt +++ b/idea/idea-completion/testData/smart/InfixCall.kt @@ -1,11 +1,11 @@ class X { - fun foo(i: Int) = "" - fun bar() = "" + infix fun foo(i: Int) = "" + fun bar(i: Int) = "" val prop: String = "" } -fun X.ext1(s: String) = "" -fun X.ext2() = "" +infix fun X.ext1(s: String) = "" +fun X.ext2(p: Int) = "" fun X.extProp: String get() = "" val s: String = X() diff --git a/idea/testData/quickfix/autoImports/infixCall.before.Dependency.kt b/idea/testData/quickfix/autoImports/infixCall.before.Dependency.kt index f315b6e2c1f..84ed1e872ac 100644 --- a/idea/testData/quickfix/autoImports/infixCall.before.Dependency.kt +++ b/idea/testData/quickfix/autoImports/infixCall.before.Dependency.kt @@ -1,3 +1,3 @@ package util -fun h.H.foo(other: h.H) = "" \ No newline at end of file +infix fun h.H.foo(other: h.H) = "" \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/infixCall2.before.Dependency.kt b/idea/testData/quickfix/autoImports/infixCall2.before.Dependency.kt new file mode 100644 index 00000000000..f315b6e2c1f --- /dev/null +++ b/idea/testData/quickfix/autoImports/infixCall2.before.Dependency.kt @@ -0,0 +1,3 @@ +package util + +fun h.H.foo(other: h.H) = "" \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/infixCall2.before.Main.kt b/idea/testData/quickfix/autoImports/infixCall2.before.Main.kt new file mode 100644 index 00000000000..9ad455c6b24 --- /dev/null +++ b/idea/testData/quickfix/autoImports/infixCall2.before.Main.kt @@ -0,0 +1,17 @@ +// "Import" "false" +// ERROR: Unresolved reference: foo +// ACTION: Create extension function 'foo' +// ACTION: Create extension property 'foo' +// ACTION: Create local variable 'foo' +// ACTION: Create member function 'foo' +// ACTION: Create member property 'foo' +// ACTION: Create parameter 'foo' +// ACTION: Replace infix call with ordinary call + +package h + +interface H + +fun f(h: H) { + h foo h +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java index bae93a28c39..9010b97fbbc 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java @@ -149,6 +149,12 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes doTestWithExtraFile(fileName); } + @TestMetadata("infixCall2.before.Main.kt") + public void testInfixCall2() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/infixCall2.before.Main.kt"); + doTestWithExtraFile(fileName); + } + @TestMetadata("minusOperator.before.Main.kt") public void testMinusOperator() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/minusOperator.before.Main.kt");