From eac735e91a499b4b8e62ecf10bd5c8875285dac3 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 3 Feb 2015 20:51:59 +0300 Subject: [PATCH] Change parameter type: Make parameter type nullable (instead of Nothing?) if null is passed as an argument #KT-6634 Fixed --- .../quickfix/QuickFixFactoryForTypeMismatchError.java | 4 +++- .../typeMismatch/afterNullArgumentForNonNullParameter.kt | 8 ++++++++ .../typeMismatch/beforeNullArgumentForNonNullParameter.kt | 8 ++++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 6 ++++++ 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 idea/testData/quickfix/typeMismatch/afterNullArgumentForNonNullParameter.kt create mode 100644 idea/testData/quickfix/typeMismatch/beforeNullArgumentForNonNullParameter.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixFactoryForTypeMismatchError.java b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixFactoryForTypeMismatchError.java index fe0cdc500ff..cf5f94cc3e1 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixFactoryForTypeMismatchError.java +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixFactoryForTypeMismatchError.java @@ -152,7 +152,9 @@ public class QuickFixFactoryForTypeMismatchError extends JetIntentionActionsFact ValueArgument valueArgument = CallUtilPackage.getValueArgumentForExpression(resolvedCall.getCall(), argumentExpression); if (valueArgument != null) { JetParameter correspondingParameter = QuickFixUtil.getParameterDeclarationForValueArgument(resolvedCall, valueArgument); - JetType valueArgumentType = context.get(BindingContext.EXPRESSION_TYPE, valueArgument.getArgumentExpression()); + JetType valueArgumentType = diagnostic.getFactory() == Errors.NULL_FOR_NONNULL_TYPE + ? expressionType + : context.get(BindingContext.EXPRESSION_TYPE, valueArgument.getArgumentExpression()); if (correspondingParameter != null && valueArgumentType != null) { actions.add(new ChangeParameterTypeFix(correspondingParameter, valueArgumentType)); } diff --git a/idea/testData/quickfix/typeMismatch/afterNullArgumentForNonNullParameter.kt b/idea/testData/quickfix/typeMismatch/afterNullArgumentForNonNullParameter.kt new file mode 100644 index 00000000000..e797bcab32b --- /dev/null +++ b/idea/testData/quickfix/typeMismatch/afterNullArgumentForNonNullParameter.kt @@ -0,0 +1,8 @@ +// "Change parameter 's' type of primary constructor of class 'Foo' to 'String?'" "true" +class Foo(s: String?) { + +} + +fun test() { + Foo(null) +} \ No newline at end of file diff --git a/idea/testData/quickfix/typeMismatch/beforeNullArgumentForNonNullParameter.kt b/idea/testData/quickfix/typeMismatch/beforeNullArgumentForNonNullParameter.kt new file mode 100644 index 00000000000..b793ae77d7c --- /dev/null +++ b/idea/testData/quickfix/typeMismatch/beforeNullArgumentForNonNullParameter.kt @@ -0,0 +1,8 @@ +// "Change parameter 's' type of primary constructor of class 'Foo' to 'String?'" "true" +class Foo(s: String) { + +} + +fun test() { + Foo(null) +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index a024a93e502..e46e66484d9 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -4322,6 +4322,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("beforeNullArgumentForNonNullParameter.kt") + public void testNullArgumentForNonNullParameter() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/typeMismatch/beforeNullArgumentForNonNullParameter.kt"); + doTest(fileName); + } + @TestMetadata("beforePropertyTypeMismatch.kt") public void testPropertyTypeMismatch() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/typeMismatch/beforePropertyTypeMismatch.kt");