From 2e2287f2076d868bb964890e15dd6fb6b84d4cd7 Mon Sep 17 00:00:00 2001 From: "Alexander.Podkhalyuzin" Date: Tue, 21 Feb 2012 16:09:59 +0400 Subject: [PATCH] KT-1274 fixed tests --- .../jetbrains/jet/compiler/TipsManager.java | 24 +++++++++++++++---- .../jetbrains/jet/lang/types/TypeUtils.java | 2 ++ .../functionParameterInfo/NotGreen.kt | 4 +++- .../functionParameterInfo/NullableTypeCall.kt | 19 +++++++++++++++ .../JetFunctionParameterInfoTest.java | 4 ++++ 5 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 idea/testData/parameterInfo/functionParameterInfo/NullableTypeCall.kt diff --git a/compiler/backend/src/org/jetbrains/jet/compiler/TipsManager.java b/compiler/backend/src/org/jetbrains/jet/compiler/TipsManager.java index 0857ebfa235..64ff3cd9c77 100644 --- a/compiler/backend/src/org/jetbrains/jet/compiler/TipsManager.java +++ b/compiler/backend/src/org/jetbrains/jet/compiler/TipsManager.java @@ -41,6 +41,7 @@ import org.jetbrains.jet.lang.resolve.scopes.receivers.ExpressionReceiver; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.NamespaceType; +import org.jetbrains.jet.lang.types.TypeUtils; import org.jetbrains.jet.lang.types.Variance; import java.util.*; @@ -170,7 +171,8 @@ public final class TipsManager { @NotNull final ReceiverDescriptor receiverDescriptor ) { // It's impossible to add extension function for namespace - if (receiverDescriptor.getType() instanceof NamespaceType) { + JetType receiverType = receiverDescriptor.getType(); + if (receiverType instanceof NamespaceType) { return descriptors; } @@ -189,11 +191,25 @@ public final class TipsManager { } /* - * Checks if receiver declaration could be resolved to call expected receiver. - */ + * Checks if receiver declaration could be resolved to call expected receiver. + */ private static boolean checkReceiverResolution ( @NotNull ReceiverDescriptor expectedReceiver, @NotNull CallableDescriptor receiverArgument + ) { + JetType type = expectedReceiver.getType(); + if (checkReceiverResolution(expectedReceiver, type, receiverArgument)) return true; + if (type.isNullable()) { + JetType notNullableType = TypeUtils.makeNotNullable(type); + if (checkReceiverResolution(expectedReceiver, notNullableType, receiverArgument)) return true; + } + return false; + } + + private static boolean checkReceiverResolution ( + @NotNull ReceiverDescriptor expectedReceiver, + @NotNull JetType receiverType, + @NotNull CallableDescriptor receiverArgument ) { ConstraintSystem constraintSystem = new ConstraintSystemImpl(ConstraintResolutionListener.DO_NOTHING); for (TypeParameterDescriptor typeParameterDescriptor : receiverArgument.getTypeParameters()) { @@ -203,7 +219,7 @@ public final class TipsManager { ReceiverDescriptor receiverParameter = receiverArgument.getReceiverParameter(); if (expectedReceiver.exists() && receiverParameter.exists()) { constraintSystem.addSubtypingConstraint( - RECEIVER.assertSubtyping(expectedReceiver.getType(), receiverParameter.getType())); + RECEIVER.assertSubtyping(receiverType, receiverParameter.getType())); } else if (expectedReceiver.exists() || receiverParameter.exists()) { // Only one of receivers exist diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/TypeUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/TypeUtils.java index 4c7fdce6fa0..89ce7d74eba 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/TypeUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/TypeUtils.java @@ -106,10 +106,12 @@ public class TypeUtils { } }; + @NotNull public static JetType makeNullable(@NotNull JetType type) { return makeNullableAsSpecified(type, true); } + @NotNull public static JetType makeNotNullable(@NotNull JetType type) { return makeNullableAsSpecified(type, false); } diff --git a/idea/testData/parameterInfo/functionParameterInfo/NotGreen.kt b/idea/testData/parameterInfo/functionParameterInfo/NotGreen.kt index 850ce1bcc85..a9f3d171fb2 100644 --- a/idea/testData/parameterInfo/functionParameterInfo/NotGreen.kt +++ b/idea/testData/parameterInfo/functionParameterInfo/NotGreen.kt @@ -3,8 +3,10 @@ open class A(x: Int) { fun m(x: Int) = 1 fun d(x: Int) { - m(1, false, false) + m(1, false, false) } } /* +Text: (x: Int), Disabled: false, Strikeout: false, Green: false +Text: (x: Int, y: Boolean), Disabled: false, Strikeout: false, Green: false */ \ No newline at end of file diff --git a/idea/testData/parameterInfo/functionParameterInfo/NullableTypeCall.kt b/idea/testData/parameterInfo/functionParameterInfo/NullableTypeCall.kt new file mode 100644 index 00000000000..2ce1311500d --- /dev/null +++ b/idea/testData/parameterInfo/functionParameterInfo/NullableTypeCall.kt @@ -0,0 +1,19 @@ +class A() + +fun A.index(x: Int) : Int { + return 1 +} +fun A.index(x: Int, y: Int) : Int { + return x + y +} + +fun f() { + val command : A? = null + if (command != null){ + command.index() + } +} +/* +Text: (x: Int), Disabled: false, Strikeout: false, Green: false +Text: (x: Int, y: Int), Disabled: false, Strikeout: false, Green: false +*/ \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/parameterInfo/JetFunctionParameterInfoTest.java b/idea/tests/org/jetbrains/jet/plugin/parameterInfo/JetFunctionParameterInfoTest.java index af85db9f592..e19655c5cd8 100644 --- a/idea/tests/org/jetbrains/jet/plugin/parameterInfo/JetFunctionParameterInfoTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/parameterInfo/JetFunctionParameterInfoTest.java @@ -52,6 +52,10 @@ public class JetFunctionParameterInfoTest extends LightCodeInsightFixtureTestCas doTest(); } + public void testNullableTypeCall() { + doTest(); + } + public void testPrintln() { doTest(); }