From 2bf6bd3724209dc1a31cc3c4df29a3aae820d488 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Mon, 20 May 2019 18:30:05 +0300 Subject: [PATCH] Do not consider descriptors equality as a reason not to refine type Otherwise, it results in skipping refinement for JobNode when requested from JVM module while it's necessary because CompletionHandlerBase's content depends on the module --- .../jetbrains/kotlin/types/KotlinTypeFactory.kt | 2 -- .../a_common_dep(stdlib)/common.kt | 11 +++++++++++ .../a_jvm_dep(stdlib)/jvm.kt | 15 +++++++++++++++ .../MultiPlatformHighlightingTestGenerated.java | 5 +++++ 4 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 idea/testData/multiModuleHighlighting/multiplatform/completionHandlexCoroutines/a_common_dep(stdlib)/common.kt create mode 100644 idea/testData/multiModuleHighlighting/multiplatform/completionHandlexCoroutines/a_jvm_dep(stdlib)/jvm.kt diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/KotlinTypeFactory.kt b/core/descriptors/src/org/jetbrains/kotlin/types/KotlinTypeFactory.kt index 78607a33815..ed2ce540970 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/KotlinTypeFactory.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/KotlinTypeFactory.kt @@ -100,8 +100,6 @@ object KotlinTypeFactory { val basicDescriptor = constructor.declarationDescriptor val descriptor = basicDescriptor?.let { kotlinTypeRefiner.refineDescriptor(it) } ?: return null - if (descriptor == basicDescriptor) return null - if (descriptor is TypeAliasDescriptor) { return ExpandedTypeOrRefinedConstructor(descriptor.computeExpandedType(arguments), null) } diff --git a/idea/testData/multiModuleHighlighting/multiplatform/completionHandlexCoroutines/a_common_dep(stdlib)/common.kt b/idea/testData/multiModuleHighlighting/multiplatform/completionHandlexCoroutines/a_common_dep(stdlib)/common.kt new file mode 100644 index 00000000000..57eb6b6cbad --- /dev/null +++ b/idea/testData/multiModuleHighlighting/multiplatform/completionHandlexCoroutines/a_common_dep(stdlib)/common.kt @@ -0,0 +1,11 @@ +package foo + +internal expect abstract class CompletionHandlerBase() { + abstract fun invoke(cause: Throwable?) +} + +internal abstract class JobNode : CompletionHandlerBase() + +public typealias CompletionHandler = (cause: Throwable?) -> Unit + +fun bar(x: CompletionHandler) { x.hashCode() } diff --git a/idea/testData/multiModuleHighlighting/multiplatform/completionHandlexCoroutines/a_jvm_dep(stdlib)/jvm.kt b/idea/testData/multiModuleHighlighting/multiplatform/completionHandlexCoroutines/a_jvm_dep(stdlib)/jvm.kt new file mode 100644 index 00000000000..a228955f64f --- /dev/null +++ b/idea/testData/multiModuleHighlighting/multiplatform/completionHandlexCoroutines/a_jvm_dep(stdlib)/jvm.kt @@ -0,0 +1,15 @@ +package foo + +private class CancelFutureOnCancel : JobNode() { + override fun invoke(cause: Throwable?) { + + } +} + +internal actual abstract class CompletionHandlerBase actual constructor() : CompletionHandler { + actual abstract override fun invoke(cause: Throwable?) +} + +fun main() { + bar(CancelFutureOnCancel()) +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiPlatformHighlightingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiPlatformHighlightingTestGenerated.java index 6ffe4d712a1..c847c6312cb 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiPlatformHighlightingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiPlatformHighlightingTestGenerated.java @@ -44,6 +44,11 @@ public class MultiPlatformHighlightingTestGenerated extends AbstractMultiPlatfor runTest("idea/testData/multiModuleHighlighting/multiplatform/catchHeaderExceptionInPlatformModule/"); } + @TestMetadata("completionHandlexCoroutines") + public void testCompletionHandlexCoroutines() throws Exception { + runTest("idea/testData/multiModuleHighlighting/multiplatform/completionHandlexCoroutines/"); + } + @TestMetadata("contracts") public void testContracts() throws Exception { runTest("idea/testData/multiModuleHighlighting/multiplatform/contracts/");