diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt index 0d169c5f8b0..abfe8bef1d1 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.resolve.calls.ConeInferenceContext import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate +import org.jetbrains.kotlin.fir.resolve.calls.isSuperReferenceExpression import org.jetbrains.kotlin.fir.resolve.diagnostics.FirUnresolvedNameError import org.jetbrains.kotlin.fir.resolve.substitution.AbstractConeSubstitutor import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType @@ -371,8 +372,10 @@ fun BodyResolveComponents.typeFromCallee(access: T): FirReso val receiverResultType = explicitReceiver.resultType if (receiverResultType is FirResolvedTypeRef) { receiverResultType.type.isNullable - } else { + } else if (receiverResultType !is FirComposedSuperTypeRef || !explicitReceiver.isSuperReferenceExpression()){ throw AssertionError("Receiver ${explicitReceiver.render()} type is unresolved: ${receiverResultType.render()}") + } else { + false } } else { false diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirTowerResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirTowerResolver.kt index 1ffefe07961..ee12515f773 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirTowerResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirTowerResolver.kt @@ -13,17 +13,20 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl import org.jetbrains.kotlin.fir.declarations.isCompanion import org.jetbrains.kotlin.fir.declarations.isInner import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier +import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents +import org.jetbrains.kotlin.fir.resolve.scope import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.ProcessorAction +import org.jetbrains.kotlin.fir.scopes.impl.FirCompositeScope import org.jetbrains.kotlin.fir.scopes.impl.FirExplicitSimpleImportingScope import org.jetbrains.kotlin.fir.scopes.impl.FirLocalScope import org.jetbrains.kotlin.fir.scopes.impl.FirStaticScope import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol -import org.jetbrains.kotlin.fir.types.ConeIntegerLiteralType -import org.jetbrains.kotlin.fir.types.coneTypeSafe +import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.FirImplicitBuiltinTypeRef import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind @@ -348,6 +351,27 @@ class FirTowerResolver( return collector } + private fun runResolverForSuperReceiver( + info: CallInfo, + collector: CandidateCollector, + superTypeRef: FirTypeRef, + manager: TowerResolveManager + ): CandidateCollector { + val scope = when (superTypeRef) { + is FirResolvedTypeRef -> superTypeRef.type.scope(session, components.scopeSession) + is FirComposedSuperTypeRef -> FirCompositeScope( + superTypeRef.superTypeRefs.mapNotNullTo(mutableListOf()) { it.type.scope(session, components.scopeSession) } + ) + else -> null + } ?: return collector + manager.processLevel( + ScopeTowerLevel( + session, components, scope + ), info, TowerGroup.Member, explicitReceiverKind = ExplicitReceiverKind.DISPATCH_RECEIVER + ) + return collector + } + internal fun enqueueResolverForInvoke( info: CallInfo, invokeReceiverValue: ExpressionReceiverValue, @@ -459,7 +483,15 @@ class FirTowerResolver( return when (val receiver = info.explicitReceiver) { is FirResolvedQualifier -> runResolverForQualifierReceiver(info, collector, receiver, manager) null -> runResolverForNoReceiver(info, collector, manager) - else -> runResolverForExpressionReceiver(info, collector, receiver, manager) + else -> { + if (receiver is FirQualifiedAccessExpression) { + val calleeReference = receiver.calleeReference + if (calleeReference is FirSuperReference) { + return runResolverForSuperReceiver(info, collector, receiver.typeRef, manager) + } + } + runResolverForExpressionReceiver(info, collector, receiver, manager) + } } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolverParts.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolverParts.kt index d308d82adaf..b0460bf7e76 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolverParts.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolverParts.kt @@ -8,7 +8,10 @@ package org.jetbrains.kotlin.fir.resolve.calls import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier +import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol @@ -33,6 +36,13 @@ abstract class ResolutionStage { abstract class CheckerStage : ResolutionStage() +internal fun FirExpression.isSuperReferenceExpression(): Boolean { + return if (this is FirQualifiedAccessExpression) { + val calleeReference = calleeReference + calleeReference is FirSuperReference + } else false +} + internal object CheckExplicitReceiverConsistency : ResolutionStage() { override suspend fun check(candidate: Candidate, sink: CheckerSink, callInfo: CallInfo) { val receiverKind = candidate.explicitReceiverKind @@ -40,7 +50,7 @@ internal object CheckExplicitReceiverConsistency : ResolutionStage() { // TODO: add invoke cases when (receiverKind) { NO_EXPLICIT_RECEIVER -> { - if (explicitReceiver != null && explicitReceiver !is FirResolvedQualifier) { + if (explicitReceiver != null && explicitReceiver !is FirResolvedQualifier && !explicitReceiver.isSuperReferenceExpression()) { return sink.yieldApplicability(CandidateApplicability.WRONG_RECEIVER) } } @@ -106,7 +116,10 @@ internal sealed class CheckReceivers : ResolutionStage() { val explicitReceiverKind = candidate.explicitReceiverKind if (expectedReceiverType != null) { - if (explicitReceiverExpression != null && explicitReceiverKind.shouldBeCheckedAgainstExplicit()) { + if (explicitReceiverExpression != null && + explicitReceiverKind.shouldBeCheckedAgainstExplicit() && + !explicitReceiverExpression.isSuperReferenceExpression() + ) { candidate.resolveArgumentExpression( candidate.csBuilder, argument = explicitReceiverExpression, diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index 22b166c0722..5acb3f5c41e 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -89,13 +89,24 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) : qualifiedAccessExpression.resultType = callee.superTypeRef } else -> { - val superTypeRefFromStack = implicitReceiverStack.lastDispatchReceiver() - ?.boundSymbol?.phasedFir?.superTypeRefs?.firstOrNull() - ?: FirErrorTypeRefImpl( - qualifiedAccessExpression.source, FirSimpleDiagnostic("No super type", DiagnosticKind.NoSupertype) - ) - qualifiedAccessExpression.resultType = superTypeRefFromStack - callee.replaceSuperTypeRef(superTypeRefFromStack) + val superTypeRefs = implicitReceiverStack.lastDispatchReceiver()?.boundSymbol?.phasedFir?.superTypeRefs + val resultType = when { + superTypeRefs?.isNotEmpty() != true -> { + FirErrorTypeRefImpl( + qualifiedAccessExpression.source, FirSimpleDiagnostic("No super type", DiagnosticKind.NoSupertype) + ) + } + superTypeRefs.size == 1 -> { + superTypeRefs.single() + } + else -> { + FirComposedSuperTypeRefImpl(qualifiedAccessExpression.source).apply { + this.superTypeRefs += superTypeRefs.map { it as FirResolvedTypeRef } + } + } + } + qualifiedAccessExpression.resultType = resultType + callee.replaceSuperTypeRef(resultType) } } qualifiedAccessExpression diff --git a/compiler/fir/resolve/testData/resolve/problems/incorrectSuperCall.kt b/compiler/fir/resolve/testData/resolve/problems/incorrectSuperCall.kt index 336125e9a9e..28cad076bb6 100644 --- a/compiler/fir/resolve/testData/resolve/problems/incorrectSuperCall.kt +++ b/compiler/fir/resolve/testData/resolve/problems/incorrectSuperCall.kt @@ -9,8 +9,8 @@ open class B { class C : A, B() { override fun foo() { - super.foo() + super.foo() - super.bar() // should be ambiguity + super.bar() // should be ambiguity (NB: really we should have overridden bar in C) } } diff --git a/compiler/fir/resolve/testData/resolve/problems/incorrectSuperCall.txt b/compiler/fir/resolve/testData/resolve/problems/incorrectSuperCall.txt index ccc556f4b13..41ae7ccb0fc 100644 --- a/compiler/fir/resolve/testData/resolve/problems/incorrectSuperCall.txt +++ b/compiler/fir/resolve/testData/resolve/problems/incorrectSuperCall.txt @@ -22,8 +22,8 @@ FILE: incorrectSuperCall.kt } public final override fun foo(): R|kotlin/Unit| { - super.#() - super.R|/A.bar|() + super.R|/B.foo|() + super.#() } } diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveBench.kt b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveBench.kt index 991e8254672..3875f0b0aea 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveBench.kt +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirResolveBench.kt @@ -268,6 +268,8 @@ class FirResolveBench(val withProgress: Boolean) { visitTypeRef(implicitTypeRef) } + override fun visitComposedSuperTypeRef(composedSuperTypeRef: FirComposedSuperTypeRef) {} + override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef) { resolvedTypes++ val type = resolvedTypeRef.type diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/types/FirComposedSuperTypeRef.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/types/FirComposedSuperTypeRef.kt new file mode 100644 index 00000000000..922bf4de744 --- /dev/null +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/types/FirComposedSuperTypeRef.kt @@ -0,0 +1,24 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.types + +import org.jetbrains.kotlin.fir.FirPureAbstractElement +import org.jetbrains.kotlin.fir.FirSourceElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +abstract class FirComposedSuperTypeRef : FirPureAbstractElement(), FirTypeRef { + abstract override val source: FirSourceElement? + abstract override val annotations: List + abstract val superTypeRefs: List + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitComposedSuperTypeRef(this, data) +} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/types/impl/FirComposedSuperTypeRefImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/types/impl/FirComposedSuperTypeRefImpl.kt new file mode 100644 index 00000000000..7f803a021ed --- /dev/null +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/types/impl/FirComposedSuperTypeRefImpl.kt @@ -0,0 +1,36 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.types.impl + +import org.jetbrains.kotlin.fir.FirSourceElement +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement +import org.jetbrains.kotlin.fir.types.FirComposedSuperTypeRef +import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +class FirComposedSuperTypeRefImpl( + override val source: FirSourceElement? +) : FirComposedSuperTypeRef(), FirAbstractAnnotatedElement { + override val annotations: MutableList = mutableListOf() + override val superTypeRefs: MutableList = mutableListOf() + + override fun acceptChildren(visitor: FirVisitor, data: D) { + annotations.forEach { it.accept(visitor, data) } + superTypeRefs.forEach { it.accept(visitor, data) } + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirComposedSuperTypeRefImpl { + annotations.transformInplace(transformer, data) + superTypeRefs.transformInplace(transformer, data) + return this + } +} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt index 953f3ab2d41..f3b04331e25 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt @@ -116,6 +116,7 @@ import org.jetbrains.kotlin.fir.types.FirDynamicTypeRef import org.jetbrains.kotlin.fir.types.FirFunctionTypeRef import org.jetbrains.kotlin.fir.types.FirResolvedFunctionTypeRef import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef +import org.jetbrains.kotlin.fir.types.FirComposedSuperTypeRef import org.jetbrains.kotlin.fir.contracts.FirContractDescription import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult @@ -568,6 +569,10 @@ abstract class FirTransformer : FirVisitor { + return transformElement(composedSuperTypeRef, data) + } + open fun transformContractDescription(contractDescription: FirContractDescription, data: D): CompositeTransformResult { return transformElement(contractDescription, data) } @@ -1016,6 +1021,10 @@ abstract class FirTransformer : FirVisitor { + return transformComposedSuperTypeRef(composedSuperTypeRef, data) + } + final override fun visitContractDescription(contractDescription: FirContractDescription, data: D): CompositeTransformResult { return transformContractDescription(contractDescription, data) } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt index b964ab22fe0..1ffe1a792a6 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt @@ -116,6 +116,7 @@ import org.jetbrains.kotlin.fir.types.FirDynamicTypeRef import org.jetbrains.kotlin.fir.types.FirFunctionTypeRef import org.jetbrains.kotlin.fir.types.FirResolvedFunctionTypeRef import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef +import org.jetbrains.kotlin.fir.types.FirComposedSuperTypeRef import org.jetbrains.kotlin.fir.contracts.FirContractDescription /* @@ -346,6 +347,8 @@ abstract class FirVisitor { open fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: D): R = visitElement(implicitTypeRef, data) + open fun visitComposedSuperTypeRef(composedSuperTypeRef: FirComposedSuperTypeRef, data: D): R = visitElement(composedSuperTypeRef, data) + open fun visitContractDescription(contractDescription: FirContractDescription, data: D): R = visitElement(contractDescription, data) } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt index ff1663c3267..b4886eb86e1 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt @@ -116,6 +116,7 @@ import org.jetbrains.kotlin.fir.types.FirDynamicTypeRef import org.jetbrains.kotlin.fir.types.FirFunctionTypeRef import org.jetbrains.kotlin.fir.types.FirResolvedFunctionTypeRef import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef +import org.jetbrains.kotlin.fir.types.FirComposedSuperTypeRef import org.jetbrains.kotlin.fir.contracts.FirContractDescription /* @@ -566,6 +567,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitElement(implicitTypeRef) } + open fun visitComposedSuperTypeRef(composedSuperTypeRef: FirComposedSuperTypeRef) { + visitElement(composedSuperTypeRef) + } + open fun visitContractDescription(contractDescription: FirContractDescription) { visitElement(contractDescription) } @@ -1014,6 +1019,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitImplicitTypeRef(implicitTypeRef) } + final override fun visitComposedSuperTypeRef(composedSuperTypeRef: FirComposedSuperTypeRef, data: Nothing?) { + visitComposedSuperTypeRef(composedSuperTypeRef) + } + final override fun visitContractDescription(contractDescription: FirContractDescription, data: Nothing?) { visitContractDescription(contractDescription) } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt index b9f0d4ecdd5..64c46b5a546 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt @@ -137,6 +137,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() { val functionTypeRef = element("FunctionTypeRef", TypeRef, typeRefWithNullability) val resolvedFunctionTypeRef = element("ResolvedFunctionTypeRef", TypeRef, resolvedTypeRef, functionTypeRef) val implicitTypeRef = element("ImplicitTypeRef", TypeRef, typeRef) + val composedSuperTypeRef = element("ComposedSuperTypeRef", TypeRef, typeRef) val contractDescription = element("ContractDescription", Contracts) } \ No newline at end of file diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt index ee1ec70b0a5..62c636a96ba 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt @@ -513,6 +513,8 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() defaultEmptyList("annotations") } + impl(composedSuperTypeRef) + impl(reference, "FirStubReference") { default("source") { value = "null" diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt index 1eeeb22e838..948bcb239af 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt @@ -521,6 +521,10 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild +returnTypeRef } + composedSuperTypeRef.configure { + +fieldList("superTypeRefs", resolvedTypeRef) + } + thisReceiverExpression.configure { +field("calleeReference", thisReference) } diff --git a/compiler/testData/codegen/box/javaInterop/objectMethods/cloneCallsSuperAndModifies.kt b/compiler/testData/codegen/box/javaInterop/objectMethods/cloneCallsSuperAndModifies.kt index b609d2c3fc8..9363baa10a6 100644 --- a/compiler/testData/codegen/box/javaInterop/objectMethods/cloneCallsSuperAndModifies.kt +++ b/compiler/testData/codegen/box/javaInterop/objectMethods/cloneCallsSuperAndModifies.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // IGNORE_BACKEND: JS_IR // TODO: muted automatically, investigate should it be ran for JS or not // IGNORE_BACKEND: JS, NATIVE diff --git a/compiler/testData/codegen/box/javaInterop/objectMethods/cloneHierarchy.kt b/compiler/testData/codegen/box/javaInterop/objectMethods/cloneHierarchy.kt index d68c6862329..123e036c5cf 100644 --- a/compiler/testData/codegen/box/javaInterop/objectMethods/cloneHierarchy.kt +++ b/compiler/testData/codegen/box/javaInterop/objectMethods/cloneHierarchy.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM open class A : Cloneable { diff --git a/compiler/testData/codegen/box/jvm8/defaults/kt14243_prop.kt b/compiler/testData/codegen/box/jvm8/defaults/kt14243_prop.kt index 4fd8c0aff12..4604088acd1 100644 --- a/compiler/testData/codegen/box/jvm8/defaults/kt14243_prop.kt +++ b/compiler/testData/codegen/box/jvm8/defaults/kt14243_prop.kt @@ -1,5 +1,4 @@ // !JVM_DEFAULT_MODE: enable -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 // WITH_RUNTIME diff --git a/compiler/testData/codegen/box/jvm8/kt14243_prop.kt b/compiler/testData/codegen/box/jvm8/kt14243_prop.kt index 08f99f340a1..eb97357a706 100644 --- a/compiler/testData/codegen/box/jvm8/kt14243_prop.kt +++ b/compiler/testData/codegen/box/jvm8/kt14243_prop.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // JVM_TARGET: 1.8 diff --git a/compiler/testData/codegen/box/jvmField/superCall.kt b/compiler/testData/codegen/box/jvmField/superCall.kt index c55e079db19..6b0bf6ac279 100644 --- a/compiler/testData/codegen/box/jvmField/superCall.kt +++ b/compiler/testData/codegen/box/jvmField/superCall.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // WITH_RUNTIME diff --git a/compiler/testData/codegen/box/jvmField/superCall2.kt b/compiler/testData/codegen/box/jvmField/superCall2.kt index 96bda4e37f2..9a133531ba3 100644 --- a/compiler/testData/codegen/box/jvmField/superCall2.kt +++ b/compiler/testData/codegen/box/jvmField/superCall2.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // WITH_RUNTIME diff --git a/compiler/testData/codegen/box/mangling/internalOverrideSuperCall.kt b/compiler/testData/codegen/box/mangling/internalOverrideSuperCall.kt index e5530d5d9e3..64424c1dd80 100644 --- a/compiler/testData/codegen/box/mangling/internalOverrideSuperCall.kt +++ b/compiler/testData/codegen/box/mangling/internalOverrideSuperCall.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR open class A { internal open val field = "F" diff --git a/compiler/testData/codegen/box/mangling/publicOverrideSuperCall.kt b/compiler/testData/codegen/box/mangling/publicOverrideSuperCall.kt index 40bcb6b6077..422f510101e 100644 --- a/compiler/testData/codegen/box/mangling/publicOverrideSuperCall.kt +++ b/compiler/testData/codegen/box/mangling/publicOverrideSuperCall.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR open class A { internal open val field = "F" diff --git a/compiler/testData/codegen/box/super/kt14243_prop.kt b/compiler/testData/codegen/box/super/kt14243_prop.kt index e221b3d5339..73979c08226 100644 --- a/compiler/testData/codegen/box/super/kt14243_prop.kt +++ b/compiler/testData/codegen/box/super/kt14243_prop.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR interface Z { val value: T diff --git a/compiler/testData/diagnostics/tests/enum/kt8972_cloneNotAllowed.fir.kt b/compiler/testData/diagnostics/tests/enum/kt8972_cloneNotAllowed.fir.kt index 6a63b936836..fe81d8c5036 100644 --- a/compiler/testData/diagnostics/tests/enum/kt8972_cloneNotAllowed.fir.kt +++ b/compiler/testData/diagnostics/tests/enum/kt8972_cloneNotAllowed.fir.kt @@ -2,6 +2,6 @@ enum class E : Cloneable { A; override fun clone(): Any { - return super.clone() + return super.clone() } } diff --git a/compiler/testData/diagnostics/tests/extensions/ExtensionsCalledOnSuper.fir.kt b/compiler/testData/diagnostics/tests/extensions/ExtensionsCalledOnSuper.fir.kt index 165fbc3e271..7c839bac648 100644 --- a/compiler/testData/diagnostics/tests/extensions/ExtensionsCalledOnSuper.fir.kt +++ b/compiler/testData/diagnostics/tests/extensions/ExtensionsCalledOnSuper.fir.kt @@ -14,9 +14,9 @@ class C : T { fun T.buzz() {} fun T.buzz1() {} super.foo() // OK - super.bar() // Error + super.bar() // Error super.buzz() // OK, resolved to a member - super.buzz1() // Resolved to an extension + super.buzz1() // Resolved to an extension super.buzz1("") // Resolved to a member } } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/Super.fir.kt b/compiler/testData/diagnostics/tests/thisAndSuper/Super.fir.kt index 0f998cc8c11..d8d01cb2bc7 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/Super.fir.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/Super.fir.kt @@ -12,7 +12,7 @@ class A() : C(), T { fun test() { super super - super.foo() + super.foo() super.foo() super.bar() super@A.foo() diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/superInExtensionFunctionCall.fir.kt b/compiler/testData/diagnostics/tests/thisAndSuper/superInExtensionFunctionCall.fir.kt index 3e04469afb2..7e0f0a7c3f3 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/superInExtensionFunctionCall.fir.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/superInExtensionFunctionCall.fir.kt @@ -4,6 +4,6 @@ fun Any.extension(arg: Any?) {} class A1 { fun test() { - super.extension(null) // Call to an extension function + super.extension(null) // Call to an extension function } } diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/ambiguousSuperWithGenerics.fir.kt b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/ambiguousSuperWithGenerics.fir.kt index 23d89c88fac..3ed2ab250f5 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/ambiguousSuperWithGenerics.fir.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/ambiguousSuperWithGenerics.fir.kt @@ -11,28 +11,28 @@ interface GenericBaseInterface { class GenericDerivedClass : GenericBaseClass(), GenericBaseInterface { override fun foo(x: T): T = super.foo(x) - override fun bar(x: T): T = super.bar(x) + override fun bar(x: T): T = super.bar(x) override fun ambiguous(x: T): T = - super.ambiguous(x) + super.ambiguous(x) } class SpecializedDerivedClass : GenericBaseClass(), GenericBaseInterface { override fun foo(x: Int): Int = super.foo(x) - override fun bar(x: String): String = super.bar(x) + override fun bar(x: String): String = super.bar(x) override fun ambiguous(x: String): String = - super.ambiguous(x) + super.ambiguous(x) override fun ambiguous(x: Int): Int = super.ambiguous(x) } class MixedDerivedClass : GenericBaseClass(), GenericBaseInterface { override fun foo(x: Int): Int = super.foo(x) - override fun bar(x: T): T = super.bar(x) + override fun bar(x: T): T = super.bar(x) override fun ambiguous(x: Int): Int = super.ambiguous(x) override fun ambiguous(x: T): T = - super.ambiguous(x) + super.ambiguous(x) } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuper.fir.kt b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuper.fir.kt index 74ce71eb7a5..7d385c599cb 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuper.fir.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuper.fir.kt @@ -45,13 +45,13 @@ class Derived : Base(), Interface { super.prop fun getAmbiguousSuperProp(): Int = - super.ambiguousProp + super.ambiguousProp fun callsFunFromSuperInterface() { - super.bar() + super.bar() } fun callsAmbiguousSuperFun() { - super.ambiguous() + super.ambiguous() } } diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithAbstractMembers.fir.kt b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithAbstractMembers.fir.kt index 8908eb77be2..db0680cf507 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithAbstractMembers.fir.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithAbstractMembers.fir.kt @@ -22,18 +22,18 @@ interface I { class B : A(), I { override val x: Int = 12345 - override val y: Int = super.y + override val y: Int = super.y override fun foo(): Int { super.foo() - return super.x + return super.x } override fun bar() { - super.bar() + super.bar() } override fun qux() { - super.qux() + super.qux() } } diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithDeeperHierarchies.fir.kt b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithDeeperHierarchies.fir.kt index a6f0af2a1b6..a0eebd4d95f 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithDeeperHierarchies.fir.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithDeeperHierarchies.fir.kt @@ -43,8 +43,8 @@ class DeepDerived : DeepBase(), DeepInterface { super.deeperBaseProp fun callsSuperInterfaceFuns() { - super.deeperInterfaceFun() - super.deepInterfaceFun() + super.deeperInterfaceFun() + super.deepInterfaceFun() super.deeperInterfaceFun() super.deepInterfaceFun() } diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithGenerics.fir.kt b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithGenerics.fir.kt index 0f9df74211a..5291a7dad0e 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithGenerics.fir.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithGenerics.fir.kt @@ -8,15 +8,15 @@ interface GenericBaseInterface { class GenericDerivedClass : GenericBaseClass(), GenericBaseInterface { override fun foo(x: T): T = super.foo(x) - override fun bar(x: T): T = super.bar(x) + override fun bar(x: T): T = super.bar(x) } class SpecializedDerivedClass : GenericBaseClass(), GenericBaseInterface { override fun foo(x: Int): Int = super.foo(x) - override fun bar(x: String): String = super.bar(x) + override fun bar(x: String): String = super.bar(x) } class MixedDerivedClass : GenericBaseClass(), GenericBaseInterface { override fun foo(x: Int): Int = super.foo(x) - override fun bar(x: T): T = super.bar(x) + override fun bar(x: T): T = super.bar(x) } diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithInnerClass.fir.kt b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithInnerClass.fir.kt index 414b53a7d0c..5381b3d03f4 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithInnerClass.fir.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithInnerClass.fir.kt @@ -16,7 +16,7 @@ class C : A(), B { } override fun bar() { - super@C.bar() + super@C.bar() } inner class D : A(), Q { @@ -26,8 +26,8 @@ class C : A(), B { } override fun qux() { - super@C.qux() - super@D.qux() + super@C.qux() + super@D.qux() } } } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithInterfaces.fir.kt b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithInterfaces.fir.kt index 749014aee50..2febf879ae5 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithInterfaces.fir.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithInterfaces.fir.kt @@ -20,9 +20,9 @@ interface AnotherInterface { interface DerivedInterface: Interface, AnotherInterface { override fun foo() { super.foo() } override fun ambiguous() { - super.ambiguous() + super.ambiguous() } override val ambiguousProp: Int - get() = super.ambiguousProp + get() = super.ambiguousProp } diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithUnresolvedBase.fir.kt b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithUnresolvedBase.fir.kt index 433959a2176..dc242d5da8f 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithUnresolvedBase.fir.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/unqualifiedSuperWithUnresolvedBase.fir.kt @@ -41,13 +41,13 @@ class ClassDerivedFromUnresolved : Base(), Interface, Unresolved { super.prop fun getAmbiguousSuperProp(): Int = - super.ambiguousProp + super.ambiguousProp fun callsFunFromSuperInterface() { - super.bar() + super.bar() } fun callsAmbiguousSuperFun() { - super.ambiguous() + super.ambiguous() } } diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/withMethodOverriddenInAnotherSupertype.fir.kt b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/withMethodOverriddenInAnotherSupertype.fir.kt index 2f18bb69586..955cf023a96 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/withMethodOverriddenInAnotherSupertype.fir.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/unqualifiedSuper/withMethodOverriddenInAnotherSupertype.fir.kt @@ -15,7 +15,7 @@ class Test1 : C(), A { // Abstract 'foo' defined in 'C' wins against non-abstract 'foo' defined in 'A', // because 'C' is a subclass of 'A' (and 'C::foo' overrides 'A::foo'), // even though 'A' is explicitly listed in supertypes list for 'D'. - super.foo() + super.foo() } } @@ -23,7 +23,7 @@ class Test2 : C(), A, Unrelated { override fun foo() { // This is ok, because there's a non-abstract 'foo' in 'Unrelated', // which is not overridden by abstract 'foo' in 'C'. - super.foo() + super.foo() super.foo() } } \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.fir.kt index 55ae915c290..ad5f97039af 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.fir.kt @@ -49,7 +49,7 @@ class ManySupers2: Foo2(), C { fun foo() { super.test() super.test() - super.test() + super.test() } } @@ -57,6 +57,6 @@ class ManySupers3: Bar2(), C { fun foo() { super.test() super.test() - super.test() + super.test() } } \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithStdLib/targetedBuiltIns/blackListed.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/targetedBuiltIns/blackListed.fir.kt index cb006fee726..cb813c3dc2d 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/targetedBuiltIns/blackListed.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/targetedBuiltIns/blackListed.fir.kt @@ -3,7 +3,7 @@ abstract class A : MutableList { override fun sort(/*0*/ p0: java.util.Comparator) { - super.sort(p0) + super.sort(p0) } } diff --git a/compiler/testData/ir/irText/classes/enumWithMultipleCtors.fir.txt b/compiler/testData/ir/irText/classes/enumWithMultipleCtors.fir.txt index 0a5985b0a96..7c28536f8a1 100644 --- a/compiler/testData/ir/irText/classes/enumWithMultipleCtors.fir.txt +++ b/compiler/testData/ir/irText/classes/enumWithMultipleCtors.fir.txt @@ -22,7 +22,7 @@ FILE fqName: fileName:/enumWithMultipleCtors.kt RETURN type=kotlin.Nothing from='public final fun f (): kotlin.String declared in .A.Y' CALL 'public final fun plus (other: kotlin.Any?): kotlin.String [operator] declared in kotlin.String' type=kotlin.String origin=null $this: CALL 'public open fun f (): kotlin.String declared in .A' type=kotlin.String origin=null - $this: ERROR_CALL 'Unresolved reference: super' type=.A + $this: GET_VAR ': . declared in .' type=. origin=null other: CONST String type=kotlin.String value="#Y" ENUM_ENTRY name:Z class: CLASS ENUM_ENTRY name:Z modality:FINAL visibility:local superTypes:[.A] diff --git a/compiler/testData/ir/irText/classes/implicitNotNullOnDelegatedImplementation.fir.txt b/compiler/testData/ir/irText/classes/implicitNotNullOnDelegatedImplementation.fir.txt index b8d342dbc0a..1466fdc0237 100644 --- a/compiler/testData/ir/irText/classes/implicitNotNullOnDelegatedImplementation.fir.txt +++ b/compiler/testData/ir/irText/classes/implicitNotNullOnDelegatedImplementation.fir.txt @@ -50,7 +50,7 @@ FILE fqName: fileName:/implicitNotNullOnDelegatedImplementation.kt BLOCK_BODY RETURN type=kotlin.Nothing from='public final fun foo (): kotlin.String declared in .K2' CALL 'public open fun foo (): kotlin.String [operator] declared in .JFoo' type=kotlin.String origin=null - $this: ERROR_CALL 'Unresolved reference: super' type=.JFoo + $this: GET_VAR ': .K2 declared in .K2.foo' type=.K2 origin=null FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] overridden: public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any @@ -93,12 +93,12 @@ FILE fqName: fileName:/implicitNotNullOnDelegatedImplementation.kt BLOCK_BODY DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in .JUnrelatedFoo' INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:K4 modality:FINAL visibility:public superTypes:[.JUnrelatedFoo; .IFoo]' - FUN name:foo visibility:public modality:FINAL <> ($this:.K4) returnType:kotlin.String? + FUN name:foo visibility:public modality:FINAL <> ($this:.K4) returnType:kotlin.String $this: VALUE_PARAMETER name: type:.K4 BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun foo (): kotlin.String? declared in .K4' - CALL 'public open fun foo (): kotlin.String? [operator] declared in .JUnrelatedFoo' type=kotlin.String? origin=null - $this: ERROR_CALL 'Unresolved reference: super' type=.JUnrelatedFoo + RETURN type=kotlin.Nothing from='public final fun foo (): kotlin.String declared in .K4' + CALL 'public abstract fun foo (): kotlin.String declared in .IFoo' type=kotlin.String origin=null + $this: GET_VAR ': .K4 declared in .K4.foo' type=.K4 origin=null FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] overridden: public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any diff --git a/compiler/testData/ir/irText/classes/superCalls.fir.txt b/compiler/testData/ir/irText/classes/superCalls.fir.txt index 41240189abf..9b7df92b159 100644 --- a/compiler/testData/ir/irText/classes/superCalls.fir.txt +++ b/compiler/testData/ir/irText/classes/superCalls.fir.txt @@ -24,7 +24,7 @@ FILE fqName: fileName:/superCalls.kt BLOCK_BODY RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in .Base' CALL 'public open fun hashCode (): kotlin.Int declared in kotlin.Any' type=kotlin.Int origin=null - $this: ERROR_CALL 'Unresolved reference: super' type=kotlin.Any + $this: GET_VAR ': .Base declared in .Base.hashCode' type=.Base origin=null FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] overridden: public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any @@ -44,7 +44,7 @@ FILE fqName: fileName:/superCalls.kt $this: VALUE_PARAMETER name: type:.Derived BLOCK_BODY CALL 'public open fun foo (): kotlin.Unit declared in .Base' type=kotlin.Unit origin=null - $this: ERROR_CALL 'Unresolved reference: super' type=.Base + $this: GET_VAR ': .Derived declared in .Derived.foo' type=.Derived origin=null PROPERTY name:bar visibility:public modality:FINAL [val] FUN name: visibility:public modality:FINAL <> ($this:.Derived) returnType:kotlin.String correspondingProperty: PROPERTY name:bar visibility:public modality:FINAL [val] @@ -52,7 +52,7 @@ FILE fqName: fileName:/superCalls.kt BLOCK_BODY RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in .Derived' CALL 'public open fun (): kotlin.String declared in .Base' type=kotlin.String origin=null - $this: ERROR_CALL 'Unresolved reference: super' type=.Base + $this: GET_VAR ': .Derived declared in .Derived.' type=.Derived origin=null FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:.Base) returnType:kotlin.Int [fake_override] overridden: public open fun hashCode (): kotlin.Int declared in .Base