From f2bbae6a636610d98d923c7d25fed940bdb9e670 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 25 Apr 2019 10:41:18 +0300 Subject: [PATCH] [NI] Fix resolving callable references with typealias in ths #KT-31199 Fixed --- .../fir/FirDiagnosticsSmokeTestGenerated.java | 5 +++++ .../resolve/calls/tower/PSICallResolver.kt | 7 +++---- .../resolve/calls/model/KotlinCallArguments.kt | 3 ++- .../tests/callableReference/typealiases.kt | 16 ++++++++++++++++ .../tests/callableReference/typealiases.txt | 6 ++++++ .../checkers/DiagnosticsTestGenerated.java | 5 +++++ .../DiagnosticsUsingJavacTestGenerated.java | 5 +++++ 7 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/callableReference/typealiases.kt create mode 100644 compiler/testData/diagnostics/tests/callableReference/typealiases.txt diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java index 41b923e30c8..c763668d197 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java @@ -1709,6 +1709,11 @@ public class FirDiagnosticsSmokeTestGenerated extends AbstractFirDiagnosticsSmok runTest("compiler/testData/diagnostics/tests/callableReference/subtypeArgumentFromRHSForReference.kt"); } + @TestMetadata("typealiases.kt") + public void testTypealiases() throws Exception { + runTest("compiler/testData/diagnostics/tests/callableReference/typealiases.kt"); + } + @TestMetadata("unused.kt") public void testUnused() throws Exception { runTest("compiler/testData/diagnostics/tests/callableReference/unused.kt"); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt index b58f39a1e3b..7b2f4c353a1 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt @@ -681,10 +681,9 @@ class PSICallResolver( is DoubleColonLHS.Type -> { val qualifiedExpression = ktExpression.receiverExpression!!.let { it.referenceExpression() ?: it } val qualifier = expressionTypingContext.trace.get(BindingContext.QUALIFIER, qualifiedExpression) - if (qualifier is ClassQualifier) { - LHSResult.Type(qualifier, lhsResult.type.unwrap()) - } else { - LHSResult.Error + when (qualifier) { + is ClassQualifier, is TypeAliasQualifier -> LHSResult.Type(qualifier, lhsResult.type.unwrap()) + else -> LHSResult.Error } } } diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/KotlinCallArguments.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/KotlinCallArguments.kt index 68af828d346..efdd5636b82 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/KotlinCallArguments.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/KotlinCallArguments.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.resolve.calls.model import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.scopes.receivers.DetailedReceiver @@ -81,7 +82,7 @@ sealed class LHSResult { val unboundDetailedReceiver: ReceiverValueWithSmartCastInfo init { - assert(qualifier.descriptor is ClassDescriptor) { + assert(qualifier.descriptor is ClassDescriptor || qualifier.descriptor is TypeAliasDescriptor) { "Should be ClassDescriptor: ${qualifier.descriptor}" } diff --git a/compiler/testData/diagnostics/tests/callableReference/typealiases.kt b/compiler/testData/diagnostics/tests/callableReference/typealiases.kt new file mode 100644 index 00000000000..9aebf9a604f --- /dev/null +++ b/compiler/testData/diagnostics/tests/callableReference/typealiases.kt @@ -0,0 +1,16 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER +// !LANGUAGE: +NewInference +// !WITH_NEW_INFERENCE +// Issue: KT-31199 + +typealias Global = String + +fun String.toUpperCase(): String = TODO() + +inline fun Iterable.myMap(transform: (T) -> R): List { + TODO() +} + +fun usesGlobal(p: List) { + p.myMap(Global::toUpperCase) +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/callableReference/typealiases.txt b/compiler/testData/diagnostics/tests/callableReference/typealiases.txt new file mode 100644 index 00000000000..518b6670b2a --- /dev/null +++ b/compiler/testData/diagnostics/tests/callableReference/typealiases.txt @@ -0,0 +1,6 @@ +package + +public fun usesGlobal(/*0*/ p: kotlin.collections.List): kotlin.Unit +public inline fun kotlin.collections.Iterable.myMap(/*0*/ transform: (T) -> R): kotlin.collections.List +public fun kotlin.String.toUpperCase(): kotlin.String +public typealias Global = kotlin.String diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index 08b635e83b1..9a81f826c76 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -1716,6 +1716,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { runTest("compiler/testData/diagnostics/tests/callableReference/subtypeArgumentFromRHSForReference.kt"); } + @TestMetadata("typealiases.kt") + public void testTypealiases() throws Exception { + runTest("compiler/testData/diagnostics/tests/callableReference/typealiases.kt"); + } + @TestMetadata("unused.kt") public void testUnused() throws Exception { runTest("compiler/testData/diagnostics/tests/callableReference/unused.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index cc9e545e15d..0c1aed657c1 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -1711,6 +1711,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/callableReference/subtypeArgumentFromRHSForReference.kt"); } + @TestMetadata("typealiases.kt") + public void testTypealiases() throws Exception { + runTest("compiler/testData/diagnostics/tests/callableReference/typealiases.kt"); + } + @TestMetadata("unused.kt") public void testUnused() throws Exception { runTest("compiler/testData/diagnostics/tests/callableReference/unused.kt");