From b07aed7a00cdf6ea41c4c21f1e74b420bb523dca Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 14 Mar 2019 15:31:10 +0300 Subject: [PATCH] [NI] Fix determination of completion mode. #KT-30406 Fixed --- .../calls/components/KotlinCallCompleter.kt | 2 +- .../tests/controlStructures/kt30406.kt | 16 ++++++++++++ .../tests/controlStructures/kt30406.txt | 26 +++++++++++++++++++ ...ationOfCoercionToUnitInsideNestedLambda.kt | 2 +- .../checkers/DiagnosticsTestGenerated.java | 5 ++++ .../DiagnosticsUsingJavacTestGenerated.java | 5 ++++ 6 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/controlStructures/kt30406.kt create mode 100644 compiler/testData/diagnostics/tests/controlStructures/kt30406.txt diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/KotlinCallCompleter.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/KotlinCallCompleter.kt index c63c6bd3226..cddf654e3b4 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/KotlinCallCompleter.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/KotlinCallCompleter.kt @@ -200,7 +200,7 @@ class KotlinCallCompleter( val constructor = typeVariable.constructor val variableWithConstraints = csBuilder.currentStorage().notFixedTypeVariables[constructor] ?: return false - return variableWithConstraints.constraints.any { + return variableWithConstraints.constraints.all { !trivialConstraintTypeInferenceOracle.isTrivialConstraint(it) && !it.type.isIntegerValueType() && it.kind.isLower() && csBuilder.isProperType(it.type) } diff --git a/compiler/testData/diagnostics/tests/controlStructures/kt30406.kt b/compiler/testData/diagnostics/tests/controlStructures/kt30406.kt new file mode 100644 index 00000000000..e4deb5797b8 --- /dev/null +++ b/compiler/testData/diagnostics/tests/controlStructures/kt30406.kt @@ -0,0 +1,16 @@ +// !LANGUAGE: +NewInference +// !DIAGNOSTICS: -UNUSED_EXPRESSION +// !CHECK_TYPE +// Issue: KT-30406 + +interface Option { + val s: String +} +class Some(override val s: String) : Option +class None(override val s: String = "None") : Option + +fun test(a: Int): Option = + ")!>if (a == 239) + ")!>Some("239") + else + None() \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/controlStructures/kt30406.txt b/compiler/testData/diagnostics/tests/controlStructures/kt30406.txt new file mode 100644 index 00000000000..4f8a7b98d90 --- /dev/null +++ b/compiler/testData/diagnostics/tests/controlStructures/kt30406.txt @@ -0,0 +1,26 @@ +package + +public fun test(/*0*/ a: kotlin.Int): Option + +public final class None : Option { + public constructor None(/*0*/ s: kotlin.String = ...) + public open override /*1*/ val s: kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface Option { + public abstract val s: kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class Some : Option { + public constructor Some(/*0*/ s: kotlin.String) + public open override /*1*/ val s: kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/inference/coercionToUnit/nonPropagationOfCoercionToUnitInsideNestedLambda.kt b/compiler/testData/diagnostics/tests/inference/coercionToUnit/nonPropagationOfCoercionToUnitInsideNestedLambda.kt index 9a06b729ab7..05f01522125 100644 --- a/compiler/testData/diagnostics/tests/inference/coercionToUnit/nonPropagationOfCoercionToUnitInsideNestedLambda.kt +++ b/compiler/testData/diagnostics/tests/inference/coercionToUnit/nonPropagationOfCoercionToUnitInsideNestedLambda.kt @@ -24,7 +24,7 @@ fun foo(): String? { run { if (true) { - Obj() + Obj() } else if (true) return null // Error, coercion to Unit doesn't propagate inside nested lambdas } diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index f1ab0a93ffa..3fd8c0551dd 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -4160,6 +4160,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { runTest("compiler/testData/diagnostics/tests/controlStructures/kt1075.kt"); } + @TestMetadata("kt30406.kt") + public void testKt30406() throws Exception { + runTest("compiler/testData/diagnostics/tests/controlStructures/kt30406.kt"); + } + @TestMetadata("kt4310.kt") public void testKt4310() throws Exception { runTest("compiler/testData/diagnostics/tests/controlStructures/kt4310.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index 662ee202133..9108affa326 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -4155,6 +4155,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/controlStructures/kt1075.kt"); } + @TestMetadata("kt30406.kt") + public void testKt30406() throws Exception { + runTest("compiler/testData/diagnostics/tests/controlStructures/kt30406.kt"); + } + @TestMetadata("kt4310.kt") public void testKt4310() throws Exception { runTest("compiler/testData/diagnostics/tests/controlStructures/kt4310.kt");