diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddExclExclCallFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddExclExclCallFix.kt index 0a936be3257..dcd92b08ef6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddExclExclCallFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddExclExclCallFix.kt @@ -174,6 +174,6 @@ object MissingIteratorExclExclFixFactory : KotlinSingleIntentionActionFactory() else -> return null } - return AddExclExclCallFix(element) + return AddExclExclCallFix(element, checkImplicitReceivers = false) } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixFactoryForTypeMismatchError.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixFactoryForTypeMismatchError.kt index 86276399c8b..eca380ad32c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixFactoryForTypeMismatchError.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixFactoryForTypeMismatchError.kt @@ -166,7 +166,7 @@ class QuickFixFactoryForTypeMismatchError : KotlinIntentionActionsFactory() { val nullableExpected = expectedType.makeNullable() if (expressionType.isSubtypeOf(nullableExpected)) { val targetExpression = diagnosticElement.getTopMostQualifiedForSelectorIfAny() - actions.add(AddExclExclCallFix(targetExpression)) + actions.add(AddExclExclCallFix(targetExpression, checkImplicitReceivers = false)) if (expectedType.isBoolean()) { actions.add(AddEqEqTrueFix(targetExpression)) } diff --git a/idea/testData/quickfix/addExclExclCall/iterable.kt b/idea/testData/quickfix/addExclExclCall/iterable.kt new file mode 100644 index 00000000000..22758f8f72f --- /dev/null +++ b/idea/testData/quickfix/addExclExclCall/iterable.kt @@ -0,0 +1,6 @@ +// "Add non-null asserted (!!) call" "true" +// WITH_RUNTIME + +fun foo(a: List?) { + for (s in a) {} +} diff --git a/idea/testData/quickfix/addExclExclCall/iterable.kt.after b/idea/testData/quickfix/addExclExclCall/iterable.kt.after new file mode 100644 index 00000000000..222f28fc3ad --- /dev/null +++ b/idea/testData/quickfix/addExclExclCall/iterable.kt.after @@ -0,0 +1,6 @@ +// "Add non-null asserted (!!) call" "true" +// WITH_RUNTIME + +fun foo(a: List?) { + for (s in a!!) {} +} diff --git a/idea/testData/quickfix/addExclExclCall/iterableInExtension.kt b/idea/testData/quickfix/addExclExclCall/iterableInExtension.kt new file mode 100644 index 00000000000..bff8f4d1db8 --- /dev/null +++ b/idea/testData/quickfix/addExclExclCall/iterableInExtension.kt @@ -0,0 +1,11 @@ +// "Add non-null asserted (!!) call" "true" +// WITH_RUNTIME + +class C { + val list: List? = null +} + +// Test for KTIJ-10052 +fun C.test() { + for (s in list) {} +} diff --git a/idea/testData/quickfix/addExclExclCall/iterableInExtension.kt.after b/idea/testData/quickfix/addExclExclCall/iterableInExtension.kt.after new file mode 100644 index 00000000000..047f2f3e4fe --- /dev/null +++ b/idea/testData/quickfix/addExclExclCall/iterableInExtension.kt.after @@ -0,0 +1,11 @@ +// "Add non-null asserted (!!) call" "true" +// WITH_RUNTIME + +class C { + val list: List? = null +} + +// Test for KTIJ-10052 +fun C.test() { + for (s in list!!) {} +} diff --git a/idea/testData/quickfix/typeMismatch/addExclExclToAssignmentRValue.kt b/idea/testData/quickfix/typeMismatch/addExclExclToAssignmentRValue.kt new file mode 100644 index 00000000000..ddeefe7975b --- /dev/null +++ b/idea/testData/quickfix/typeMismatch/addExclExclToAssignmentRValue.kt @@ -0,0 +1,5 @@ +// "Add non-null asserted (!!) call" "true" +fun test() { + val s: String? = null + val z: String = s +} diff --git a/idea/testData/quickfix/typeMismatch/addExclExclToAssignmentRValue.kt.after b/idea/testData/quickfix/typeMismatch/addExclExclToAssignmentRValue.kt.after new file mode 100644 index 00000000000..caa14525d65 --- /dev/null +++ b/idea/testData/quickfix/typeMismatch/addExclExclToAssignmentRValue.kt.after @@ -0,0 +1,5 @@ +// "Add non-null asserted (!!) call" "true" +fun test() { + val s: String? = null + val z: String = s!! +} diff --git a/idea/testData/quickfix/typeMismatch/addExclExclToMemberAccessInExtension.kt b/idea/testData/quickfix/typeMismatch/addExclExclToMemberAccessInExtension.kt new file mode 100644 index 00000000000..60c9dfa539c --- /dev/null +++ b/idea/testData/quickfix/typeMismatch/addExclExclToMemberAccessInExtension.kt @@ -0,0 +1,12 @@ +// "Add non-null asserted (!!) call" "true" + +class C { + val s: String? = null +} + +// Test for KTIJ-10052 +fun C.test() { + other(s) +} + +fun other(s: String) {} diff --git a/idea/testData/quickfix/typeMismatch/addExclExclToMemberAccessInExtension.kt.after b/idea/testData/quickfix/typeMismatch/addExclExclToMemberAccessInExtension.kt.after new file mode 100644 index 00000000000..f04af414a62 --- /dev/null +++ b/idea/testData/quickfix/typeMismatch/addExclExclToMemberAccessInExtension.kt.after @@ -0,0 +1,12 @@ +// "Add non-null asserted (!!) call" "true" + +class C { + val s: String? = null +} + +// Test for KTIJ-10052 +fun C.test() { + other(s!!) +} + +fun other(s: String) {} diff --git a/idea/testData/quickfix/typeMismatch/addExclExclToMemberAccessInExtensionAsAssignmentRValue.kt b/idea/testData/quickfix/typeMismatch/addExclExclToMemberAccessInExtensionAsAssignmentRValue.kt new file mode 100644 index 00000000000..f1e101430f4 --- /dev/null +++ b/idea/testData/quickfix/typeMismatch/addExclExclToMemberAccessInExtensionAsAssignmentRValue.kt @@ -0,0 +1,9 @@ +// "Add non-null asserted (!!) call" "true" +class C { + val s: String? = null +} + +// Test for KTIJ-10052 +fun C.test() { + val z: String = s +} diff --git a/idea/testData/quickfix/typeMismatch/addExclExclToMemberAccessInExtensionAsAssignmentRValue.kt.after b/idea/testData/quickfix/typeMismatch/addExclExclToMemberAccessInExtensionAsAssignmentRValue.kt.after new file mode 100644 index 00000000000..aa40d3412f3 --- /dev/null +++ b/idea/testData/quickfix/typeMismatch/addExclExclToMemberAccessInExtensionAsAssignmentRValue.kt.after @@ -0,0 +1,9 @@ +// "Add non-null asserted (!!) call" "true" +class C { + val s: String? = null +} + +// Test for KTIJ-10052 +fun C.test() { + val z: String = s!! +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index c3a46c8e632..364db05d7e3 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -677,6 +677,16 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/addExclExclCall/implicitFunctionCall.kt"); } + @TestMetadata("iterable.kt") + public void testIterable() throws Exception { + runTest("idea/testData/quickfix/addExclExclCall/iterable.kt"); + } + + @TestMetadata("iterableInExtension.kt") + public void testIterableInExtension() throws Exception { + runTest("idea/testData/quickfix/addExclExclCall/iterableInExtension.kt"); + } + @TestMetadata("normal.kt") public void testNormal() throws Exception { runTest("idea/testData/quickfix/addExclExclCall/normal.kt"); @@ -13776,6 +13786,21 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/typeMismatch/addArrayOfTypeForNamedParameter.kt"); } + @TestMetadata("addExclExclToAssignmentRValue.kt") + public void testAddExclExclToAssignmentRValue() throws Exception { + runTest("idea/testData/quickfix/typeMismatch/addExclExclToAssignmentRValue.kt"); + } + + @TestMetadata("addExclExclToMemberAccessInExtension.kt") + public void testAddExclExclToMemberAccessInExtension() throws Exception { + runTest("idea/testData/quickfix/typeMismatch/addExclExclToMemberAccessInExtension.kt"); + } + + @TestMetadata("addExclExclToMemberAccessInExtensionAsAssignmentRValue.kt") + public void testAddExclExclToMemberAccessInExtensionAsAssignmentRValue() throws Exception { + runTest("idea/testData/quickfix/typeMismatch/addExclExclToMemberAccessInExtensionAsAssignmentRValue.kt"); + } + @TestMetadata("addExclExclToQualifiedArgument.kt") public void testAddExclExclToQualifiedArgument() throws Exception { runTest("idea/testData/quickfix/typeMismatch/addExclExclToQualifiedArgument.kt");