diff --git a/compiler/fir/analysis-tests/testData/resolve/properties/kotlinOverridesJavaComplex.kt b/compiler/fir/analysis-tests/testData/resolve/properties/kotlinOverridesJavaComplex.kt index 89d8068ffa2..764cc3c8833 100644 --- a/compiler/fir/analysis-tests/testData/resolve/properties/kotlinOverridesJavaComplex.kt +++ b/compiler/fir/analysis-tests/testData/resolve/properties/kotlinOverridesJavaComplex.kt @@ -13,17 +13,40 @@ public interface Psi { // FILE: Member.java public interface Member extends Psi { +} +// FILE: TypeParametersOwner.java + +import java.util.List; + +public interface TypeParametersOwner { + public List getTypeParameters(); +} + +// FILE: Klass.java + +public interface Klass extends TypeParametersOwner { } // FILE: Test.kt -public interface Light +fun List.single(): String = "" +fun List.single(): Int = 2 -public class LightMember : Light, Member { +fun listOf(): List {} + +public class LightMember : Member, Light() { override fun getName(): String = "Light" } +public class LightClassWrapper : Light(), Klass { + fun test() = typeParameters.single() +} + +public abstract class Light : Field, TypeParametersOwner { + fun getTypeParameters() = listOf() +} + public interface Field : Named public class LightField : LightMember(), Field { diff --git a/compiler/fir/analysis-tests/testData/resolve/properties/kotlinOverridesJavaComplex.txt b/compiler/fir/analysis-tests/testData/resolve/properties/kotlinOverridesJavaComplex.txt index eaf30f72de9..2f3d3dbf770 100644 --- a/compiler/fir/analysis-tests/testData/resolve/properties/kotlinOverridesJavaComplex.txt +++ b/compiler/fir/analysis-tests/testData/resolve/properties/kotlinOverridesJavaComplex.txt @@ -1,15 +1,41 @@ FILE: Test.kt - public abstract interface Light : R|kotlin/Any| { + public final fun R|kotlin/collections/List|.single(): R|kotlin/String| { + ^single String() } - public final class LightMember : R|Light|, R|Member| { + public final fun R|kotlin/collections/List|.single(): R|kotlin/Int| { + ^single Int(2) + } + public final fun listOf(): R|kotlin/collections/List| { + } + public final class LightMember : R|Member|, R|Light| { public constructor(): R|LightMember| { - super() + super() } public final override fun getName(): R|kotlin/String| { ^getName String(Light) } + } + public final class LightClassWrapper : R|Light|, R|Klass| { + public constructor(): R|LightClassWrapper| { + super() + } + + public final fun test(): R|kotlin/String| { + ^test this@R|/LightClassWrapper|.R|/Light.typeParameters|.R|/single|() + } + + } + public abstract class Light : R|Field|, R|TypeParametersOwner| { + public constructor(): R|Light| { + super() + } + + public final fun getTypeParameters(): R|kotlin/collections/List| { + ^getTypeParameters R|/listOf|() + } + } public abstract interface Field : R|Named| { } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt index 2a5894ff967..693cfbacee0 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt @@ -97,7 +97,14 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor override fun transformProperty(property: FirProperty, data: ResolutionMode): CompositeTransformResult { if (property is FirSyntheticProperty) { - transformSimpleFunction(property.getter.delegate, data) + val delegate = property.getter.delegate + if (delegate.origin == FirDeclarationOrigin.IntersectionOverride) { + val unwrapped = delegate.symbol.overriddenSymbol!!.fir + transformSimpleFunction(unwrapped, data) + delegate.replaceReturnTypeRef(unwrapped.returnTypeRef) + } else { + transformSimpleFunction(delegate, data) + } return property.compose() } return withTypeParametersOf(property) {