From 4b3ffd9418c94a3a3231b500cf4ca9564c0cb72e Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Tue, 20 Jun 2017 15:07:16 +0300 Subject: [PATCH] If all candidates are invisible then don't report ambiguity #KT-10045 Fixed --- .../kotlin/resolve/calls/CandidateResolver.kt | 2 +- .../resolve/calls/results/ResolutionStatus.java | 2 ++ .../tests/imports/ImportOverloadFunctions.kt | 4 ++-- .../tests/overload/onlyPrivateOverloadsDiagnostic.kt | 12 ++++++++++++ .../overload/onlyPrivateOverloadsDiagnostic.txt | 12 ++++++++++++ .../protectedVisibility/syntheticSAMExtensions.kt | 4 ++-- .../syntheticExtensions/samAdapters/PackageLocal.kt | 2 +- .../syntheticExtensions/samAdapters/Protected.kt | 6 +++--- .../typealias/typeAliasConstructorWrongVisibility.kt | 12 ++++++------ .../typeAliasConstructorWrongVisibility.txt | 12 ++++++------ .../kotlin/checkers/DiagnosticsTestGenerated.java | 6 ++++++ 11 files changed, 53 insertions(+), 21 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/overload/onlyPrivateOverloadsDiagnostic.kt create mode 100644 compiler/testData/diagnostics/tests/overload/onlyPrivateOverloadsDiagnostic.txt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CandidateResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CandidateResolver.kt index f8f240ef04a..994d3036409 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CandidateResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CandidateResolver.kt @@ -196,7 +196,7 @@ class CandidateResolver( getReceiverValueWithSmartCast(receiverArgument, smartCastType), candidateDescriptor, scope.ownerDescriptor) return if (invisibleMember != null) { tracing.invisibleMember(trace, invisibleMember) - OTHER_ERROR + INVISIBLE_MEMBER_ERROR } else { SUCCESS } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/results/ResolutionStatus.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/results/ResolutionStatus.java index a6d43176bcf..0de1683a96a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/results/ResolutionStatus.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/results/ResolutionStatus.java @@ -25,6 +25,7 @@ public enum ResolutionStatus { UNSAFE_CALL_ERROR, WRONG_NUMBER_OF_TYPE_ARGUMENTS_ERROR, UNSTABLE_SMARTCAST_ERROR, + INVISIBLE_MEMBER_ERROR, OTHER_ERROR, ARGUMENTS_MAPPING_ERROR, // '1.foo()' shouldn't be resolved to 'fun String.foo()' @@ -42,6 +43,7 @@ public enum ResolutionStatus { EnumSet.of(UNSAFE_CALL_ERROR), // weakest EnumSet.of(WRONG_NUMBER_OF_TYPE_ARGUMENTS_ERROR), EnumSet.of(UNSTABLE_SMARTCAST_ERROR), + EnumSet.of(INVISIBLE_MEMBER_ERROR), EnumSet.of(OTHER_ERROR), EnumSet.of(ARGUMENTS_MAPPING_ERROR), EnumSet.of(RECEIVER_TYPE_ERROR), diff --git a/compiler/testData/diagnostics/tests/imports/ImportOverloadFunctions.kt b/compiler/testData/diagnostics/tests/imports/ImportOverloadFunctions.kt index ff9b736309a..59c504c06a5 100644 --- a/compiler/testData/diagnostics/tests/imports/ImportOverloadFunctions.kt +++ b/compiler/testData/diagnostics/tests/imports/ImportOverloadFunctions.kt @@ -27,8 +27,8 @@ import k.all fun test() { zero() - zero(1) - zero("") + zero(1) + zero("") one() one(1) diff --git a/compiler/testData/diagnostics/tests/overload/onlyPrivateOverloadsDiagnostic.kt b/compiler/testData/diagnostics/tests/overload/onlyPrivateOverloadsDiagnostic.kt new file mode 100644 index 00000000000..28659ed40d9 --- /dev/null +++ b/compiler/testData/diagnostics/tests/overload/onlyPrivateOverloadsDiagnostic.kt @@ -0,0 +1,12 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER + +class A { + private fun foo(i: Int) {} + private fun foo(s: String) {} +} + +fun test(a: A) { + a.foo(3) + a.foo() +} + diff --git a/compiler/testData/diagnostics/tests/overload/onlyPrivateOverloadsDiagnostic.txt b/compiler/testData/diagnostics/tests/overload/onlyPrivateOverloadsDiagnostic.txt new file mode 100644 index 00000000000..40c0a1514b9 --- /dev/null +++ b/compiler/testData/diagnostics/tests/overload/onlyPrivateOverloadsDiagnostic.txt @@ -0,0 +1,12 @@ +package + +public fun test(/*0*/ a: A): kotlin.Unit + +public final class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + private final fun foo(/*0*/ i: kotlin.Int): kotlin.Unit + private final fun foo(/*0*/ s: kotlin.String): kotlin.Unit + 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/scopes/protectedVisibility/syntheticSAMExtensions.kt b/compiler/testData/diagnostics/tests/scopes/protectedVisibility/syntheticSAMExtensions.kt index 5b0cb20ea29..c277886838f 100644 --- a/compiler/testData/diagnostics/tests/scopes/protectedVisibility/syntheticSAMExtensions.kt +++ b/compiler/testData/diagnostics/tests/scopes/protectedVisibility/syntheticSAMExtensions.kt @@ -11,7 +11,7 @@ class Data(var x: A) class B : A() { fun baz(a: A, b: B, d: Data) { - a.foo { } + a.foo { } b.foo { } @@ -26,5 +26,5 @@ class B : A() { } fun baz(a: A) { - a.foo { } + a.foo { } } diff --git a/compiler/testData/diagnostics/tests/syntheticExtensions/samAdapters/PackageLocal.kt b/compiler/testData/diagnostics/tests/syntheticExtensions/samAdapters/PackageLocal.kt index 30f213a7723..55819311328 100644 --- a/compiler/testData/diagnostics/tests/syntheticExtensions/samAdapters/PackageLocal.kt +++ b/compiler/testData/diagnostics/tests/syntheticExtensions/samAdapters/PackageLocal.kt @@ -4,7 +4,7 @@ package k import JavaClass fun foo(javaClass: JavaClass) { - javaClass.doSomething { } + javaClass.doSomething { } } // FILE: KotlinFile2.kt diff --git a/compiler/testData/diagnostics/tests/syntheticExtensions/samAdapters/Protected.kt b/compiler/testData/diagnostics/tests/syntheticExtensions/samAdapters/Protected.kt index 0c42aaf1f66..b0c999b88d7 100644 --- a/compiler/testData/diagnostics/tests/syntheticExtensions/samAdapters/Protected.kt +++ b/compiler/testData/diagnostics/tests/syntheticExtensions/samAdapters/Protected.kt @@ -4,15 +4,15 @@ package k import JavaClass fun foo(javaClass: JavaClass) { - javaClass.doSomething { + javaClass.doSomething { bar() - } + } } class X : JavaClass() { fun foo(other: JavaClass) { doSomething { bar() } - other.doSomething { bar() } + other.doSomething { bar() } } } diff --git a/compiler/testData/diagnostics/tests/typealias/typeAliasConstructorWrongVisibility.kt b/compiler/testData/diagnostics/tests/typealias/typeAliasConstructorWrongVisibility.kt index 7a927e6ac66..cb65a056d45 100644 --- a/compiler/testData/diagnostics/tests/typealias/typeAliasConstructorWrongVisibility.kt +++ b/compiler/testData/diagnostics/tests/typealias/typeAliasConstructorWrongVisibility.kt @@ -7,18 +7,18 @@ open class MyClass private constructor(val x: Int) { typealias MyAlias = MyClass -val test1 = MyAlias(1) -val test1a = MyClass(1) +val test1 = MyAlias(1) +val test1a = MyClass(1) -val test2 = MyAlias("") -val test2a = MyClass("") +val test2 = MyAlias("") +val test2a = MyClass("") val test3 = MyAlias(1.0) val test3a = MyClass(1.0) class MyDerived : MyClass(1.0) { - val test4 = MyAlias(1) - val test4a = MyClass(1) + val test4 = MyAlias(1) + val test4a = MyClass(1) val test5 = MyAlias("") val test5a = MyClass("") val test6 = MyAlias(1.0) diff --git a/compiler/testData/diagnostics/tests/typealias/typeAliasConstructorWrongVisibility.txt b/compiler/testData/diagnostics/tests/typealias/typeAliasConstructorWrongVisibility.txt index 98c114782e2..b8f5d91237e 100644 --- a/compiler/testData/diagnostics/tests/typealias/typeAliasConstructorWrongVisibility.txt +++ b/compiler/testData/diagnostics/tests/typealias/typeAliasConstructorWrongVisibility.txt @@ -1,9 +1,9 @@ package -public val test1: [ERROR : Type for MyAlias(1)] -public val test1a: [ERROR : Type for MyClass(1)] -public val test2: [ERROR : Type for MyAlias("")] -public val test2a: [ERROR : Type for MyClass("")] +public val test1: MyAlias /* = MyClass */ +public val test1a: MyClass +public val test2: MyAlias /* = MyClass */ +public val test2a: MyClass public val test3: MyAlias /* = MyClass */ public val test3a: MyClass @@ -19,8 +19,8 @@ public open class MyClass { public final class MyDerived : MyClass { public constructor MyDerived() - public final val test4: [ERROR : Type for MyAlias(1)] - public final val test4a: [ERROR : Type for MyClass(1)] + public final val test4: MyAlias /* = MyClass */ + public final val test4a: MyClass public final val test5: MyAlias /* = MyClass */ public final val test5a: MyClass public final val test6: MyAlias /* = MyClass */ diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index 51bd9aa5bb8..6ff4ec339b2 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -14530,6 +14530,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("onlyPrivateOverloadsDiagnostic.kt") + public void testOnlyPrivateOverloadsDiagnostic() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/overload/onlyPrivateOverloadsDiagnostic.kt"); + doTest(fileName); + } + @TestMetadata("OverloadFunRegularAndExt.kt") public void testOverloadFunRegularAndExt() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/overload/OverloadFunRegularAndExt.kt");