From ee1ee965a16ef422c4c1b1e4ca5e4bd21519963c Mon Sep 17 00:00:00 2001 From: Roman Efremov Date: Tue, 16 Jan 2024 18:24:24 +0100 Subject: [PATCH] [FIR] Fix incorrect work of K2 expect-actual matcher when actual is Java ...field, which is fake override. This was failing in Stdlib with `expect HashMap` + actual typealias to `java.util.HashMap`. ^KT-63624 Fixed --- .../mpp/FirExpectActualMatchingContextImpl.kt | 2 +- ...licitActualFakeOverride_AbstractMap.fir.kt | 2 +- ...plicitActualFakeOverride_AbstractMap.ll.kt | 2 +- ...pertyAgainstFakeOverrideOfJavaField.fir.kt | 28 ------------------- .../propertyAgainstFakeOverrideOfJavaField.kt | 1 + 5 files changed, 4 insertions(+), 31 deletions(-) delete mode 100644 compiler/testData/diagnostics/tests/multiplatform/java/propertyAgainstFakeOverrideOfJavaField.fir.kt diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatchingContextImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatchingContextImpl.kt index 0a13253e913..acc11de4a44 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatchingContextImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/mpp/FirExpectActualMatchingContextImpl.kt @@ -437,7 +437,7 @@ class FirExpectActualMatchingContextImpl private constructor( get() = asSymbol().rawStatus.hasStableParameterNames override val CallableSymbolMarker.isJavaField: Boolean - get() = this is FirFieldSymbol && fir.isJava + get() = this is FirFieldSymbol && this.fir.unwrapFakeOverrides().isJava override val DeclarationSymbolMarker.annotations: List get() = asSymbol().resolvedAnnotationsWithArguments.map(::AnnotationCallInfoImpl) diff --git a/compiler/testData/diagnostics/tests/multiplatform/implicitActualFakeOverride_AbstractMap.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/implicitActualFakeOverride_AbstractMap.fir.kt index b89335b2cb1..51a4179d4f1 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/implicitActualFakeOverride_AbstractMap.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/implicitActualFakeOverride_AbstractMap.fir.kt @@ -12,4 +12,4 @@ import java.util.AbstractMap -public actual abstract class AbstractMutableMap() : MutableMap, AbstractMap() +public actual abstract class AbstractMutableMap() : MutableMap, AbstractMap() diff --git a/compiler/testData/diagnostics/tests/multiplatform/implicitActualFakeOverride_AbstractMap.ll.kt b/compiler/testData/diagnostics/tests/multiplatform/implicitActualFakeOverride_AbstractMap.ll.kt index edfc21b21c6..3a83499727c 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/implicitActualFakeOverride_AbstractMap.ll.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/implicitActualFakeOverride_AbstractMap.ll.kt @@ -12,4 +12,4 @@ public expect abstract class AbstractMutableMap : MutableMap { import java.util.AbstractMap -public actual abstract class AbstractMutableMap() : MutableMap, AbstractMap() +public actual abstract class AbstractMutableMap() : MutableMap, AbstractMap() diff --git a/compiler/testData/diagnostics/tests/multiplatform/java/propertyAgainstFakeOverrideOfJavaField.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/java/propertyAgainstFakeOverrideOfJavaField.fir.kt deleted file mode 100644 index 63b9f30e40a..00000000000 --- a/compiler/testData/diagnostics/tests/multiplatform/java/propertyAgainstFakeOverrideOfJavaField.fir.kt +++ /dev/null @@ -1,28 +0,0 @@ -// MODULE: m1-common -// FILE: common.kt -expect class MyHashMap { - val values: Collection -} - -// MODULE: m2-jvm()()(m1-common) -// FILE: jvm.kt -interface MyMap { - val values: Collection -} - -actual typealias MyHashMap = MyHashMapJava - -// FILE: MyHashMapJava.java -import java.util.Collection; - -public final class MyHashMapJava extends AbstractMyHashMap { - // fake override of field AbstractMyHashMap.values -} -abstract class AbstractMyHashMap implements MyMap { - protected Collection values; - - @Override - public Collection getValues() { - return values; - } -} diff --git a/compiler/testData/diagnostics/tests/multiplatform/java/propertyAgainstFakeOverrideOfJavaField.kt b/compiler/testData/diagnostics/tests/multiplatform/java/propertyAgainstFakeOverrideOfJavaField.kt index 9621063a284..e06d24fa2a2 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/java/propertyAgainstFakeOverrideOfJavaField.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/java/propertyAgainstFakeOverrideOfJavaField.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // MODULE: m1-common // FILE: common.kt expect class MyHashMap {