[FIR] Don't remove subsumed members from intersection overrides's overriddens

This fixes a bunch of missing overridden symbols in IR.
This is also required for fixing KT-59921 in the following commit
where we need to keep all overridden symbols of intersection overrides
so that we can enhance them properly.

#KT-57300 Fixed
#KT-57299 Fixed
#KT-59921
#KT-57300
#KT-62788
#KT-64271
#KT-64382
This commit is contained in:
Kirill Rakhman
2024-01-17 09:59:17 +01:00
committed by Space Team
parent d80dee6e1c
commit 3b841dcb98
58 changed files with 899 additions and 530 deletions
@@ -17,14 +17,12 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtClassOrObjectSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin
import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.utils.superConeTypes
import org.jetbrains.kotlin.fir.scopes.*
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirIntersectionOverrideFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirIntersectionOverridePropertySymbol
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.fir.types.toRegularClassSymbol
import org.jetbrains.kotlin.fir.unwrapFakeOverrides
@@ -36,15 +34,24 @@ internal class KtFirSymbolDeclarationOverridesProvider(
override fun <T : KtSymbol> getAllOverriddenSymbols(
callableSymbol: T,
): List<KtCallableSymbol> {
require(callableSymbol is KtFirSymbol<*>)
if (callableSymbol is KtFirBackingFieldSymbol) return emptyList()
if (callableSymbol is KtValueParameterSymbol) {
return callableSymbol.getAllOverriddenSymbols()
}
(callableSymbol.firSymbol as? FirIntersectionCallableSymbol)?.let { intersectionSymbol ->
return intersectionSymbol.intersections.flatMap {
getAllOverriddenSymbols(analysisSession.firSymbolBuilder.callableBuilder.buildCallableSymbol(it))
}
}
val overriddenElement = mutableSetOf<FirCallableSymbol<*>>()
processOverrides(callableSymbol) { firTypeScope, firCallableDeclaration ->
firTypeScope.processAllOverriddenDeclarations(firCallableDeclaration) { overriddenDeclaration ->
overriddenDeclaration.symbol.collectIntersectionOverridesSymbolsTo(overriddenElement)
overriddenDeclaration.symbol.collectIntersectionOverridesSymbolsTo(
overriddenElement,
callableSymbol.analysisSession.useSiteSession
)
}
}
@@ -52,15 +59,22 @@ internal class KtFirSymbolDeclarationOverridesProvider(
}
override fun <T : KtSymbol> getDirectlyOverriddenSymbols(callableSymbol: T): List<KtCallableSymbol> {
require(callableSymbol is KtFirSymbol<*>)
if (callableSymbol is KtFirBackingFieldSymbol) return emptyList()
if (callableSymbol is KtValueParameterSymbol) {
return callableSymbol.getDirectlyOverriddenSymbols()
}
if (callableSymbol is KtCallableSymbol && callableSymbol.firSymbol is FirIntersectionCallableSymbol) {
return getIntersectionOverriddenSymbols(callableSymbol)
}
val overriddenElement = mutableSetOf<FirCallableSymbol<*>>()
processOverrides(callableSymbol) { firTypeScope, firCallableDeclaration ->
firTypeScope.processDirectOverriddenDeclarations(firCallableDeclaration) { overriddenDeclaration ->
overriddenDeclaration.symbol.collectIntersectionOverridesSymbolsTo(overriddenElement)
overriddenDeclaration.symbol.collectIntersectionOverridesSymbolsTo(
overriddenElement,
callableSymbol.analysisSession.useSiteSession
)
}
}
@@ -139,13 +153,13 @@ internal class KtFirSymbolDeclarationOverridesProvider(
process(firTypeScope, firCallableDeclaration)
}
private fun FirCallableSymbol<*>.collectIntersectionOverridesSymbolsTo(to: MutableCollection<FirCallableSymbol<*>>) {
private fun FirCallableSymbol<*>.collectIntersectionOverridesSymbolsTo(
to: MutableCollection<FirCallableSymbol<*>>,
useSiteSession: FirSession,
) {
when (this) {
is FirIntersectionOverrideFunctionSymbol -> {
intersections.forEach { it.collectIntersectionOverridesSymbolsTo(to) }
}
is FirIntersectionOverridePropertySymbol -> {
intersections.forEach { it.collectIntersectionOverridesSymbolsTo(to) }
is FirIntersectionCallableSymbol -> {
getIntersectionOverriddenSymbols(useSiteSession).forEach { it.collectIntersectionOverridesSymbolsTo(to, useSiteSession) }
}
else -> {
to += this.fir.unwrapFakeOverrides().symbol
@@ -187,22 +201,21 @@ internal class KtFirSymbolDeclarationOverridesProvider(
return false
}
override fun getIntersectionOverriddenSymbols(symbol: KtCallableSymbol): Collection<KtCallableSymbol> {
override fun getIntersectionOverriddenSymbols(symbol: KtCallableSymbol): List<KtCallableSymbol> {
require(symbol is KtFirSymbol<*>)
if (symbol.origin != KtSymbolOrigin.INTERSECTION_OVERRIDE) return emptyList()
return symbol.firSymbol
.getIntersectionOverriddenSymbols()
.getIntersectionOverriddenSymbols(symbol.analysisSession.useSiteSession)
.map { analysisSession.firSymbolBuilder.callableBuilder.buildCallableSymbol(it) }
}
private fun FirBasedSymbol<*>.getIntersectionOverriddenSymbols(): Collection<FirCallableSymbol<*>> {
private fun FirBasedSymbol<*>.getIntersectionOverriddenSymbols(useSiteSession: FirSession): Collection<FirCallableSymbol<*>> {
require(this is FirCallableSymbol<*>) {
"Required FirCallableSymbol but ${this::class} found"
}
return when (this) {
is FirIntersectionOverrideFunctionSymbol -> intersections
is FirIntersectionOverridePropertySymbol -> intersections
is FirIntersectionCallableSymbol -> getNonSubsumedOverriddenSymbols(useSiteSession, analysisSession.getScopeSessionFor(useSiteSession))
else -> listOf(this)
}
}
@@ -939,62 +939,12 @@ KtFunctionSymbol:
KtKotlinPropertySymbol:
annotationsList: []
backingFieldSymbol: KtBackingFieldSymbol:
annotationsList: []
callableIdIfNonLocal: null
contextReceivers: []
isExtension: false
name: field
origin: PROPERTY_BACKING_FIELD
owningProperty: KtKotlinPropertySymbol(kotlin/collections/List.size)
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/Int
symbolKind: LOCAL
typeParameters: []
getContainingFileSymbol: null
getContainingJvmClassName: kotlin.collections.List
getContainingModule: KtBinaryModule "Builtins for JVM (1.8)"
deprecationStatus: null
callableIdIfNonLocal: kotlin/collections/List.size
backingFieldSymbol: null
callableIdIfNonLocal: kotlin/collections/MutableList.size
contextReceivers: []
getter: KtPropertyGetterSymbol:
annotationsList: []
callableIdIfNonLocal: null
contextReceivers: []
hasBody: false
hasStableParameterNames: true
isDefault: true
isExtension: false
isInline: false
isOverride: false
modality: ABSTRACT
origin: LIBRARY
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
ownTypeArguments: []
type: kotlin/Int
symbolKind: ACCESSOR
typeParameters: []
valueParameters: []
visibility: Public
getDispatchReceiver(): KtUsualClassType:
annotationsList: []
ownTypeArguments: [
KtTypeParameterType:
annotationsList: []
type: E
]
type: kotlin/collections/List<E>
getContainingFileSymbol: null
getContainingJvmClassName: kotlin.collections.List
getContainingModule: KtBinaryModule "Builtins for JVM (1.8)"
deprecationStatus: null
getter: null
hasBackingField: false
hasGetter: true
hasGetter: false
hasSetter: false
initializer: null
isActual: false
@@ -1009,7 +959,7 @@ KtKotlinPropertySymbol:
isVal: true
modality: ABSTRACT
name: size
origin: LIBRARY
origin: INTERSECTION_OVERRIDE
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
@@ -1026,9 +976,9 @@ KtKotlinPropertySymbol:
annotationsList: []
type: E
]
type: kotlin/collections/List<E>
type: kotlin/collections/MutableList<E>
getContainingFileSymbol: null
getContainingJvmClassName: kotlin.collections.List
getContainingJvmClassName: kotlin.collections.MutableList
getContainingModule: KtBinaryModule "Builtins for JVM (1.8)"
deprecationStatus: null
getterDeprecationStatus: null
@@ -1038,7 +988,7 @@ KtKotlinPropertySymbol:
KtFunctionSymbol:
annotationsList: []
callableIdIfNonLocal: kotlin/collections/List.isEmpty
callableIdIfNonLocal: kotlin/collections/MutableList.isEmpty
contextReceivers: []
contractEffects: []
hasStableParameterNames: true
@@ -1055,7 +1005,7 @@ KtFunctionSymbol:
isSuspend: false
modality: ABSTRACT
name: isEmpty
origin: LIBRARY
origin: INTERSECTION_OVERRIDE
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
@@ -1072,9 +1022,9 @@ KtFunctionSymbol:
annotationsList: []
type: E
]
type: kotlin/collections/List<E>
type: kotlin/collections/MutableList<E>
getContainingFileSymbol: null
getContainingJvmClassName: kotlin.collections.List
getContainingJvmClassName: kotlin.collections.MutableList
getContainingModule: KtBinaryModule "Builtins for JVM (1.8)"
deprecationStatus: null
@@ -1097,7 +1047,7 @@ KtFunctionSymbol:
isSuspend: false
modality: ABSTRACT
name: contains
origin: SUBSTITUTION_OVERRIDE
origin: INTERSECTION_OVERRIDE
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
@@ -1118,7 +1068,7 @@ KtFunctionSymbol:
isNoinline: false
isVararg: false
name: element
origin: SUBSTITUTION_OVERRIDE
origin: INTERSECTION_OVERRIDE
receiverParameter: null
returnType: KtTypeParameterType:
annotationsList: []
@@ -1209,7 +1159,7 @@ KtFunctionSymbol:
isSuspend: false
modality: ABSTRACT
name: containsAll
origin: SUBSTITUTION_OVERRIDE
origin: INTERSECTION_OVERRIDE
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
@@ -1230,7 +1180,7 @@ KtFunctionSymbol:
isNoinline: false
isVararg: false
name: elements
origin: SUBSTITUTION_OVERRIDE
origin: INTERSECTION_OVERRIDE
receiverParameter: null
returnType: KtUsualClassType:
annotationsList: []
@@ -345,6 +345,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
runTest("compiler/testData/diagnostics/tests/Dollar.kt");
}
@Test
@TestMetadata("duplicateDefaultValuesSubsumedIntersection.kt")
public void testDuplicateDefaultValuesSubsumedIntersection() throws Exception {
runTest("compiler/testData/diagnostics/tests/duplicateDefaultValuesSubsumedIntersection.kt");
}
@Test
@TestMetadata("duplicateDirrectOverriddenCallables.kt")
public void testDuplicateDirrectOverriddenCallables() throws Exception {
@@ -28698,6 +28704,36 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
runTest("compiler/testData/diagnostics/tests/override/InternalPotentialOverride.kt");
}
@Test
@TestMetadata("intersectionOfAbstractAndOpen.kt")
public void testIntersectionOfAbstractAndOpen() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOfAbstractAndOpen.kt");
}
@Test
@TestMetadata("intersectionOfSubstitutedProperties.kt")
public void testIntersectionOfSubstitutedProperties() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOfSubstitutedProperties.kt");
}
@Test
@TestMetadata("intersectionOverrideWithSubsumedDifferentType.kt")
public void testIntersectionOverrideWithSubsumedDifferentType() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOverrideWithSubsumedDifferentType.kt");
}
@Test
@TestMetadata("intersectionOverridesIntersection.kt")
public void testIntersectionOverridesIntersection() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOverridesIntersection.kt");
}
@Test
@TestMetadata("intersectionWithSubsumedWithSubstitution.kt")
public void testIntersectionWithSubsumedWithSubstitution() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionWithSubsumedWithSubstitution.kt");
}
@Test
@TestMetadata("InvisiblePotentialOverride.kt")
public void testInvisiblePotentialOverride() throws Exception {
@@ -28965,6 +29001,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
runTest("compiler/testData/diagnostics/tests/override/clashesOnInheritance/genericWithUpperBound.kt");
}
@Test
@TestMetadata("intersectionReturnTypeMismatchSubsumed.kt")
public void testIntersectionReturnTypeMismatchSubsumed() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/clashesOnInheritance/intersectionReturnTypeMismatchSubsumed.kt");
}
@Test
@TestMetadata("kt13355.kt")
public void testKt13355() throws Exception {
@@ -345,6 +345,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
runTest("compiler/testData/diagnostics/tests/Dollar.kt");
}
@Test
@TestMetadata("duplicateDefaultValuesSubsumedIntersection.kt")
public void testDuplicateDefaultValuesSubsumedIntersection() throws Exception {
runTest("compiler/testData/diagnostics/tests/duplicateDefaultValuesSubsumedIntersection.kt");
}
@Test
@TestMetadata("duplicateDirrectOverriddenCallables.kt")
public void testDuplicateDirrectOverriddenCallables() throws Exception {
@@ -28698,6 +28704,36 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
runTest("compiler/testData/diagnostics/tests/override/InternalPotentialOverride.kt");
}
@Test
@TestMetadata("intersectionOfAbstractAndOpen.kt")
public void testIntersectionOfAbstractAndOpen() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOfAbstractAndOpen.kt");
}
@Test
@TestMetadata("intersectionOfSubstitutedProperties.kt")
public void testIntersectionOfSubstitutedProperties() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOfSubstitutedProperties.kt");
}
@Test
@TestMetadata("intersectionOverrideWithSubsumedDifferentType.kt")
public void testIntersectionOverrideWithSubsumedDifferentType() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOverrideWithSubsumedDifferentType.kt");
}
@Test
@TestMetadata("intersectionOverridesIntersection.kt")
public void testIntersectionOverridesIntersection() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOverridesIntersection.kt");
}
@Test
@TestMetadata("intersectionWithSubsumedWithSubstitution.kt")
public void testIntersectionWithSubsumedWithSubstitution() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionWithSubsumedWithSubstitution.kt");
}
@Test
@TestMetadata("InvisiblePotentialOverride.kt")
public void testInvisiblePotentialOverride() throws Exception {
@@ -28965,6 +29001,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
runTest("compiler/testData/diagnostics/tests/override/clashesOnInheritance/genericWithUpperBound.kt");
}
@Test
@TestMetadata("intersectionReturnTypeMismatchSubsumed.kt")
public void testIntersectionReturnTypeMismatchSubsumed() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/clashesOnInheritance/intersectionReturnTypeMismatchSubsumed.kt");
}
@Test
@TestMetadata("kt13355.kt")
public void testKt13355() throws Exception {
@@ -6,15 +6,15 @@ B:
[Enhancement]: public abstract fun getFoo(): R|kotlin/String!| from Java enhancement scope for /A [id: 1]
C:
[Source]: public open override fun getFoo(): R|kotlin/String| from Java enhancement scope for /C [id: 0]
[Source]: public open override fun getFoo(): R|kotlin/String| from Use site scope of /B [id: 0]
[Enhancement]: public abstract fun getFoo(): R|kotlin/String!| from Java enhancement scope for /A [id: 1]
[Enhancement]: public abstract fun getFoo(): R|kotlin/String!| from Java enhancement scope for /A [id: 1]
[IntersectionOverride]: public open override fun getFoo(): R|kotlin/String| from Java enhancement scope for /C [id: 0]
[Source]: public open override fun getFoo(): R|kotlin/String| from Use site scope of /B [id: 1]
[Enhancement]: public abstract fun getFoo(): R|kotlin/String!| from Java enhancement scope for /A [id: 2]
[Enhancement]: public abstract fun getFoo(): R|kotlin/String!| from Java enhancement scope for /A [id: 2]
D:
[Source]: public open override fun getFoo(): R|kotlin/String| from Use site scope of /D [id: 0]
[Source]: public open override fun getFoo(): R|kotlin/String| from Java enhancement scope for /C [id: 0]
[Source]: public open override fun getFoo(): R|kotlin/String| from Use site scope of /B [id: 0]
[Enhancement]: public abstract fun getFoo(): R|kotlin/String!| from Java enhancement scope for /A [id: 1]
[Enhancement]: public abstract fun getFoo(): R|kotlin/String!| from Java enhancement scope for /A [id: 1]
[IntersectionOverride]: public open override fun getFoo(): R|kotlin/String| from Use site scope of /D [id: 0]
[IntersectionOverride]: public open override fun getFoo(): R|kotlin/String| from Java enhancement scope for /C [id: 0]
[Source]: public open override fun getFoo(): R|kotlin/String| from Use site scope of /B [id: 1]
[Enhancement]: public abstract fun getFoo(): R|kotlin/String!| from Java enhancement scope for /A [id: 2]
[Enhancement]: public abstract fun getFoo(): R|kotlin/String!| from Java enhancement scope for /A [id: 2]
@@ -1,38 +1,38 @@
C:
[Source]: public abstract override fun foo(): R|kotlin/Any| from Use site scope of /C [id: 0]
[IntersectionOverride]: public abstract fun foo(): R|kotlin/Any| from Use site scope of /C [id: 0]
[Source]: public abstract fun foo(): R|kotlin/Any| from Use site scope of /A [id: 1]
[Source]: public abstract override fun foo(): R|kotlin/Any| from Use site scope of /B [id: 0]
[Source]: public abstract override fun foo(): R|kotlin/Any| from Use site scope of /B [id: 2]
[Source]: public abstract fun foo(): R|kotlin/Any| from Use site scope of /A [id: 1]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /C [id: 0]
[IntersectionOverride]: public abstract val x: R|kotlin/Any| from Use site scope of /C [id: 0]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /A [id: 1]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /B [id: 0]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /B [id: 2]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /A [id: 1]
Explicit:
[Source]: public abstract override fun foo(): R|kotlin/Int| from Use site scope of /Explicit [id: 0]
[Source]: public abstract override fun foo(): R|kotlin/Any| from Use site scope of /C [id: 1]
[IntersectionOverride]: public abstract fun foo(): R|kotlin/Any| from Use site scope of /C [id: 1]
[Source]: public abstract fun foo(): R|kotlin/Any| from Use site scope of /A [id: 2]
[Source]: public abstract override fun foo(): R|kotlin/Any| from Use site scope of /B [id: 1]
[Source]: public abstract override fun foo(): R|kotlin/Any| from Use site scope of /B [id: 3]
[Source]: public abstract fun foo(): R|kotlin/Any| from Use site scope of /A [id: 2]
[Source]: public abstract fun foo(): R|kotlin/Int| from Use site scope of /D [id: 3]
[Source]: public abstract fun foo(): R|kotlin/Int| from Use site scope of /D [id: 4]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /Explicit [id: 0]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /C [id: 1]
[IntersectionOverride]: public abstract val x: R|kotlin/Any| from Use site scope of /C [id: 1]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /A [id: 2]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /B [id: 1]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /B [id: 3]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /A [id: 2]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /D [id: 3]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /D [id: 4]
Implicit:
[IntersectionOverride]: public abstract fun foo(): R|kotlin/Int| from Use site scope of /Implicit [id: 0]
[Source]: public abstract override fun foo(): R|kotlin/Any| from Use site scope of /C [id: 1]
[IntersectionOverride]: public abstract fun foo(): R|kotlin/Any| from Use site scope of /C [id: 1]
[Source]: public abstract fun foo(): R|kotlin/Any| from Use site scope of /A [id: 2]
[Source]: public abstract override fun foo(): R|kotlin/Any| from Use site scope of /B [id: 1]
[Source]: public abstract override fun foo(): R|kotlin/Any| from Use site scope of /B [id: 3]
[Source]: public abstract fun foo(): R|kotlin/Any| from Use site scope of /A [id: 2]
[Source]: public abstract fun foo(): R|kotlin/Int| from Use site scope of /D [id: 3]
[IntersectionOverride]: public abstract override val x: R|kotlin/Any| from Use site scope of /Implicit [id: 0]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /C [id: 1]
[Source]: public abstract fun foo(): R|kotlin/Int| from Use site scope of /D [id: 4]
[IntersectionOverride]: public abstract val x: R|kotlin/Any| from Use site scope of /Implicit [id: 0]
[IntersectionOverride]: public abstract val x: R|kotlin/Any| from Use site scope of /C [id: 1]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /A [id: 2]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /B [id: 1]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /B [id: 3]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /A [id: 2]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /D [id: 3]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /D [id: 4]
@@ -1,38 +1,38 @@
C:
[Source]: public abstract override fun foo(): R|kotlin/Any| from Use site scope of /C [id: 0]
[IntersectionOverride]: public abstract fun foo(): R|kotlin/Any| from Use site scope of /C [id: 0]
[Source]: public abstract fun foo(): R|kotlin/Any| from Use site scope of /A [id: 1]
[Source]: public abstract override fun foo(): R|kotlin/Any| from Use site scope of /B [id: 0]
[Source]: public abstract override fun foo(): R|kotlin/Any| from Use site scope of /B [id: 2]
[Source]: public abstract fun foo(): R|kotlin/Any| from Use site scope of /A [id: 1]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /C [id: 0]
[IntersectionOverride]: public abstract val x: R|kotlin/Any| from Use site scope of /C [id: 0]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /A [id: 1]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /B [id: 0]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /B [id: 2]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /A [id: 1]
Explicit:
[Source]: public abstract override fun foo(): R|kotlin/Int| from Use site scope of /Explicit [id: 0]
[Source]: public abstract override fun foo(): R|kotlin/Any| from Use site scope of /C [id: 1]
[IntersectionOverride]: public abstract fun foo(): R|kotlin/Any| from Use site scope of /C [id: 1]
[Source]: public abstract fun foo(): R|kotlin/Any| from Use site scope of /A [id: 2]
[Source]: public abstract override fun foo(): R|kotlin/Any| from Use site scope of /B [id: 1]
[Source]: public abstract override fun foo(): R|kotlin/Any| from Use site scope of /B [id: 3]
[Source]: public abstract fun foo(): R|kotlin/Any| from Use site scope of /A [id: 2]
[Source]: public abstract fun foo(): R|kotlin/Int| from Use site scope of /D [id: 3]
[Source]: public abstract fun foo(): R|kotlin/Int| from Use site scope of /D [id: 4]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /Explicit [id: 0]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /C [id: 1]
[IntersectionOverride]: public abstract val x: R|kotlin/Any| from Use site scope of /C [id: 1]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /A [id: 2]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /B [id: 1]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /B [id: 3]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /A [id: 2]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /D [id: 3]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /D [id: 4]
Implicit:
[IntersectionOverride]: public abstract fun foo(): R|kotlin/Int| from Use site scope of /Implicit [id: 0]
[Source]: public abstract override fun foo(): R|kotlin/Any| from Use site scope of /C [id: 1]
[IntersectionOverride]: public abstract fun foo(): R|kotlin/Any| from Use site scope of /C [id: 1]
[Source]: public abstract fun foo(): R|kotlin/Any| from Use site scope of /A [id: 2]
[Source]: public abstract override fun foo(): R|kotlin/Any| from Use site scope of /B [id: 1]
[Source]: public abstract override fun foo(): R|kotlin/Any| from Use site scope of /B [id: 3]
[Source]: public abstract fun foo(): R|kotlin/Any| from Use site scope of /A [id: 2]
[Source]: public abstract fun foo(): R|kotlin/Int| from Use site scope of /D [id: 3]
[IntersectionOverride]: public abstract override val x: R|kotlin/Any| from Use site scope of /Implicit [id: 0]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /C [id: 1]
[Source]: public abstract fun foo(): R|kotlin/Int| from Use site scope of /D [id: 4]
[IntersectionOverride]: public abstract val x: R|kotlin/Any| from Use site scope of /Implicit [id: 0]
[IntersectionOverride]: public abstract val x: R|kotlin/Any| from Use site scope of /C [id: 1]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /A [id: 2]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /B [id: 1]
[Source]: public abstract override val x: R|kotlin/Any| from Use site scope of /B [id: 3]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /A [id: 2]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /D [id: 3]
[Source]: public abstract val x: R|kotlin/Any| from Use site scope of /D [id: 4]
@@ -1,11 +1,11 @@
D:
[SubstitutionOverride(DeclarationSite)]: public abstract override fun foo(): R|E4| from Use site scope of /D [id: 0]
[SubstitutionOverride(DeclarationSite)]: public abstract override fun foo(): R|E4| from Substitution scope for [Use site scope of /B] for type D<E4> [id: 0]
[Source]: public abstract override fun foo(): R|E2| from Use site scope of /B [id: 1]
[SubstitutionOverride(DeclarationSite)]: public abstract fun foo(): R|E2| from Substitution scope for [Use site scope of /A] for type B<E2> [id: 2]
[Source]: public abstract fun foo(): R|E1| from Use site scope of /A [id: 3]
[SubstitutionOverride(DeclarationSite)]: public abstract fun foo(): R|E4| from Substitution scope for [Use site scope of /C] for type D<E4> [id: 4]
[SubstitutionOverride(DeclarationSite)]: public abstract fun foo(): R|E3| from Use site scope of /C [id: 5]
[SubstitutionOverride(DeclarationSite)]: public abstract fun foo(): R|E3| from Substitution scope for [Use site scope of /A] for type C<E3> [id: 5]
[Source]: public abstract fun foo(): R|E1| from Use site scope of /A [id: 3]
[IntersectionOverride]: public abstract override fun foo(): R|E4| from Use site scope of /D [id: 0]
[SubstitutionOverride(DeclarationSite)]: public abstract override fun foo(): R|E4| from Substitution scope for [Use site scope of /B] for type D<E4> [id: 1]
[Source]: public abstract override fun foo(): R|E2| from Use site scope of /B [id: 2]
[SubstitutionOverride(DeclarationSite)]: public abstract fun foo(): R|E2| from Substitution scope for [Use site scope of /A] for type B<E2> [id: 3]
[Source]: public abstract fun foo(): R|E1| from Use site scope of /A [id: 4]
[SubstitutionOverride(DeclarationSite)]: public abstract fun foo(): R|E4| from Substitution scope for [Use site scope of /C] for type D<E4> [id: 5]
[SubstitutionOverride(DeclarationSite)]: public abstract fun foo(): R|E3| from Use site scope of /C [id: 6]
[SubstitutionOverride(DeclarationSite)]: public abstract fun foo(): R|E3| from Substitution scope for [Use site scope of /A] for type C<E3> [id: 6]
[Source]: public abstract fun foo(): R|E1| from Use site scope of /A [id: 4]
@@ -345,6 +345,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
runTest("compiler/testData/diagnostics/tests/Dollar.kt");
}
@Test
@TestMetadata("duplicateDefaultValuesSubsumedIntersection.kt")
public void testDuplicateDefaultValuesSubsumedIntersection() throws Exception {
runTest("compiler/testData/diagnostics/tests/duplicateDefaultValuesSubsumedIntersection.kt");
}
@Test
@TestMetadata("duplicateDirrectOverriddenCallables.kt")
public void testDuplicateDirrectOverriddenCallables() throws Exception {
@@ -26462,6 +26468,36 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
runTest("compiler/testData/diagnostics/tests/override/InternalPotentialOverride.kt");
}
@Test
@TestMetadata("intersectionOfAbstractAndOpen.kt")
public void testIntersectionOfAbstractAndOpen() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOfAbstractAndOpen.kt");
}
@Test
@TestMetadata("intersectionOfSubstitutedProperties.kt")
public void testIntersectionOfSubstitutedProperties() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOfSubstitutedProperties.kt");
}
@Test
@TestMetadata("intersectionOverrideWithSubsumedDifferentType.kt")
public void testIntersectionOverrideWithSubsumedDifferentType() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOverrideWithSubsumedDifferentType.kt");
}
@Test
@TestMetadata("intersectionOverridesIntersection.kt")
public void testIntersectionOverridesIntersection() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOverridesIntersection.kt");
}
@Test
@TestMetadata("intersectionWithSubsumedWithSubstitution.kt")
public void testIntersectionWithSubsumedWithSubstitution() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionWithSubsumedWithSubstitution.kt");
}
@Test
@TestMetadata("InvisiblePotentialOverride.kt")
public void testInvisiblePotentialOverride() throws Exception {
@@ -26729,6 +26765,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
runTest("compiler/testData/diagnostics/tests/override/clashesOnInheritance/genericWithUpperBound.kt");
}
@Test
@TestMetadata("intersectionReturnTypeMismatchSubsumed.kt")
public void testIntersectionReturnTypeMismatchSubsumed() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/clashesOnInheritance/intersectionReturnTypeMismatchSubsumed.kt");
}
@Test
@TestMetadata("kt13355.kt")
public void testKt13355() throws Exception {
@@ -345,6 +345,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
runTest("compiler/testData/diagnostics/tests/Dollar.kt");
}
@Test
@TestMetadata("duplicateDefaultValuesSubsumedIntersection.kt")
public void testDuplicateDefaultValuesSubsumedIntersection() throws Exception {
runTest("compiler/testData/diagnostics/tests/duplicateDefaultValuesSubsumedIntersection.kt");
}
@Test
@TestMetadata("duplicateDirrectOverriddenCallables.kt")
public void testDuplicateDirrectOverriddenCallables() throws Exception {
@@ -26468,6 +26474,36 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
runTest("compiler/testData/diagnostics/tests/override/InternalPotentialOverride.kt");
}
@Test
@TestMetadata("intersectionOfAbstractAndOpen.kt")
public void testIntersectionOfAbstractAndOpen() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOfAbstractAndOpen.kt");
}
@Test
@TestMetadata("intersectionOfSubstitutedProperties.kt")
public void testIntersectionOfSubstitutedProperties() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOfSubstitutedProperties.kt");
}
@Test
@TestMetadata("intersectionOverrideWithSubsumedDifferentType.kt")
public void testIntersectionOverrideWithSubsumedDifferentType() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOverrideWithSubsumedDifferentType.kt");
}
@Test
@TestMetadata("intersectionOverridesIntersection.kt")
public void testIntersectionOverridesIntersection() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOverridesIntersection.kt");
}
@Test
@TestMetadata("intersectionWithSubsumedWithSubstitution.kt")
public void testIntersectionWithSubsumedWithSubstitution() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionWithSubsumedWithSubstitution.kt");
}
@Test
@TestMetadata("InvisiblePotentialOverride.kt")
public void testInvisiblePotentialOverride() throws Exception {
@@ -26735,6 +26771,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
runTest("compiler/testData/diagnostics/tests/override/clashesOnInheritance/genericWithUpperBound.kt");
}
@Test
@TestMetadata("intersectionReturnTypeMismatchSubsumed.kt")
public void testIntersectionReturnTypeMismatchSubsumed() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/clashesOnInheritance/intersectionReturnTypeMismatchSubsumed.kt");
}
@Test
@TestMetadata("kt13355.kt")
public void testKt13355() throws Exception {
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.fir.declarations.FirClassLikeDeclaration
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.constructors
import org.jetbrains.kotlin.fir.declarations.utils.isExpect
import org.jetbrains.kotlin.fir.declarations.getNonSubsumedOverriddenSymbols
import org.jetbrains.kotlin.fir.declarations.utils.isFinal
import org.jetbrains.kotlin.fir.scopes.*
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
@@ -31,6 +32,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.unwrapFakeOverridesOrDelegated
import org.jetbrains.kotlin.utils.addIfNotNull
import org.jetbrains.kotlin.utils.addToStdlib.popLast
import org.jetbrains.kotlin.fir.resolve.SessionHolder
sealed class FirJsNameClashClassMembersChecker(mppKind: MppCheckerKind) : FirClassChecker(mppKind) {
object Regular : FirJsNameClashClassMembersChecker(MppCheckerKind.Platform) {
@@ -113,13 +115,17 @@ sealed class FirJsNameClashClassMembersChecker(mppKind: MppCheckerKind) : FirCla
}
}
fun addAllSymbolsFrom(symbols: Collection<FirCallableSymbol<*>>) {
fun addAllSymbolsFrom(symbols: Collection<FirCallableSymbol<*>>, sessionHolder: SessionHolder) {
for (symbol in symbols) {
when (symbol) {
is FirIntersectionCallableSymbol -> {
addAllSymbolsFrom(symbol.intersections)
for (intersectedSymbol in symbol.intersections) {
overrideIntersections.getOrPut(intersectedSymbol) { hashSetOf() }.addAll(symbol.intersections)
val nonSubsumedOverriddenSymbols = symbol.getNonSubsumedOverriddenSymbols(
sessionHolder.session,
sessionHolder.scopeSession
)
addAllSymbolsFrom(nonSubsumedOverriddenSymbols, sessionHolder)
for (intersectedSymbol in nonSubsumedOverriddenSymbols) {
overrideIntersections.getOrPut(intersectedSymbol) { hashSetOf() }.addAll(nonSubsumedOverriddenSymbols)
}
}
else -> allSymbols.add(symbol)
@@ -137,8 +143,8 @@ sealed class FirJsNameClashClassMembersChecker(mppKind: MppCheckerKind) : FirCla
val scope = declaration.symbol.unsubstitutedScope(context)
scope.processDeclaredConstructors(allSymbols::add)
addAllSymbolsFrom(scope.collectAllFunctions())
addAllSymbolsFrom(scope.collectAllProperties())
addAllSymbolsFrom(scope.collectAllFunctions(), context.sessionHolder)
addAllSymbolsFrom(scope.collectAllProperties(), context.sessionHolder)
for (callableMemberSymbol in allSymbols) {
val overriddenLeaves = scope.collectOverriddenLeaves(callableMemberSymbol)
@@ -34,7 +34,6 @@ import org.jetbrains.kotlin.fir.scopes.*
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
import org.jetbrains.kotlin.fir.scopes.impl.multipleDelegatesWithTheSameSignature
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.name.ClassId
@@ -335,7 +334,11 @@ fun FirCallableSymbol<*>.getImplementationStatus(
}
if (symbol is FirIntersectionCallableSymbol) {
if (containingClassSymbol === parentClassSymbol && symbol.subjectToManyNotImplemented(sessionHolder)) {
val dispatchReceiverScope = symbol.dispatchReceiverScope(sessionHolder.session, sessionHolder.scopeSession)
val memberWithBaseScope = MemberWithBaseScope(symbol, dispatchReceiverScope)
val nonSubsumed = memberWithBaseScope.getNonSubsumedOverriddenSymbols()
if (containingClassSymbol === parentClassSymbol && !memberWithBaseScope.isTrivialIntersection() && nonSubsumed.subjectToManyNotImplemented(sessionHolder)) {
return ImplementationStatus.AMBIGUOUSLY_INHERITED
}
@@ -345,7 +348,7 @@ fun FirCallableSymbol<*>.getImplementationStatus(
var hasImplementation = false
var hasImplementationVar = false
for (intersection in symbol.intersections) {
for (intersection in nonSubsumed) {
val unwrapped = intersection.unwrapFakeOverrides()
val isVar = unwrapped is FirPropertySymbol && unwrapped.isVar
val isFromClass = unwrapped.getContainingClassSymbol(sessionHolder.session)?.classKind == ClassKind.CLASS
@@ -403,11 +406,11 @@ fun FirCallableSymbol<*>.getImplementationStatus(
}
}
private fun FirIntersectionCallableSymbol.subjectToManyNotImplemented(sessionHolder: SessionHolder): Boolean {
private fun List<FirCallableSymbol<*>>.subjectToManyNotImplemented(sessionHolder: SessionHolder): Boolean {
var nonAbstractCountInClass = 0
var nonAbstractCountInInterface = 0
var abstractCountInInterface = 0
for (intersectionSymbol in intersections) {
for (intersectionSymbol in this) {
val containingClassSymbol = intersectionSymbol.getContainingClassSymbol(sessionHolder.session) as? FirRegularClassSymbol
val hasInterfaceContainer = containingClassSymbol?.classKind == ClassKind.INTERFACE
if (intersectionSymbol.modality != Modality.ABSTRACT) {
@@ -17,8 +17,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.isVisibleInClass
import org.jetbrains.kotlin.fir.analysis.checkers.unsubstitutedScope
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
import org.jetbrains.kotlin.fir.containingClassLookupTag
import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.utils.classId
import org.jetbrains.kotlin.fir.declarations.utils.isAbstract
import org.jetbrains.kotlin.fir.declarations.utils.isExpect
@@ -26,15 +25,14 @@ import org.jetbrains.kotlin.fir.declarations.utils.isSuspend
import org.jetbrains.kotlin.fir.delegatedWrapperData
import org.jetbrains.kotlin.fir.isSubstitutionOverride
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenMembers
import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenProperties
import org.jetbrains.kotlin.fir.scopes.*
import org.jetbrains.kotlin.fir.scopes.impl.toConeType
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.ConeErrorType
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.fir.types.typeContext
import org.jetbrains.kotlin.fir.unwrapSubstitutionOverrides
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.AbstractTypeChecker
import org.jetbrains.kotlin.types.TypeCheckerState
@@ -121,6 +119,15 @@ sealed class FirImplementationMismatchChecker(mppKind: MppCheckerKind) : FirClas
AbstractTypeChecker.isSubtypeOf(typeCheckerState, inheritedTypeSubstituted, baseType)
}
/**
* An intersection override is trivial if one of the overridden symbols subsumes all others.
*
* @see org.jetbrains.kotlin.fir.scopes.impl.FirTypeIntersectionScopeContext.convertGroupedCallablesToIntersectionResults
*/
fun FirCallableSymbol<*>.isTrivialIntersectionOverride(): Boolean {
return callableId.classId != containingClass.classId || MemberWithBaseScope(this, classScope).isTrivialIntersection()
}
val intersectionSymbols = when {
//substitution override means simple materialization of single method, so nothing to check
symbol.isSubstitutionOverride -> return
@@ -134,7 +141,9 @@ sealed class FirImplementationMismatchChecker(mppKind: MppCheckerKind) : FirClas
//current symbol needs to be added, because basically it is the implementation
cleared + symbol
}
symbol is FirIntersectionCallableSymbol && symbol.callableId.classId == containingClass.classId ->
symbol is FirIntersectionCallableSymbol && !symbol.isTrivialIntersectionOverride() ->
// We intentionally don't use getNonSubsumedOverriddenSymbols here, otherwise we'll get lots of new errors (compared to K1)
// in cases where a Java superclass inherits multiple members with conflicting nullability annotations.
symbol.intersections
else -> return
}
@@ -203,12 +212,18 @@ sealed class FirImplementationMismatchChecker(mppKind: MppCheckerKind) : FirClas
reporter.reportOn(containingClass.source, FirErrors.VAR_OVERRIDDEN_BY_VAL_BY_DELEGATION, symbol, overriddenVar, context)
}
private fun FirTypeScope.collectFunctionsNamed(name: Name, containingClass: FirClass): List<FirNamedFunctionSymbol> {
private fun FirTypeScope.collectFunctionsNamed(
name: Name,
containingClass: FirClass,
context: CheckerContext,
): List<FirNamedFunctionSymbol> {
val allFunctions = mutableListOf<FirNamedFunctionSymbol>()
processFunctionsByName(name) { sym ->
when (sym) {
is FirIntersectionOverrideFunctionSymbol -> sym.intersections.mapNotNullTo(allFunctions) { it as? FirNamedFunctionSymbol }
is FirIntersectionOverrideFunctionSymbol -> sym
.getNonSubsumedOverriddenSymbols(context.session, context.scopeSession)
.mapNotNullTo(allFunctions) { it as? FirNamedFunctionSymbol }
else -> allFunctions.add(sym)
}
}
@@ -225,7 +240,7 @@ sealed class FirImplementationMismatchChecker(mppKind: MppCheckerKind) : FirClas
scope: FirTypeScope,
name: Name
) {
val allFunctions = scope.collectFunctionsNamed(name, containingClass)
val allFunctions = scope.collectFunctionsNamed(name, containingClass, context)
val sameArgumentGroups = allFunctions.groupBy { function ->
buildList {
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.diagnostics.reportOn
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
import org.jetbrains.kotlin.fir.analysis.checkers.collectOverriddenFunctionsWhere
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
import org.jetbrains.kotlin.fir.analysis.checkers.processOverriddenFunctions
import org.jetbrains.kotlin.fir.analysis.checkers.unsubstitutedScope
@@ -17,11 +16,10 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
import org.jetbrains.kotlin.fir.containingClassLookupTag
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.declarations.getSingleMatchedExpectForActualOrNull
import org.jetbrains.kotlin.fir.declarations.utils.isExpect
import org.jetbrains.kotlin.fir.declarations.utils.superConeTypes
import org.jetbrains.kotlin.fir.isSubstitutionOverride
import org.jetbrains.kotlin.fir.isSubstitutionOrIntersectionOverride
import org.jetbrains.kotlin.fir.scopes.processAllFunctions
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
@@ -66,7 +64,7 @@ sealed class FirMultipleDefaultsInheritedFromSupertypesChecker(mppKind: MppCheck
// default values of actual functions are located in corresponding expect functions
val overriddenWithDefaults = overridden.getSingleMatchedExpectForActualOrNull() as? FirNamedFunctionSymbol ?: overridden
// Substitution overrides copy default values from originals
if (!overriddenWithDefaults.isSubstitutionOverride && overriddenWithDefaults.valueParameterSymbols.any { it.hasDefaultValue }) {
if (!overriddenWithDefaults.isSubstitutionOrIntersectionOverride && overriddenWithDefaults.valueParameterSymbols.any { it.hasDefaultValue }) {
overriddenFunctions += overriddenWithDefaults
}
}
@@ -78,7 +78,7 @@ sealed class FirNotImplementedOverrideChecker(mppKind: MppCheckerKind) : FirClas
fun collectSymbol(symbol: FirCallableSymbol<*>) {
val delegatedWrapperData = symbol.delegatedWrapperData
if (delegatedWrapperData != null) {
if (delegatedWrapperData != null && symbol !is FirIntersectionCallableSymbol) {
val directOverriddenMembersWithBaseScope = classScope
.getDirectOverriddenMembersWithBaseScope(symbol)
.filter { it.member != symbol }
@@ -9,7 +9,10 @@ import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.util.PrivateForInline
import org.jetbrains.kotlin.fir.declarations.utils.isInline
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.fir.resolve.scope
import org.jetbrains.kotlin.fir.scopes.*
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
import org.jetbrains.kotlin.fir.scopes.impl.importedFromObjectOrStaticData
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
@@ -19,6 +22,7 @@ import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.fir.types.coneTypeSafe
import org.jetbrains.kotlin.fir.types.isNullableAny
import org.jetbrains.kotlin.fir.types.toSymbol
import org.jetbrains.kotlin.fir.unwrapSubstitutionOverrides
import org.jetbrains.kotlin.util.OperatorNameConventions
fun FirClass.constructors(session: FirSession): List<FirConstructorSymbol> {
@@ -126,3 +130,72 @@ fun FirSimpleFunction.isEquals(session: FirSession): Boolean {
val parameter = valueParameters.first()
return parameter.returnTypeRef.coneType.fullyExpandedType(session).isNullableAny
}
/**
* An intersection override is trivial if one of the overridden symbols subsumes all others.
*
* @see org.jetbrains.kotlin.fir.scopes.impl.FirTypeIntersectionScopeContext.convertGroupedCallablesToIntersectionResults
*/
fun MemberWithBaseScope<FirCallableSymbol<*>>.isTrivialIntersection(): Boolean {
return baseScope
.getDirectOverriddenMembersWithBaseScope(member)
.nonSubsumed()
.mapTo(mutableSetOf()) { it.member.unwrapSubstitutionOverrides() }.size == 1
}
fun FirIntersectionCallableSymbol.getNonSubsumedOverriddenSymbols(
session: FirSession,
scopeSession: ScopeSession,
): List<FirCallableSymbol<*>> {
require(this is FirCallableSymbol<*>)
val dispatchReceiverScope = dispatchReceiverScope(session, scopeSession)
return MemberWithBaseScope(this, dispatchReceiverScope).getNonSubsumedOverriddenSymbols()
}
fun MemberWithBaseScope<FirCallableSymbol<*>>.getNonSubsumedOverriddenSymbols(): List<FirCallableSymbol<*>> {
return flattenIntersectionsRecursively()
.nonSubsumed()
.distinctBy { it.member.unwrapSubstitutionOverrides<FirCallableSymbol<*>>() }
.map { it.member }
}
fun FirCallableSymbol<*>.dispatchReceiverScope(session: FirSession, scopeSession: ScopeSession): FirTypeScope {
val dispatchReceiverType = requireNotNull(dispatchReceiverType)
return dispatchReceiverType.scope(
session,
scopeSession,
CallableCopyTypeCalculator.DoNothing,
FirResolvePhase.STATUS
) ?: FirTypeScope.Empty
}
fun MemberWithBaseScope<FirCallableSymbol<*>>.flattenIntersectionsRecursively(): List<MemberWithBaseScope<FirCallableSymbol<*>>> {
if (member.origin != FirDeclarationOrigin.IntersectionOverride) return listOf(this)
return baseScope.getDirectOverriddenMembersWithBaseScope(member).flatMap { it.flattenIntersectionsRecursively() }
}
/**
* A callable declaration D [subsumes](https://kotlinlang.org/spec/inheritance.html#matching-and-subsumption-of-declarations)
* a callable declaration B if D overrides B.
*/
fun Collection<MemberWithBaseScope<FirCallableSymbol<*>>>.nonSubsumed(): List<MemberWithBaseScope<FirCallableSymbol<*>>> {
val baseMembers = mutableSetOf<FirCallableSymbol<*>>()
for ((member, scope) in this) {
val unwrapped = member.unwrapSubstitutionOverrides<FirCallableSymbol<*>>()
val addIfDifferent = { it: FirCallableSymbol<*> ->
val symbol = it.unwrapSubstitutionOverrides()
if (symbol != unwrapped) {
baseMembers += symbol
}
ProcessorAction.NEXT
}
if (member is FirNamedFunctionSymbol) {
scope.processOverriddenFunctions(member, addIfDifferent)
} else if (member is FirPropertySymbol) {
scope.processOverriddenProperties(member, addIfDifferent)
}
}
return filter { (member, _) -> member.unwrapSubstitutionOverrides<FirCallableSymbol<*>>() !in baseMembers }
}
@@ -10,9 +10,7 @@ import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.caches.*
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.utils.isExpect
import org.jetbrains.kotlin.fir.declarations.utils.modality
import org.jetbrains.kotlin.fir.declarations.utils.visibility
@@ -159,8 +157,7 @@ class FirTypeIntersectionScopeContext(
val groupWithInvisible =
overrideService.extractBothWaysOverridable(allMembersWithScope.maxByVisibility(), allMembersWithScope, overrideChecker)
val group = groupWithInvisible.filter { it.isVisible() }.ifEmpty { groupWithInvisible }
val nonSubsumed = if (forClassUseSiteScope) group.nonSubsumed() else group
val mostSpecific = overrideService.selectMostSpecificMembers(nonSubsumed, ReturnTypeCalculatorForFullBodyResolve.Default)
val mostSpecific = overrideService.selectMostSpecificMembers(group, ReturnTypeCalculatorForFullBodyResolve.Default)
val nonTrivial = if (forClassUseSiteScope) {
// Create a non-trivial intersection override when the base methods come from different scopes,
// even if one of them is more specific than the others, i.e. when there is more than one method that is not subsumed.
@@ -169,15 +166,15 @@ class FirTypeIntersectionScopeContext(
// It is also possible to have the opposite case (> 1 most specific member, but all members are from
// the same base scope), but this means there are different instantiations of the same base class,
// which should generally result in INCONSISTENT_TYPE_PARAMETER_VALUES errors.
nonSubsumed.size > 1 &&
nonSubsumed.mapTo(mutableSetOf()) { it.member.fir.unwrapSubstitutionOverrides().symbol }.size > 1
group.size > 1 &&
group.mapTo(mutableSetOf()) { it.member.fir.unwrapSubstitutionOverrides().symbol }.size > 1
} else {
// Create a non-trivial intersection override when return types should be intersected.
mostSpecific.size > 1
}
if (nonTrivial) {
// Only add non-subsumed members to list of overridden in intersection override.
result += ResultOfIntersection.NonTrivial(this, mostSpecific, overriddenMembers = nonSubsumed, containingScope = null)
result += ResultOfIntersection.NonTrivial(this, mostSpecific, overriddenMembers = group, containingScope = null)
} else {
val (member, containingScope) = mostSpecific.first()
result += ResultOfIntersection.SingleMember(member, group, containingScope)
@@ -207,7 +204,7 @@ class FirTypeIntersectionScopeContext(
mostSpecific: List<MemberWithBaseScope<D>>,
extractedOverrides: List<MemberWithBaseScope<D>>,
): MemberWithBaseScope<FirCallableSymbol<*>> {
val newModality = chooseIntersectionOverrideModality(extractedOverrides)
val newModality = chooseIntersectionOverrideModality(extractedOverrides.flatMap { it.flattenIntersectionsRecursively() }.nonSubsumed())
val newVisibility = chooseIntersectionVisibility(extractedOverrides)
val mostSpecificSymbols = mostSpecific.map { it.member }
val extractedOverridesSymbols = extractedOverrides.map { it.member }
@@ -228,30 +225,6 @@ class FirTypeIntersectionScopeContext(
}.withScope(key.baseScope)
}
/**
* A callable declaration D [subsumes](https://kotlinlang.org/spec/inheritance.html#matching-and-subsumption-of-declarations)
* a callable declaration B if D overrides B.
*/
private fun <S : FirCallableSymbol<*>> List<MemberWithBaseScope<S>>.nonSubsumed(): List<MemberWithBaseScope<S>> {
val baseMembers = mutableSetOf<FirCallableSymbol<*>>()
for ((member, scope) in this) {
val unwrapped = member.unwrapSubstitutionOverrides<FirCallableSymbol<*>>()
val addIfDifferent = { it: FirCallableSymbol<*> ->
val symbol = it.unwrapSubstitutionOverrides()
if (symbol != unwrapped) {
baseMembers += symbol
}
ProcessorAction.NEXT
}
if (member is FirNamedFunctionSymbol) {
scope.processOverriddenFunctions(member, addIfDifferent)
} else if (member is FirPropertySymbol) {
scope.processOverriddenProperties(member, addIfDifferent)
}
}
return filter { it.member.unwrapSubstitutionOverrides<FirCallableSymbol<*>>() !in baseMembers }
}
private fun <S : FirCallableSymbol<*>> Collection<MemberWithBaseScope<S>>.maxByVisibility(): MemberWithBaseScope<S> {
var member: MemberWithBaseScope<S>? = null
for (candidate in this) {
@@ -1,26 +0,0 @@
MODULE main
CLASS A.class
K1
contains(I)Z [public, bridge]
K2
---
K1
---
K2
contains(Ljava/lang/Integer;)Z [public, bridge]
K1
indexOf(I)I [public, bridge]
K2
---
K1
---
K2
indexOf(Ljava/lang/Integer;)I [public, bridge]
K1
lastIndexOf(I)I [public, bridge]
K2
---
K1
---
K2
lastIndexOf(Ljava/lang/Integer;)I [public, bridge]
@@ -1,5 +1,4 @@
// WITH_STDLIB
// JVM_ABI_K1_K2_DIFF: KT-57300
abstract class A : AbstractMutableList<Int>()
@@ -0,0 +1,10 @@
MODULE main
CLASS Test.class
K1
getOrDefault(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String; [public, final, bridge]
K2
---
K1
getOrDefault(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; [public, bridge]
K2
---
+1 -2
View File
@@ -1,10 +1,9 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// IGNORE_BACKEND_K2: JVM_IR, JS_IR
// FIR status: different structure of fake overrides. Fixed in the IR fake override builder.
// IGNORE_BACKEND: ANDROID
// ^ NSME: java.util.AbstractMap.remove
// FULL_JDK
// JVM_ABI_K1_K2_DIFF: KT-65095
class Test : Map<String, String>, java.util.AbstractMap<String, String>() {
override val entries: MutableSet<MutableMap.MutableEntry<String, String>>
@@ -0,0 +1,10 @@
MODULE main
CLASS Test.class
K1
getOrDefault(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String; [public, final, bridge]
K2
---
K1
getOrDefault(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; [public, bridge]
K2
---
+2 -2
View File
@@ -1,10 +1,10 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// IGNORE_BACKEND_K2: JVM_IR, JS_IR
// FIR status: different structure of fake overrides. Fixed in the IR fake override builder.
// IGNORE_BACKEND: ANDROID
// ^ NSME: java.util.AbstractMap.remove
// FULL_JDK
// JVM_ABI_K1_K2_DIFF: KT-65095
interface MSS : Map<String, String>
class Test : MSS, java.util.AbstractMap<String, String>() {
@@ -0,0 +1,10 @@
MODULE main
CLASS Test.class
K1
getOrDefault(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String; [public, final, bridge]
K2
---
K1
getOrDefault(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; [public, bridge]
K2
---
+1 -2
View File
@@ -1,10 +1,9 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// IGNORE_BACKEND_K2: JVM_IR, JS_IR
// FIR status: different structure of fake overrides. Fixed in the IR fake override builder.
// IGNORE_BACKEND: ANDROID
// ^ NSME: java.util.AbstractMap.remove
// FULL_JDK
// JVM_ABI_K1_K2_DIFF: KT-65095
// FILE: kt48945b.kt
interface MSS : Map<String, String>
@@ -0,0 +1,10 @@
MODULE main
CLASS Test.class
K1
getOrDefault(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String; [public, final, bridge]
K2
---
K1
getOrDefault(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; [public, bridge]
K2
---
+1 -2
View File
@@ -1,10 +1,9 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// IGNORE_BACKEND_K2: JVM_IR, JS_IR
// FIR status: different structure of fake overrides. Fixed in the IR fake override builder.
// IGNORE_BACKEND: ANDROID
// ^ NSME: java.util.AbstractMap.remove
// FULL_JDK
// JVM_ABI_K1_K2_DIFF: KT-65095
// FILE: kt48945b.kt
interface MSS : Map<String, String>
@@ -7,30 +7,6 @@ MODULE main
public open
K2
public open operator
K1
contains(I)Z [public, bridge]
K2
---
K1
---
K2
contains(Ljava/lang/Integer;)Z [public, bridge]
K1
indexOf(I)I [public, bridge]
K2
---
K1
---
K2
indexOf(Ljava/lang/Integer;)I [public, bridge]
K1
lastIndexOf(I)I [public, bridge]
K2
---
K1
---
K2
lastIndexOf(Ljava/lang/Integer;)I [public, bridge]
CLASS D.class
CLASS METADATA
FUNCTION removeAt(I)Ljava/lang/Integer;
@@ -1,5 +1,5 @@
// TARGET_BACKEND: JVM
// JVM_ABI_K1_K2_DIFF: KT-57300, KT-63857
// JVM_ABI_K1_K2_DIFF: KT-63857
// FILE: A.java
abstract public class A extends B {
@@ -83,14 +83,17 @@ FILE fqName:<root> fileName:/delegatedPropertyWithMultipleOverriddens_generics.k
FUN FAKE_OVERRIDE name:foo visibility:public modality:ABSTRACT <> ($this:<root>.MyList<E4 of <root>.MyMutableList>) returnType:E4 of <root>.MyMutableList [fake_override]
overridden:
public abstract fun foo (): E2 of <root>.MyList declared in <root>.MyList
public abstract fun foo (): E3 of <root>.MyMutableCollection declared in <root>.MyMutableCollection
$this: VALUE_PARAMETER name:<this> type:<root>.MyList<E4 of <root>.MyMutableList>
PROPERTY FAKE_OVERRIDE name:bar visibility:public modality:ABSTRACT [fake_override,val]
overridden:
public abstract bar: E2 of <root>.MyList
public abstract bar: E3 of <root>.MyMutableCollection
FUN FAKE_OVERRIDE name:<get-bar> visibility:public modality:ABSTRACT <> ($this:<root>.MyList<E4 of <root>.MyMutableList>) returnType:E4 of <root>.MyMutableList [fake_override]
correspondingProperty: PROPERTY FAKE_OVERRIDE name:bar visibility:public modality:ABSTRACT [fake_override,val]
overridden:
public abstract fun <get-bar> (): E2 of <root>.MyList declared in <root>.MyList
public abstract fun <get-bar> (): E3 of <root>.MyMutableCollection declared in <root>.MyMutableCollection
$this: VALUE_PARAMETER name:<this> type:<root>.MyList<E4 of <root>.MyMutableList>
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
overridden:
@@ -1,7 +1,5 @@
// ISSUE: KT-55828
// DUMP_IR
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: extra overridden symbols for declarations in MyMutableList.
// ^ This is most likely not a problem, and IR dump can be changed once IR fake override generation is enabled by default.
// JVM_ABI_K1_K2_DIFF: KT-63828
@@ -79,14 +79,17 @@ FILE fqName:<root> fileName:/delegatedPropertyWithMultipleOverriddens_noGenerics
FUN FAKE_OVERRIDE name:foo visibility:public modality:ABSTRACT <> ($this:<root>.MyList) returnType:kotlin.String [fake_override]
overridden:
public abstract fun foo (): kotlin.String declared in <root>.MyList
public abstract fun foo (): kotlin.String declared in <root>.MyMutableCollection
$this: VALUE_PARAMETER name:<this> type:<root>.MyList
PROPERTY FAKE_OVERRIDE name:bar visibility:public modality:ABSTRACT [fake_override,val]
overridden:
public abstract bar: kotlin.String
public abstract bar: kotlin.String
FUN FAKE_OVERRIDE name:<get-bar> visibility:public modality:ABSTRACT <> ($this:<root>.MyList) returnType:kotlin.String [fake_override]
correspondingProperty: PROPERTY FAKE_OVERRIDE name:bar visibility:public modality:ABSTRACT [fake_override,val]
overridden:
public abstract fun <get-bar> (): kotlin.String declared in <root>.MyList
public abstract fun <get-bar> (): kotlin.String declared in <root>.MyMutableCollection
$this: VALUE_PARAMETER name:<this> type:<root>.MyList
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
overridden:
@@ -1,7 +1,5 @@
// ISSUE: KT-55828
// DUMP_IR
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: extra overridden symbols for declarations in MyMutableList.
// ^ This is most likely not a problem, and IR dump can be changed once IR fake override generation is enabled by default.
// JVM_ABI_K1_K2_DIFF: KT-63828
interface MyCollection {
@@ -1,13 +0,0 @@
MODULE main
CLASS MyMap.class
METHOD getOrDefault(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
Annotation: method.invisibleAnnotations
K1
@Lkotlin/SinceKotlin;( version: 1.1 )
K2
---
Annotation: method.invisibleAnnotations
K1
@Lkotlin/internal/PlatformDependent;
K2
---
@@ -3,7 +3,6 @@
// TARGET_BACKEND: JVM
// WITH_STDLIB
// FULL_JDK
// JVM_ABI_K1_K2_DIFF: KT-62788
// FILE: main.kt
var result = ""
@@ -1,6 +1,3 @@
// IGNORE_BACKEND_K2: JVM_IR
// FIR status: KT-57299 K2: VerifyError due to overriding final method `size` on a subclass of Collection and Set
abstract class AC<X> : Collection<X>
abstract class ASet<T> : AC<T>(), Set<T>
@@ -1,8 +1,5 @@
// WITH_STDLIB
// IGNORE_BACKEND_K2: JVM_IR
// FIR status: KT-57300 K2: subclass of MutableCollection with primitive element type has methods with boxed type
abstract class AIterD : AbstractIterator<Double>()
abstract class ACollD : AbstractCollection<Double>()
@@ -1,9 +1,5 @@
// WITH_STDLIB
// IGNORE_BACKEND_K2: JVM_IR
// FIR status: KT-57300 K2: subclass of MutableCollection with primitive element type has methods with boxed type
// (`containsValue(Ljava/lang/Double;)Z` instead of `containsValue(D)Z`)
abstract class AMapSD : AbstractMap<String, Double>()
abstract class AMMapSD : AbstractMutableMap<String, Double>()
@@ -1,8 +1,5 @@
// WITH_STDLIB
// IGNORE_BACKEND_K2: JVM_IR
// FIR status: KT-57300 K2: subclass of MutableCollection with primitive element type has methods with boxed type
abstract class AMListD : AbstractMutableList<Double>()
abstract class AMListI : AbstractMutableList<Int>()
@@ -0,0 +1,13 @@
// FIR_IDENTICAL
interface SupervisorApiCallContextImpl : SupervisorApiCallDbContext, TxExecutor
interface SupervisorApiCallDbContext : TxExecutor, DbContextOwner
interface DbContextOwner : TxExecutor {
override fun foo(p: Int) {}
}
interface TxExecutor {
fun foo(p: Int = 1)
}
@@ -12,7 +12,7 @@ abstract class Derived : Base {
class InterfaceThenClass : Base, Derived() {}
fun test_1(x: InterfaceThenClass, s: String?) {
x.delete(<!ARGUMENT_TYPE_MISMATCH!>s<!>)
x.delete(s)
}
class ClassThenInterface : Derived(), Base {}
@@ -0,0 +1,41 @@
// FIR_IDENTICAL
// FILE: test.kt
// We inherit getReturnType
// from CallableDescriptor with return type String? and
// from ClassConstructorDescriptorImpl with return type String
// but because ClassConstructorDescriptorImpl.getReturnType subsumes CallableDescriptor.getReturnType, we don't report RETURN_TYPE_MISMATCH_ON_INHERITANCE.
class DeserializedClassConstructorDescriptor : CallableDescriptor, ClassConstructorDescriptorImpl()
// FILE: ClassConstructorDescriptorImpl.java
// IJ reports an inspection warning
// "Non-annotated method 'getReturnType' from 'FunctionDescriptorImpl' implements non-null method from 'ConstructorDescriptor'"
// which is the underlying issue.
public class ClassConstructorDescriptorImpl extends FunctionDescriptorImpl implements ConstructorDescriptor {}
// FILE: FunctionDescriptorImpl.java
public abstract class FunctionDescriptorImpl implements CallableDescriptor {
@Override
public String getReturnType() {
return null;
}
}
// FILE: ConstructorDescriptor.java
import org.jetbrains.annotations.NotNull;
public interface ConstructorDescriptor extends CallableDescriptor {
@NotNull
@Override
String getReturnType();
}
// FILE: CallableDescriptor.java
import org.jetbrains.annotations.Nullable;
public interface CallableDescriptor {
@Nullable
String getReturnType();
}
@@ -0,0 +1,54 @@
// FIR_IDENTICAL
// FILE: VertLikeTable.java
public interface VertLikeTable extends BasicModMajorObject, BasicModTableOrView, BasicModIdentifiedElement
// FILE: BasicModMajorObject.java
public interface BasicModMajorObject extends BasicMajorObject, BasicModSchemaObject
// FILE: BasicMajorObject.java
public interface BasicMajorObject extends BasicSchemaObject, DasSchemaChild
// FILE: BasicSchemaObject.java
public interface BasicSchemaObject extends BasicNamedElement
// FILE: BasicNamedElement.java
public interface BasicNamedElement extends BasicElement {
@Override
void foo();
}
// FILE: BasicElement.java
public interface BasicElement extends BasicMixinElement
// FILE: BasicMixinElement.java
public interface BasicMixinElement extends DasObject
// FILE: DasObject.java
public interface DasObject {
default void foo() {}
}
// FILE: DasSchemaChild.java
public interface DasSchemaChild extends DasObject
// FILE: BasicModSchemaObject.java
public interface BasicModSchemaObject extends BasicSchemaObject, BasicModNamedElement
// FILE: BasicModNamedElement.java
public interface BasicModNamedElement extends BasicNamedElement, BasicModElement
// FILE: BasicModElement.java
public interface BasicModElement extends BasicElement, BasicModMixinElement
// FILE: BasicModMixinElement.java
public interface BasicModMixinElement extends BasicMixinElement
// FILE: BasicModTableOrView.java
public interface BasicModTableOrView extends BasicTableOrView, BasicModLikeTable
// FILE: BasicTableOrView.java
public interface BasicTableOrView extends BasicLikeTable, BasicMixinTableOrView
// FILE: BasicLikeTable.java
public interface BasicLikeTable extends BasicNamedElement
// FILE: BasicMixinTableOrView.java
public interface BasicMixinTableOrView extends DasTable
// FILE: DasTable.java
public interface DasTable extends DasSchemaChild
// FILE: BasicModLikeTable.java
public interface BasicModLikeTable extends BasicLikeTable, BasicModNamedElement
// FILE: BasicModIdentifiedElement.java
public interface BasicModIdentifiedElement extends BasicIdentifiedElement, BasicModElement
// FILE: BasicIdentifiedElement.java
public interface BasicIdentifiedElement extends BasicElement
// FILE: test.kt
fun foo(t: VertLikeTable) {
t.foo()
}
@@ -0,0 +1,16 @@
// FIR_IDENTICAL
abstract class C<T, ModelPropertyT : ModelListPropertyCore<T>>() :
A<ModelPropertyT, T>(),
I<List<T>>
abstract class A<out ModelPropertyT : ModelPropertyCore<*>, T> {
abstract val property: ModelPropertyT
}
interface I<out T> {
val property: ModelPropertyCore<out T>
}
interface ModelListPropertyCore<T> : ModelPropertyCore<List<T>>
interface ModelPropertyCore<T>
@@ -0,0 +1,16 @@
// FIR_IDENTICAL
interface UAnnotationEx : UAnnotation, UAnchorOwner
interface UAnchorOwner : UElement
interface UElement {
val psi: PsiElement?
val javaPsi: PsiElement?
get() = psi
}
interface UAnnotation : UElement {
override val javaPsi: PsiAnnotation?
}
interface PsiElement
interface PsiAnnotation : PsiElement
@@ -0,0 +1,21 @@
// FIR_IDENTICAL
// inherits accept from FirDeclarationStatusImpl and FirResolvedDeclarationStatus
class FirResolvedDeclarationStatusImpl : FirDeclarationStatusImpl(), FirResolvedDeclarationStatus
// inherits accept from FirElement and FirDeclarationStatus
open class FirDeclarationStatusImpl : FirPureAbstractElement(), FirDeclarationStatus
abstract class FirPureAbstractElement : FirElement
interface FirResolvedDeclarationStatus : FirDeclarationStatus {
override fun accept() {}
}
interface FirDeclarationStatus : FirElement {
override fun accept() {}
}
interface FirElement {
fun accept() {}
}
@@ -0,0 +1,18 @@
// FIR_IDENTICAL
class KtFirPsiJavaClassSymbol : KtFirNamedClassOrObjectSymbolBase(), KtFirPsiSymbol<String, String>
open class KtFirNamedClassOrObjectSymbolBase : KtNamedClassOrObjectSymbol(), KtFirSymbol<String>
abstract class KtNamedClassOrObjectSymbol : KtLifetimeOwner
interface KtFirPsiSymbol<P, S> : KtFirSymbol<S>
interface KtLifetimeOwner {
val token: String
}
interface KtSymbol : KtLifetimeOwner
interface KtFirSymbol<out S> : KtSymbol, KtLifetimeOwner {
override val token: String get() = ""
}
@@ -1,29 +0,0 @@
// !CHECK_TYPE
// FILE: PythonRunParams.java
import java.util.Map;
public interface PythonRunParams {
Map<String, String> fetchEnvs();
}
// FILE: AbstractPythonRunConfiguration.java
import java.util.HashMap;
import java.util.Map;
public class AbstractPythonRunConfiguration<T> implements PythonRunParams {
public Map<String, String> fetchEnvs() {
return null;
}
}
// FILE: PythonRunConfiguration.java
public class PythonRunConfiguration extends AbstractPythonRunConfiguration implements PythonRunParams {}
// FILE: ProjectMain.kt
fun getRunCommandLine(configuration: PythonRunConfiguration) {
fun foo(envs: Map<String, String>) {}
checkSubtype<Map<String, String>>(<!ARGUMENT_TYPE_MISMATCH!>configuration.fetchEnvs()<!>)
checkSubtype<Map<*, *>>(configuration.fetchEnvs())
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !CHECK_TYPE
// FILE: PythonRunParams.java
import java.util.Map;
@@ -27,8 +27,8 @@ fun foo() {
x.add(bar())
x.add("")
x[0] = null
x[0] = bar()
x[0] = <!NULL_FOR_NONNULL_TYPE!>null<!>
x[0] = <!ARGUMENT_TYPE_MISMATCH!>bar()<!>
x[0] = ""
val b1: MutableList<String?> = <!INITIALIZER_TYPE_MISMATCH!>x<!>
@@ -527,19 +527,19 @@ FILE fqName:<root> fileName:/enumClassModality.kt
public abstract fun foo (): kotlin.Unit declared in <root>.TestAbstractEnum2
$this: VALUE_PARAMETER name:<this> type:<root>.TestAbstractEnum2.X1
BLOCK_BODY
FUN FAKE_OVERRIDE name:equals visibility:public modality:FINAL <> ($this:kotlin.Enum<<root>.TestAbstractEnum2>, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
FUN FAKE_OVERRIDE name:equals visibility:public modality:FINAL <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
overridden:
public final fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.TestAbstractEnum2
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.TestAbstractEnum2>
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:FINAL <> ($this:kotlin.Enum<<root>.TestAbstractEnum2>) returnType:kotlin.Int [fake_override]
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:FINAL <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public final fun hashCode (): kotlin.Int declared in <root>.TestAbstractEnum2
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.TestAbstractEnum2>
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Enum<<root>.TestAbstractEnum2>) returnType:kotlin.String [fake_override]
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.TestAbstractEnum2
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.TestAbstractEnum2>
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:compareTo visibility:public modality:FINAL <> ($this:kotlin.Enum<<root>.TestAbstractEnum2>, other:<root>.TestAbstractEnum2) returnType:kotlin.Int [fake_override,operator]
overridden:
public final fun compareTo (other: <root>.TestAbstractEnum2): kotlin.Int declared in <root>.TestAbstractEnum2
@@ -576,19 +576,22 @@ FILE fqName:<root> fileName:/enumClassModality.kt
overridden:
public abstract fun foo (): kotlin.Unit declared in <root>.IFoo
$this: VALUE_PARAMETER name:<this> type:<root>.IFoo
FUN FAKE_OVERRIDE name:equals visibility:public modality:FINAL <> ($this:kotlin.Enum<<root>.TestAbstractEnum2>, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
FUN FAKE_OVERRIDE name:equals visibility:public modality:FINAL <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
overridden:
public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.IFoo
public final fun equals (other: kotlin.Any?): kotlin.Boolean declared in kotlin.Enum
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.TestAbstractEnum2>
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:FINAL <> ($this:kotlin.Enum<<root>.TestAbstractEnum2>) returnType:kotlin.Int [fake_override]
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:FINAL <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.IFoo
public final fun hashCode (): kotlin.Int declared in kotlin.Enum
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.TestAbstractEnum2>
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Enum<<root>.TestAbstractEnum2>) returnType:kotlin.String [fake_override]
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.IFoo
public open fun toString (): kotlin.String declared in kotlin.Enum
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.TestAbstractEnum2>
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:compareTo visibility:public modality:FINAL <> ($this:kotlin.Enum<<root>.TestAbstractEnum2>, other:<root>.TestAbstractEnum2) returnType:kotlin.Int [fake_override,operator]
overridden:
public final fun compareTo (other: E of kotlin.Enum): kotlin.Int declared in kotlin.Enum
@@ -1,6 +1,3 @@
// KT-64271, KT-64382
// IGNORE_BACKEND_K2: NATIVE, WASM, JS_IR, JS_IR_ES6
enum class TestFinalEnum1 {
X1
}
@@ -1,6 +1,5 @@
// FIR_IDENTICAL
// KT-64271
// IGNORE_BACKEND_K2: JVM_IR
open class Base {
override fun equals(other: Any?): Boolean {
@@ -20,30 +20,30 @@ FILE fqName:<root> fileName:/AbstractMutableMap.kt
CONST Null type=kotlin.Nothing? value=null
PROPERTY name:entries visibility:public modality:OPEN [val]
overridden:
public abstract entries: @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableSet<@[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableMap.MutableEntry<@[FlexibleNullability] K of kotlin.collections.AbstractMutableMap?, @[FlexibleNullability] V of kotlin.collections.AbstractMutableMap?>?>?
public abstract entries: kotlin.collections.MutableSet<kotlin.collections.MutableMap.MutableEntry<K of kotlin.collections.AbstractMutableMap, V of kotlin.collections.AbstractMutableMap>>
FUN name:<get-entries> visibility:public modality:OPEN <> ($this:<root>.MyMap<K of <root>.MyMap, V of <root>.MyMap>) returnType:kotlin.collections.MutableSet<kotlin.collections.MutableMap.MutableEntry<K of <root>.MyMap, V of <root>.MyMap>>
correspondingProperty: PROPERTY name:entries visibility:public modality:OPEN [val]
overridden:
public abstract fun <get-entries> (): @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableSet<@[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableMap.MutableEntry<@[FlexibleNullability] K of kotlin.collections.AbstractMutableMap?, @[FlexibleNullability] V of kotlin.collections.AbstractMutableMap?>?>? declared in kotlin.collections.AbstractMutableMap
public abstract fun <get-entries> (): kotlin.collections.MutableSet<kotlin.collections.MutableMap.MutableEntry<K of kotlin.collections.AbstractMutableMap, V of kotlin.collections.AbstractMutableMap>> declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:<root>.MyMap<K of <root>.MyMap, V of <root>.MyMap>
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun <get-entries> (): kotlin.collections.MutableSet<kotlin.collections.MutableMap.MutableEntry<K of <root>.MyMap, V of <root>.MyMap>> declared in <root>.MyMap'
CALL 'public final fun mutableSetOf <T> (): kotlin.collections.MutableSet<T of kotlin.collections.mutableSetOf> declared in kotlin.collections' type=kotlin.collections.MutableSet<kotlin.collections.MutableMap.MutableEntry<K of <root>.MyMap, V of <root>.MyMap>> origin=null
<T>: kotlin.collections.MutableMap.MutableEntry<K of <root>.MyMap, V of <root>.MyMap>
FUN FAKE_OVERRIDE name:clear visibility:public modality:OPEN <> ($this:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>) returnType:kotlin.Unit [fake_override]
FUN FAKE_OVERRIDE name:clear visibility:public modality:OPEN <> ($this:kotlin.collections.MutableMap<K of <root>.MyMap, V of <root>.MyMap>) returnType:kotlin.Unit [fake_override]
overridden:
public open fun clear (): kotlin.Unit declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>
FUN FAKE_OVERRIDE name:putAll visibility:public modality:OPEN <> ($this:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>, p0:@[EnhancedNullability] kotlin.collections.Map<out @[FlexibleNullability] K of <root>.MyMap?, @[FlexibleNullability] V of <root>.MyMap?>) returnType:kotlin.Unit [fake_override]
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.MutableMap<K of <root>.MyMap, V of <root>.MyMap>
FUN FAKE_OVERRIDE name:putAll visibility:public modality:OPEN <> ($this:kotlin.collections.MutableMap<K of <root>.MyMap, V of <root>.MyMap>, from:kotlin.collections.Map<out K of <root>.MyMap, V of <root>.MyMap>) returnType:kotlin.Unit [fake_override]
overridden:
public open fun putAll (p0: @[EnhancedNullability] kotlin.collections.Map<out @[FlexibleNullability] K of kotlin.collections.AbstractMutableMap?, out @[FlexibleNullability] V of kotlin.collections.AbstractMutableMap?>): kotlin.Unit declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>
VALUE_PARAMETER name:p0 index:0 type:@[EnhancedNullability] kotlin.collections.Map<out @[FlexibleNullability] K of <root>.MyMap?, @[FlexibleNullability] V of <root>.MyMap?>
FUN FAKE_OVERRIDE name:remove visibility:public modality:OPEN <> ($this:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>, p0:@[FlexibleNullability] K of <root>.MyMap?) returnType:V of <root>.MyMap? [fake_override]
public open fun putAll (from: kotlin.collections.Map<out K of kotlin.collections.AbstractMutableMap, V of kotlin.collections.AbstractMutableMap>): kotlin.Unit declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.MutableMap<K of <root>.MyMap, V of <root>.MyMap>
VALUE_PARAMETER name:from index:0 type:kotlin.collections.Map<out K of <root>.MyMap, V of <root>.MyMap>
FUN FAKE_OVERRIDE name:remove visibility:public modality:OPEN <> ($this:kotlin.collections.MutableMap<K of <root>.MyMap, V of <root>.MyMap>, key:K of <root>.MyMap) returnType:V of <root>.MyMap? [fake_override]
overridden:
public open fun remove (p0: @[FlexibleNullability] K of kotlin.collections.AbstractMutableMap?): V of kotlin.collections.AbstractMutableMap? declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>
VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] K of <root>.MyMap?
public open fun remove (key: K of kotlin.collections.AbstractMutableMap): V of kotlin.collections.AbstractMutableMap? declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.MutableMap<K of <root>.MyMap, V of <root>.MyMap>
VALUE_PARAMETER name:key index:0 type:K of <root>.MyMap
FUN FAKE_OVERRIDE name:remove visibility:public modality:OPEN <> ($this:kotlin.collections.MutableMap<K of <root>.MyMap, V of <root>.MyMap>, key:K of <root>.MyMap, value:V of <root>.MyMap) returnType:kotlin.Boolean [fake_override]
annotations:
SinceKotlin(version = "1.1")
@@ -55,47 +55,47 @@ FILE fqName:<root> fileName:/AbstractMutableMap.kt
VALUE_PARAMETER name:value index:1 type:V of <root>.MyMap
PROPERTY FAKE_OVERRIDE name:keys visibility:public modality:OPEN [fake_override,val]
overridden:
public open keys: @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableSet<@[FlexibleNullability] K of kotlin.collections.AbstractMutableMap?>?
FUN FAKE_OVERRIDE name:<get-keys> visibility:public modality:OPEN <> ($this:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>) returnType:@[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableSet<@[FlexibleNullability] K of <root>.MyMap?>? [fake_override]
public open keys: kotlin.collections.MutableSet<K of kotlin.collections.AbstractMutableMap>
FUN FAKE_OVERRIDE name:<get-keys> visibility:public modality:OPEN <> ($this:kotlin.collections.MutableMap<K of <root>.MyMap, V of <root>.MyMap>) returnType:kotlin.collections.MutableSet<K of <root>.MyMap> [fake_override]
correspondingProperty: PROPERTY FAKE_OVERRIDE name:keys visibility:public modality:OPEN [fake_override,val]
overridden:
public open fun <get-keys> (): @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableSet<@[FlexibleNullability] K of kotlin.collections.AbstractMutableMap?>? declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>
public open fun <get-keys> (): kotlin.collections.MutableSet<K of kotlin.collections.AbstractMutableMap> declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.MutableMap<K of <root>.MyMap, V of <root>.MyMap>
PROPERTY FAKE_OVERRIDE name:values visibility:public modality:OPEN [fake_override,val]
overridden:
public open values: @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<@[FlexibleNullability] V of kotlin.collections.AbstractMutableMap?>?
FUN FAKE_OVERRIDE name:<get-values> visibility:public modality:OPEN <> ($this:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>) returnType:@[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<@[FlexibleNullability] V of <root>.MyMap?>? [fake_override]
public open values: kotlin.collections.MutableCollection<V of kotlin.collections.AbstractMutableMap>
FUN FAKE_OVERRIDE name:<get-values> visibility:public modality:OPEN <> ($this:kotlin.collections.MutableMap<K of <root>.MyMap, V of <root>.MyMap>) returnType:kotlin.collections.MutableCollection<V of <root>.MyMap> [fake_override]
correspondingProperty: PROPERTY FAKE_OVERRIDE name:values visibility:public modality:OPEN [fake_override,val]
overridden:
public open fun <get-values> (): @[FlexibleNullability] @[FlexibleMutability] kotlin.collections.MutableCollection<@[FlexibleNullability] V of kotlin.collections.AbstractMutableMap?>? declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>
public open fun <get-values> (): kotlin.collections.MutableCollection<V of kotlin.collections.AbstractMutableMap> declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.MutableMap<K of <root>.MyMap, V of <root>.MyMap>
PROPERTY FAKE_OVERRIDE name:size visibility:public modality:OPEN [fake_override,val]
overridden:
public open size: kotlin.Int
FUN FAKE_OVERRIDE name:<get-size> visibility:public modality:OPEN <> ($this:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>) returnType:kotlin.Int [fake_override]
FUN FAKE_OVERRIDE name:<get-size> visibility:public modality:OPEN <> ($this:kotlin.collections.Map<K of <root>.MyMap, V of <root>.MyMap>) returnType:kotlin.Int [fake_override]
correspondingProperty: PROPERTY FAKE_OVERRIDE name:size visibility:public modality:OPEN [fake_override,val]
overridden:
public open fun <get-size> (): kotlin.Int declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>
FUN FAKE_OVERRIDE name:isEmpty visibility:public modality:OPEN <> ($this:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>) returnType:kotlin.Boolean [fake_override]
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Map<K of <root>.MyMap, V of <root>.MyMap>
FUN FAKE_OVERRIDE name:isEmpty visibility:public modality:OPEN <> ($this:kotlin.collections.Map<K of <root>.MyMap, V of <root>.MyMap>) returnType:kotlin.Boolean [fake_override]
overridden:
public open fun isEmpty (): kotlin.Boolean declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>
FUN FAKE_OVERRIDE name:containsKey visibility:public modality:OPEN <> ($this:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>, p0:@[FlexibleNullability] K of <root>.MyMap?) returnType:kotlin.Boolean [fake_override]
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Map<K of <root>.MyMap, V of <root>.MyMap>
FUN FAKE_OVERRIDE name:containsKey visibility:public modality:OPEN <> ($this:kotlin.collections.Map<K of <root>.MyMap, V of <root>.MyMap>, key:K of <root>.MyMap) returnType:kotlin.Boolean [fake_override]
overridden:
public open fun containsKey (p0: @[FlexibleNullability] K of kotlin.collections.AbstractMutableMap?): kotlin.Boolean declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>
VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] K of <root>.MyMap?
FUN FAKE_OVERRIDE name:containsValue visibility:public modality:OPEN <> ($this:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>, p0:@[FlexibleNullability] V of <root>.MyMap?) returnType:kotlin.Boolean [fake_override]
public open fun containsKey (key: K of kotlin.collections.AbstractMutableMap): kotlin.Boolean declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Map<K of <root>.MyMap, V of <root>.MyMap>
VALUE_PARAMETER name:key index:0 type:K of <root>.MyMap
FUN FAKE_OVERRIDE name:containsValue visibility:public modality:OPEN <> ($this:kotlin.collections.Map<K of <root>.MyMap, V of <root>.MyMap>, value:V of <root>.MyMap) returnType:kotlin.Boolean [fake_override]
overridden:
public open fun containsValue (p0: @[FlexibleNullability] V of kotlin.collections.AbstractMutableMap?): kotlin.Boolean declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>
VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] V of <root>.MyMap?
FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>, p0:@[FlexibleNullability] K of <root>.MyMap?) returnType:V of <root>.MyMap? [fake_override,operator]
public open fun containsValue (value: V of kotlin.collections.AbstractMutableMap): kotlin.Boolean declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Map<K of <root>.MyMap, V of <root>.MyMap>
VALUE_PARAMETER name:value index:0 type:V of <root>.MyMap
FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:kotlin.collections.Map<K of <root>.MyMap, V of <root>.MyMap>, key:K of <root>.MyMap) returnType:V of <root>.MyMap? [fake_override,operator]
overridden:
public open fun get (p0: @[FlexibleNullability] K of kotlin.collections.AbstractMutableMap?): V of kotlin.collections.AbstractMutableMap? declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>
VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] K of <root>.MyMap?
public open fun get (key: K of kotlin.collections.AbstractMutableMap): V of kotlin.collections.AbstractMutableMap? declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Map<K of <root>.MyMap, V of <root>.MyMap>
VALUE_PARAMETER name:key index:0 type:K of <root>.MyMap
FUN FAKE_OVERRIDE name:getOrDefault visibility:public modality:OPEN <> ($this:kotlin.collections.Map<K of <root>.MyMap, V of <root>.MyMap>, key:K of <root>.MyMap, defaultValue:V of <root>.MyMap) returnType:V of <root>.MyMap [fake_override]
annotations:
SinceKotlin(version = "1.1")
@@ -159,19 +159,19 @@ FILE fqName:<root> fileName:/AbstractMutableMap.kt
VALUE_PARAMETER name:p0 index:0 type:@[EnhancedNullability] K of <root>.MyMap
VALUE_PARAMETER name:p1 index:1 type:@[EnhancedNullability] {V of <root>.MyMap & Any}
VALUE_PARAMETER name:p2 index:2 type:@[EnhancedNullability] java.util.function.BiFunction<in V of <root>.MyMap, in V of <root>.MyMap, out V of <root>.MyMap?>
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>, p0:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
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 (p0: kotlin.Any?): kotlin.Boolean declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>
VALUE_PARAMETER name:p0 index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>) returnType:kotlin.Int [fake_override]
public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>) returnType:@[EnhancedNullability] kotlin.String [fake_override]
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): @[EnhancedNullability] kotlin.String declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>
public open fun toString (): kotlin.String declared in kotlin.collections.AbstractMutableMap
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:clone visibility:protected/*protected and package*/ modality:OPEN <> ($this:java.util.AbstractMap<K of <root>.MyMap, V of <root>.MyMap>) returnType:@[FlexibleNullability] kotlin.Any? [fake_override]
overridden:
protected/*protected and package*/ open fun clone (): @[FlexibleNullability] kotlin.Any? declared in kotlin.collections.AbstractMutableMap
@@ -41,22 +41,22 @@ class MyMap<K : Any, V : Any> : AbstractMutableMap<K, V> {
/* fake */ override fun computeIfPresent(p0: @EnhancedNullability K, p1: @EnhancedNullability BiFunction<in @EnhancedNullability K, in V, out V?>): V?
// CHECK JVM_IR:
// Mangled name: MyMap#containsKey(1:0?){}kotlin.Boolean
// Public signature: /MyMap.containsKey|5388260987070917879[0]
// Public signature debug description: containsKey(1:0?){}kotlin.Boolean
/* fake */ override fun containsKey(p0: K?): Boolean
// Mangled name: MyMap#containsKey(1:0){}kotlin.Boolean
// Public signature: /MyMap.containsKey|-2697616884574929105[0]
// Public signature debug description: containsKey(1:0){}kotlin.Boolean
/* fake */ override fun containsKey(key: K): Boolean
// CHECK JVM_IR:
// Mangled name: MyMap#containsValue(1:1?){}kotlin.Boolean
// Public signature: /MyMap.containsValue|6075307672600079396[0]
// Public signature debug description: containsValue(1:1?){}kotlin.Boolean
/* fake */ override fun containsValue(p0: V?): Boolean
// Mangled name: MyMap#containsValue(1:1){}kotlin.Boolean
// Public signature: /MyMap.containsValue|4814293423579408279[0]
// Public signature debug description: containsValue(1:1){}kotlin.Boolean
/* fake */ override fun containsValue(value: V): Boolean
// CHECK JVM_IR:
// Mangled name: MyMap#equals(kotlin.Any?){}kotlin.Boolean
// Public signature: /MyMap.equals|722809408929142791[0]
// Public signature debug description: equals(kotlin.Any?){}kotlin.Boolean
/* fake */ override operator fun equals(p0: Any?): Boolean
/* fake */ override operator fun equals(other: Any?): Boolean
// CHECK:
// Mangled name: MyMap#forEach(java.util.function.BiConsumer<in|1:0{EnhancedNullability},in|1:1{EnhancedNullability}>{EnhancedNullability}){}
@@ -65,10 +65,10 @@ class MyMap<K : Any, V : Any> : AbstractMutableMap<K, V> {
/* fake */ override fun forEach(p0: @EnhancedNullability BiConsumer<in @EnhancedNullability K, in @EnhancedNullability V>): Unit
// CHECK JVM_IR:
// Mangled name: MyMap#get(1:0?){}1:1?
// Public signature: /MyMap.get|-6772263552617817959[0]
// Public signature debug description: get(1:0?){}1:1?
/* fake */ override operator fun get(p0: K?): V?
// Mangled name: MyMap#get(1:0){}1:1?
// Public signature: /MyMap.get|-2177239518810968262[0]
// Public signature debug description: get(1:0){}1:1?
/* fake */ override operator fun get(key: K): V?
// CHECK JVM_IR:
// Mangled name: MyMap#hashCode(){}kotlin.Int
@@ -91,12 +91,10 @@ class MyMap<K : Any, V : Any> : AbstractMutableMap<K, V> {
/* fake */ override fun merge(p0: @EnhancedNullability K, p1: @EnhancedNullability (V & Any), p2: @EnhancedNullability BiFunction<in V, in V, out V?>): V?
// CHECK:
// Mangled name: MyMap#putAll(kotlin.collections.Map<out|1:0?,1:1?>{EnhancedNullability}){}
// Mangled name for the signature by IR: putAll(kotlin.collections.Map<out|1:0?,1:1?>{EnhancedNullability}){}
// Mangled name for the signature by Frontend: putAll(kotlin.collections.Map<out|1:0?,out|1:1?>{EnhancedNullability}){}
// Public signature: /MyMap.putAll|8252374948943605914[0]
// Public signature debug description: putAll(kotlin.collections.Map<out|1:0?,1:1?>{EnhancedNullability}){}
/* fake */ override fun putAll(p0: @EnhancedNullability Map<out K?, V?>): Unit
// Mangled name: MyMap#putAll(kotlin.collections.Map<out|1:0,1:1>){}
// Public signature: /MyMap.putAll|3806055228188180795[0]
// Public signature debug description: putAll(kotlin.collections.Map<out|1:0,1:1>){}
/* fake */ override fun putAll(from: Map<out K, V>): Unit
// CHECK JVM_IR:
// Mangled name: MyMap#putIfAbsent(1:0{EnhancedNullability};1:1{EnhancedNullability}){}1:1?
@@ -105,10 +103,10 @@ class MyMap<K : Any, V : Any> : AbstractMutableMap<K, V> {
/* fake */ override fun putIfAbsent(p0: @EnhancedNullability K, p1: @EnhancedNullability V): V?
// CHECK JVM_IR:
// Mangled name: MyMap#remove(1:0?){}1:1?
// Public signature: /MyMap.remove|-6409265674850759324[0]
// Public signature debug description: remove(1:0?){}1:1?
/* fake */ override fun remove(p0: K?): V?
// Mangled name: MyMap#remove(1:0){}1:1?
// Public signature: /MyMap.remove|-2166109024517733367[0]
// Public signature debug description: remove(1:0){}1:1?
/* fake */ override fun remove(key: K): V?
// CHECK JVM_IR:
// Mangled name: MyMap#replace(1:0{EnhancedNullability};1:1{EnhancedNullability}){}1:1?
@@ -129,10 +127,10 @@ class MyMap<K : Any, V : Any> : AbstractMutableMap<K, V> {
/* fake */ override fun replaceAll(p0: @EnhancedNullability BiFunction<in @EnhancedNullability K, in @EnhancedNullability V, out @EnhancedNullability V>): Unit
// CHECK JVM_IR:
// Mangled name: MyMap#toString(){}kotlin.String{EnhancedNullability}
// Public signature: /MyMap.toString|7581629773206850948[0]
// Public signature debug description: toString(){}kotlin.String{EnhancedNullability}
/* fake */ override fun toString(): @EnhancedNullability String
// Mangled name: MyMap#toString(){}kotlin.String
// Public signature: /MyMap.toString|6958853723545266802[0]
// Public signature debug description: toString(){}kotlin.String
/* fake */ override fun toString(): String
// CHECK JVM_IR:
// Mangled name: MyMap#put(1:0;1:1){}1:1?
@@ -144,12 +142,12 @@ class MyMap<K : Any, V : Any> : AbstractMutableMap<K, V> {
// Mangled name: MyMap{}keys
// Public signature: /MyMap.keys|-1539062068328255324[0]
// Public signature debug description: {}keys
/* fake */ override val keys: MutableSet<K?>?
/* fake */ override val keys: MutableSet<K>
// CHECK JVM_IR:
// Mangled name: MyMap#<get-keys>(){}kotlin.collections.MutableSet<1:0?>?
// Public signature: /MyMap.keys.<get-keys>|-1655820107680360252[0]
// Public signature debug description: <get-keys>(){}kotlin.collections.MutableSet<1:0?>?
/* fake */ override get(): MutableSet<K?>?
// Mangled name: MyMap#<get-keys>(){}kotlin.collections.MutableSet<1:0>
// Public signature: /MyMap.keys.<get-keys>|7916886785914150473[0]
// Public signature debug description: <get-keys>(){}kotlin.collections.MutableSet<1:0>
/* fake */ override get(): MutableSet<K>
// CHECK:
// Mangled name: MyMap{}size
@@ -166,12 +164,12 @@ class MyMap<K : Any, V : Any> : AbstractMutableMap<K, V> {
// Mangled name: MyMap{}values
// Public signature: /MyMap.values|-764749005844117249[0]
// Public signature debug description: {}values
/* fake */ override val values: MutableCollection<V?>?
/* fake */ override val values: MutableCollection<V>
// CHECK JVM_IR:
// Mangled name: MyMap#<get-values>(){}kotlin.collections.MutableCollection<1:1?>?
// Public signature: /MyMap.values.<get-values>|-600458440523652989[0]
// Public signature debug description: <get-values>(){}kotlin.collections.MutableCollection<1:1?>?
/* fake */ override get(): MutableCollection<V?>?
// Mangled name: MyMap#<get-values>(){}kotlin.collections.MutableCollection<1:1>
// Public signature: /MyMap.values.<get-values>|2480674037943213638[0]
// Public signature debug description: <get-values>(){}kotlin.collections.MutableCollection<1:1>
/* fake */ override get(): MutableCollection<V>
// CHECK:
// Mangled name: MyMap{}entries
@@ -185,3 +183,4 @@ class MyMap<K : Any, V : Any> : AbstractMutableMap<K, V> {
override get(): MutableSet<MutableEntry<K, V>>
}
+84 -67
View File
@@ -196,62 +196,74 @@ FILE fqName:<root> fileName:/MultiList.kt
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in java.util.ArrayList'
<E>: <root>.Some<T of <root>.SomeList>
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:SomeList modality:OPEN visibility:public superTypes:[<root>.MyList<T of <root>.SomeList>; java.util.ArrayList<<root>.Some<T of <root>.SomeList>>]'
FUN FAKE_OVERRIDE name:contains visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>, p0:@[EnhancedNullability] <root>.Some<T of <root>.SomeList>) returnType:kotlin.Boolean [fake_override,operator]
FUN FAKE_OVERRIDE name:contains visibility:public modality:OPEN <> ($this:kotlin.collections.List<<root>.Some<T of <root>.SomeList>>, element:<root>.Some<T of <root>.SomeList>) returnType:kotlin.Boolean [fake_override,operator]
overridden:
public abstract fun contains (element: <root>.Some<T of <root>.MyList>): kotlin.Boolean declared in <root>.MyList
public open fun contains (p0: @[EnhancedNullability] E of java.util.ArrayList): kotlin.Boolean declared in java.util.ArrayList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>
VALUE_PARAMETER name:p0 index:0 type:@[EnhancedNullability] <root>.Some<T of <root>.SomeList>
FUN FAKE_OVERRIDE name:containsAll visibility:public modality:OPEN <> ($this:java.util.AbstractCollection<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>, p0:kotlin.collections.Collection<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>) returnType:kotlin.Boolean [fake_override]
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<<root>.Some<T of <root>.SomeList>>
VALUE_PARAMETER name:element index:0 type:<root>.Some<T of <root>.SomeList>
FUN FAKE_OVERRIDE name:containsAll visibility:public modality:OPEN <> ($this:kotlin.collections.List<<root>.Some<T of <root>.SomeList>>, elements:kotlin.collections.Collection<<root>.Some<T of <root>.SomeList>>) returnType:kotlin.Boolean [fake_override]
overridden:
public abstract fun containsAll (elements: kotlin.collections.Collection<<root>.Some<T of <root>.MyList>>): kotlin.Boolean declared in <root>.MyList
public open fun containsAll (p0: kotlin.collections.Collection<@[FlexibleNullability] E of java.util.ArrayList?>): kotlin.Boolean declared in java.util.ArrayList
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractCollection<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>
VALUE_PARAMETER name:p0 index:0 type:kotlin.collections.Collection<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>
FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>, p0:kotlin.Int) returnType:@[EnhancedNullability] <root>.Some<T of <root>.SomeList> [fake_override,operator]
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<<root>.Some<T of <root>.SomeList>>
VALUE_PARAMETER name:elements index:0 type:kotlin.collections.Collection<<root>.Some<T of <root>.SomeList>>
FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:kotlin.collections.List<<root>.Some<T of <root>.SomeList>>, index:kotlin.Int) returnType:<root>.Some<T of <root>.SomeList> [fake_override,operator]
overridden:
public abstract fun get (index: kotlin.Int): <root>.Some<T of <root>.MyList> declared in <root>.MyList
public open fun get (p0: kotlin.Int): @[EnhancedNullability] E of java.util.ArrayList declared in java.util.ArrayList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>
VALUE_PARAMETER name:p0 index:0 type:kotlin.Int
FUN FAKE_OVERRIDE name:indexOf visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>, p0:@[EnhancedNullability] <root>.Some<T of <root>.SomeList>) returnType:kotlin.Int [fake_override]
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<<root>.Some<T of <root>.SomeList>>
VALUE_PARAMETER name:index index:0 type:kotlin.Int
FUN FAKE_OVERRIDE name:indexOf visibility:public modality:OPEN <> ($this:kotlin.collections.List<<root>.Some<T of <root>.SomeList>>, element:<root>.Some<T of <root>.SomeList>) returnType:kotlin.Int [fake_override]
overridden:
public abstract fun indexOf (element: <root>.Some<T of <root>.MyList>): kotlin.Int declared in <root>.MyList
public open fun indexOf (p0: @[EnhancedNullability] E of java.util.ArrayList): kotlin.Int declared in java.util.ArrayList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>
VALUE_PARAMETER name:p0 index:0 type:@[EnhancedNullability] <root>.Some<T of <root>.SomeList>
FUN FAKE_OVERRIDE name:isEmpty visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>) returnType:kotlin.Boolean [fake_override]
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<<root>.Some<T of <root>.SomeList>>
VALUE_PARAMETER name:element index:0 type:<root>.Some<T of <root>.SomeList>
FUN FAKE_OVERRIDE name:isEmpty visibility:public modality:OPEN <> ($this:kotlin.collections.List<<root>.Some<T of <root>.SomeList>>) returnType:kotlin.Boolean [fake_override]
overridden:
public abstract fun isEmpty (): kotlin.Boolean declared in <root>.MyList
public open fun isEmpty (): kotlin.Boolean declared in java.util.ArrayList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<<root>.Some<T of <root>.SomeList>>
FUN FAKE_OVERRIDE name:iterator visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>) returnType:@[EnhancedNullability] kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.Some<T of <root>.SomeList>> [fake_override,operator]
overridden:
public abstract fun iterator (): kotlin.collections.Iterator<<root>.Some<T of <root>.MyList>> declared in <root>.MyList
public open fun iterator (): @[EnhancedNullability] kotlin.collections.MutableIterator<@[EnhancedNullability] E of java.util.ArrayList> declared in java.util.ArrayList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>
FUN FAKE_OVERRIDE name:lastIndexOf visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>, p0:@[EnhancedNullability] <root>.Some<T of <root>.SomeList>) returnType:kotlin.Int [fake_override]
FUN FAKE_OVERRIDE name:lastIndexOf visibility:public modality:OPEN <> ($this:kotlin.collections.List<<root>.Some<T of <root>.SomeList>>, element:<root>.Some<T of <root>.SomeList>) returnType:kotlin.Int [fake_override]
overridden:
public abstract fun lastIndexOf (element: <root>.Some<T of <root>.MyList>): kotlin.Int declared in <root>.MyList
public open fun lastIndexOf (p0: @[EnhancedNullability] E of java.util.ArrayList): kotlin.Int declared in java.util.ArrayList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>
VALUE_PARAMETER name:p0 index:0 type:@[EnhancedNullability] <root>.Some<T of <root>.SomeList>
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<<root>.Some<T of <root>.SomeList>>
VALUE_PARAMETER name:element index:0 type:<root>.Some<T of <root>.SomeList>
FUN FAKE_OVERRIDE name:listIterator visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>) returnType:@[EnhancedNullability] kotlin.collections.MutableListIterator<@[EnhancedNullability] <root>.Some<T of <root>.SomeList>> [fake_override]
overridden:
public abstract fun listIterator (): kotlin.collections.ListIterator<<root>.Some<T of <root>.MyList>> declared in <root>.MyList
public open fun listIterator (): @[EnhancedNullability] kotlin.collections.MutableListIterator<@[EnhancedNullability] E of java.util.ArrayList> declared in java.util.ArrayList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>
FUN FAKE_OVERRIDE name:listIterator visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>, p0:kotlin.Int) returnType:@[EnhancedNullability] kotlin.collections.MutableListIterator<@[EnhancedNullability] <root>.Some<T of <root>.SomeList>> [fake_override]
overridden:
public abstract fun listIterator (index: kotlin.Int): kotlin.collections.ListIterator<<root>.Some<T of <root>.MyList>> declared in <root>.MyList
public open fun listIterator (p0: kotlin.Int): @[EnhancedNullability] kotlin.collections.MutableListIterator<@[EnhancedNullability] E of java.util.ArrayList> declared in java.util.ArrayList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>
VALUE_PARAMETER name:p0 index:0 type:kotlin.Int
FUN FAKE_OVERRIDE name:subList visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>, p0:kotlin.Int, p1:kotlin.Int) returnType:@[EnhancedNullability] kotlin.collections.MutableList<@[EnhancedNullability] <root>.Some<T of <root>.SomeList>> [fake_override]
overridden:
public abstract fun subList (fromIndex: kotlin.Int, toIndex: kotlin.Int): kotlin.collections.List<<root>.Some<T of <root>.MyList>> declared in <root>.MyList
public open fun subList (p0: kotlin.Int, p1: kotlin.Int): @[EnhancedNullability] kotlin.collections.MutableList<@[EnhancedNullability] E of java.util.ArrayList> declared in java.util.ArrayList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>
VALUE_PARAMETER name:p0 index:0 type:kotlin.Int
VALUE_PARAMETER name:p1 index:1 type:kotlin.Int
PROPERTY FAKE_OVERRIDE name:size visibility:public modality:OPEN [fake_override,val]
overridden:
public abstract size: kotlin.Int
public open size: kotlin.Int
FUN FAKE_OVERRIDE name:<get-size> visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>) returnType:kotlin.Int [fake_override]
FUN FAKE_OVERRIDE name:<get-size> visibility:public modality:OPEN <> ($this:kotlin.collections.List<<root>.Some<T of <root>.SomeList>>) returnType:kotlin.Int [fake_override]
correspondingProperty: PROPERTY FAKE_OVERRIDE name:size visibility:public modality:OPEN [fake_override,val]
overridden:
public abstract fun <get-size> (): kotlin.Int declared in <root>.MyList
public open fun <get-size> (): kotlin.Int declared in java.util.ArrayList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<<root>.Some<T of <root>.SomeList>>
FUN FAKE_OVERRIDE name:toArray visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>) returnType:@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? [fake_override]
overridden:
public open fun toArray (): @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? declared in java.util.ArrayList
@@ -319,23 +331,27 @@ FILE fqName:<root> fileName:/MultiList.kt
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>
VALUE_PARAMETER name:p0 index:0 type:kotlin.Int
VALUE_PARAMETER name:p1 index:1 type:@[EnhancedNullability] <root>.Some<T of <root>.SomeList>
FUN FAKE_OVERRIDE name:spliterator visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>) returnType:@[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?> [fake_override]
FUN FAKE_OVERRIDE name:spliterator visibility:public modality:OPEN <> ($this:kotlin.collections.List<<root>.Some<T of <root>.SomeList>>) returnType:@[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?> [fake_override]
overridden:
public open fun spliterator (): @[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] <root>.Some<T of <root>.MyList>?> declared in <root>.MyList
public open fun spliterator (): @[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] E of java.util.ArrayList?> declared in java.util.ArrayList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:java.util.AbstractList<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>, p0:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<<root>.Some<T of <root>.SomeList>>
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 declared in <root>.MyList
public open fun equals (p0: kotlin.Any?): kotlin.Boolean declared in java.util.ArrayList
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractList<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>
VALUE_PARAMETER name:p0 index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:java.util.AbstractList<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>) returnType:kotlin.Int [fake_override]
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.MyList
public open fun hashCode (): kotlin.Int declared in java.util.ArrayList
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractList<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:java.util.AbstractCollection<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>) returnType:@[EnhancedNullability] kotlin.String [fake_override]
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in <root>.MyList
public open fun toString (): @[EnhancedNullability] kotlin.String declared in java.util.ArrayList
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractCollection<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:removeIf visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>, p0:@[EnhancedNullability] java.util.function.Predicate<in @[EnhancedNullability] <root>.Some<T of <root>.SomeList>>) returnType:kotlin.Boolean [fake_override]
overridden:
public open fun removeIf (p0: @[EnhancedNullability] java.util.function.Predicate<in @[EnhancedNullability] E of java.util.ArrayList>): kotlin.Boolean declared in java.util.ArrayList
@@ -349,10 +365,11 @@ FILE fqName:<root> fileName:/MultiList.kt
overridden:
public open fun parallelStream (): @[EnhancedNullability] java.util.stream.Stream<@[EnhancedNullability] <root>.Some<T of <root>.MyList>> declared in <root>.MyList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Collection<<root>.Some<T of <root>.SomeList>>
FUN FAKE_OVERRIDE name:forEach visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>, p0:@[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>?) returnType:kotlin.Unit [fake_override]
FUN FAKE_OVERRIDE name:forEach visibility:public modality:OPEN <> ($this:kotlin.collections.Iterable<<root>.Some<T of <root>.SomeList>>, p0:@[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>?) returnType:kotlin.Unit [fake_override]
overridden:
public open fun forEach (p0: @[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.Some<T of <root>.MyList>?>?): kotlin.Unit declared in <root>.MyList
public open fun forEach (p0: @[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] E of java.util.ArrayList?>?): kotlin.Unit declared in java.util.ArrayList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Iterable<<root>.Some<T of <root>.SomeList>>
VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>?
FUN FAKE_OVERRIDE name:trimToSize visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>) returnType:kotlin.Unit [fake_override]
overridden:
@@ -385,39 +402,39 @@ FILE fqName:<root> fileName:/MultiList.kt
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.SomeList'
<T>: kotlin.String
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:FinalList modality:FINAL visibility:public superTypes:[<root>.SomeList<kotlin.String>]'
FUN FAKE_OVERRIDE name:contains visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<kotlin.String>>, p0:@[EnhancedNullability] <root>.Some<kotlin.String>) returnType:kotlin.Boolean [fake_override,operator]
FUN FAKE_OVERRIDE name:contains visibility:public modality:OPEN <> ($this:kotlin.collections.List<<root>.Some<kotlin.String>>, element:<root>.Some<kotlin.String>) returnType:kotlin.Boolean [fake_override,operator]
overridden:
public open fun contains (p0: @[EnhancedNullability] <root>.Some<T of <root>.SomeList>): kotlin.Boolean declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<kotlin.String>>
VALUE_PARAMETER name:p0 index:0 type:@[EnhancedNullability] <root>.Some<kotlin.String>
FUN FAKE_OVERRIDE name:containsAll visibility:public modality:OPEN <> ($this:java.util.AbstractCollection<@[FlexibleNullability] <root>.Some<kotlin.String>?>, p0:kotlin.collections.Collection<@[FlexibleNullability] <root>.Some<kotlin.String>?>) returnType:kotlin.Boolean [fake_override]
public open fun contains (element: <root>.Some<T of <root>.SomeList>): kotlin.Boolean declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<<root>.Some<kotlin.String>>
VALUE_PARAMETER name:element index:0 type:<root>.Some<kotlin.String>
FUN FAKE_OVERRIDE name:containsAll visibility:public modality:OPEN <> ($this:kotlin.collections.List<<root>.Some<kotlin.String>>, elements:kotlin.collections.Collection<<root>.Some<kotlin.String>>) returnType:kotlin.Boolean [fake_override]
overridden:
public open fun containsAll (p0: kotlin.collections.Collection<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>): kotlin.Boolean declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractCollection<@[FlexibleNullability] <root>.Some<kotlin.String>?>
VALUE_PARAMETER name:p0 index:0 type:kotlin.collections.Collection<@[FlexibleNullability] <root>.Some<kotlin.String>?>
FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<kotlin.String>>, p0:kotlin.Int) returnType:@[EnhancedNullability] <root>.Some<kotlin.String> [fake_override,operator]
public open fun containsAll (elements: kotlin.collections.Collection<<root>.Some<T of <root>.SomeList>>): kotlin.Boolean declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<<root>.Some<kotlin.String>>
VALUE_PARAMETER name:elements index:0 type:kotlin.collections.Collection<<root>.Some<kotlin.String>>
FUN FAKE_OVERRIDE name:get visibility:public modality:OPEN <> ($this:kotlin.collections.List<<root>.Some<kotlin.String>>, index:kotlin.Int) returnType:<root>.Some<kotlin.String> [fake_override,operator]
overridden:
public open fun get (p0: kotlin.Int): @[EnhancedNullability] <root>.Some<T of <root>.SomeList> declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<kotlin.String>>
VALUE_PARAMETER name:p0 index:0 type:kotlin.Int
FUN FAKE_OVERRIDE name:indexOf visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<kotlin.String>>, p0:@[EnhancedNullability] <root>.Some<kotlin.String>) returnType:kotlin.Int [fake_override]
public open fun get (index: kotlin.Int): <root>.Some<T of <root>.SomeList> declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<<root>.Some<kotlin.String>>
VALUE_PARAMETER name:index index:0 type:kotlin.Int
FUN FAKE_OVERRIDE name:indexOf visibility:public modality:OPEN <> ($this:kotlin.collections.List<<root>.Some<kotlin.String>>, element:<root>.Some<kotlin.String>) returnType:kotlin.Int [fake_override]
overridden:
public open fun indexOf (p0: @[EnhancedNullability] <root>.Some<T of <root>.SomeList>): kotlin.Int declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<kotlin.String>>
VALUE_PARAMETER name:p0 index:0 type:@[EnhancedNullability] <root>.Some<kotlin.String>
FUN FAKE_OVERRIDE name:isEmpty visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<kotlin.String>>) returnType:kotlin.Boolean [fake_override]
public open fun indexOf (element: <root>.Some<T of <root>.SomeList>): kotlin.Int declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<<root>.Some<kotlin.String>>
VALUE_PARAMETER name:element index:0 type:<root>.Some<kotlin.String>
FUN FAKE_OVERRIDE name:isEmpty visibility:public modality:OPEN <> ($this:kotlin.collections.List<<root>.Some<kotlin.String>>) returnType:kotlin.Boolean [fake_override]
overridden:
public open fun isEmpty (): kotlin.Boolean declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<kotlin.String>>
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<<root>.Some<kotlin.String>>
FUN FAKE_OVERRIDE name:iterator visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<kotlin.String>>) returnType:@[EnhancedNullability] kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.Some<kotlin.String>> [fake_override,operator]
overridden:
public open fun iterator (): @[EnhancedNullability] kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.Some<T of <root>.SomeList>> declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<kotlin.String>>
FUN FAKE_OVERRIDE name:lastIndexOf visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<kotlin.String>>, p0:@[EnhancedNullability] <root>.Some<kotlin.String>) returnType:kotlin.Int [fake_override]
FUN FAKE_OVERRIDE name:lastIndexOf visibility:public modality:OPEN <> ($this:kotlin.collections.List<<root>.Some<kotlin.String>>, element:<root>.Some<kotlin.String>) returnType:kotlin.Int [fake_override]
overridden:
public open fun lastIndexOf (p0: @[EnhancedNullability] <root>.Some<T of <root>.SomeList>): kotlin.Int declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<kotlin.String>>
VALUE_PARAMETER name:p0 index:0 type:@[EnhancedNullability] <root>.Some<kotlin.String>
public open fun lastIndexOf (element: <root>.Some<T of <root>.SomeList>): kotlin.Int declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<<root>.Some<kotlin.String>>
VALUE_PARAMETER name:element index:0 type:<root>.Some<kotlin.String>
FUN FAKE_OVERRIDE name:listIterator visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<kotlin.String>>) returnType:@[EnhancedNullability] kotlin.collections.MutableListIterator<@[EnhancedNullability] <root>.Some<kotlin.String>> [fake_override]
overridden:
public open fun listIterator (): @[EnhancedNullability] kotlin.collections.MutableListIterator<@[EnhancedNullability] <root>.Some<T of <root>.SomeList>> declared in <root>.SomeList
@@ -436,11 +453,11 @@ FILE fqName:<root> fileName:/MultiList.kt
PROPERTY FAKE_OVERRIDE name:size visibility:public modality:OPEN [fake_override,val]
overridden:
public open size: kotlin.Int
FUN FAKE_OVERRIDE name:<get-size> visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<kotlin.String>>) returnType:kotlin.Int [fake_override]
FUN FAKE_OVERRIDE name:<get-size> visibility:public modality:OPEN <> ($this:kotlin.collections.List<<root>.Some<kotlin.String>>) returnType:kotlin.Int [fake_override]
correspondingProperty: PROPERTY FAKE_OVERRIDE name:size visibility:public modality:OPEN [fake_override,val]
overridden:
public open fun <get-size> (): kotlin.Int declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<kotlin.String>>
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<<root>.Some<kotlin.String>>
FUN FAKE_OVERRIDE name:toArray visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<kotlin.String>>) returnType:@[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? [fake_override]
overridden:
public open fun toArray (): @[FlexibleNullability] @[FlexibleArrayElementVariance] kotlin.Array<out @[FlexibleNullability] kotlin.Any?>? declared in <root>.SomeList
@@ -508,23 +525,23 @@ FILE fqName:<root> fileName:/MultiList.kt
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<kotlin.String>>
VALUE_PARAMETER name:p0 index:0 type:kotlin.Int
VALUE_PARAMETER name:p1 index:1 type:@[EnhancedNullability] <root>.Some<kotlin.String>
FUN FAKE_OVERRIDE name:spliterator visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<kotlin.String>>) returnType:@[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] <root>.Some<kotlin.String>?> [fake_override]
FUN FAKE_OVERRIDE name:spliterator visibility:public modality:OPEN <> ($this:kotlin.collections.List<<root>.Some<kotlin.String>>) returnType:@[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] <root>.Some<kotlin.String>?> [fake_override]
overridden:
public open fun spliterator (): @[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?> declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<kotlin.String>>
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:java.util.AbstractList<@[FlexibleNullability] <root>.Some<kotlin.String>?>, p0:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<<root>.Some<kotlin.String>>
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 (p0: kotlin.Any?): kotlin.Boolean declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractList<@[FlexibleNullability] <root>.Some<kotlin.String>?>
VALUE_PARAMETER name:p0 index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:java.util.AbstractList<@[FlexibleNullability] <root>.Some<kotlin.String>?>) returnType:kotlin.Int [fake_override]
public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractList<@[FlexibleNullability] <root>.Some<kotlin.String>?>
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:java.util.AbstractCollection<@[FlexibleNullability] <root>.Some<kotlin.String>?>) returnType:@[EnhancedNullability] kotlin.String [fake_override]
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): @[EnhancedNullability] kotlin.String declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:java.util.AbstractCollection<@[FlexibleNullability] <root>.Some<kotlin.String>?>
public open fun toString (): kotlin.String declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:removeIf visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<kotlin.String>>, p0:@[EnhancedNullability] java.util.function.Predicate<in @[EnhancedNullability] <root>.Some<kotlin.String>>) returnType:kotlin.Boolean [fake_override]
overridden:
public open fun removeIf (p0: @[EnhancedNullability] java.util.function.Predicate<in @[EnhancedNullability] <root>.Some<T of <root>.SomeList>>): kotlin.Boolean declared in <root>.SomeList
@@ -538,10 +555,10 @@ FILE fqName:<root> fileName:/MultiList.kt
overridden:
public open fun parallelStream (): @[EnhancedNullability] java.util.stream.Stream<@[EnhancedNullability] <root>.Some<T of <root>.SomeList>> declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Collection<<root>.Some<kotlin.String>>
FUN FAKE_OVERRIDE name:forEach visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<kotlin.String>>, p0:@[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.Some<kotlin.String>?>?) returnType:kotlin.Unit [fake_override]
FUN FAKE_OVERRIDE name:forEach visibility:public modality:OPEN <> ($this:kotlin.collections.Iterable<<root>.Some<kotlin.String>>, p0:@[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.Some<kotlin.String>?>?) returnType:kotlin.Unit [fake_override]
overridden:
public open fun forEach (p0: @[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>?): kotlin.Unit declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<<root>.Some<kotlin.String>>
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Iterable<<root>.Some<kotlin.String>>
VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.Some<kotlin.String>?>?
FUN FAKE_OVERRIDE name:trimToSize visibility:public modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<kotlin.String>>) returnType:kotlin.Unit [fake_override]
overridden:
@@ -45,16 +45,16 @@ class FinalList : SomeList<String> {
/* fake */ override fun clone(): @EnhancedNullability Any
// CHECK JVM_IR:
// Mangled name: FinalList#contains(Some<kotlin.String>{EnhancedNullability}){}kotlin.Boolean
// Public signature: /FinalList.contains|3096303196508390878[0]
// Public signature debug description: contains(Some<kotlin.String>{EnhancedNullability}){}kotlin.Boolean
/* fake */ override operator fun contains(p0: @EnhancedNullability Some<String>): Boolean
// Mangled name: FinalList#contains(Some<kotlin.String>){}kotlin.Boolean
// Public signature: /FinalList.contains|3306019531315598892[0]
// Public signature debug description: contains(Some<kotlin.String>){}kotlin.Boolean
/* fake */ override operator fun contains(element: Some<String>): Boolean
// CHECK JVM_IR:
// Mangled name: FinalList#containsAll(kotlin.collections.Collection<Some<kotlin.String>?>){}kotlin.Boolean
// Public signature: /FinalList.containsAll|5422538213063988463[0]
// Public signature debug description: containsAll(kotlin.collections.Collection<Some<kotlin.String>?>){}kotlin.Boolean
/* fake */ override fun containsAll(p0: Collection<Some<String>?>): Boolean
// Mangled name: FinalList#containsAll(kotlin.collections.Collection<Some<kotlin.String>>){}kotlin.Boolean
// Public signature: /FinalList.containsAll|9064771870641374979[0]
// Public signature debug description: containsAll(kotlin.collections.Collection<Some<kotlin.String>>){}kotlin.Boolean
/* fake */ override fun containsAll(elements: Collection<Some<String>>): Boolean
// CHECK:
// Mangled name: FinalList#ensureCapacity(kotlin.Int){}
@@ -66,7 +66,7 @@ class FinalList : SomeList<String> {
// Mangled name: FinalList#equals(kotlin.Any?){}kotlin.Boolean
// Public signature: /FinalList.equals|722809408929142791[0]
// Public signature debug description: equals(kotlin.Any?){}kotlin.Boolean
/* fake */ override operator fun equals(p0: Any?): Boolean
/* fake */ override operator fun equals(other: Any?): Boolean
// CHECK:
// Mangled name: FinalList#forEach(java.util.function.Consumer<in|Some<kotlin.String>?>?){}
@@ -75,10 +75,10 @@ class FinalList : SomeList<String> {
/* fake */ override fun forEach(p0: Consumer<in Some<String>?>?): Unit
// CHECK JVM_IR:
// Mangled name: FinalList#get(kotlin.Int){}Some<kotlin.String>{EnhancedNullability}
// Public signature: /FinalList.get|-1548509062534898774[0]
// Public signature debug description: get(kotlin.Int){}Some<kotlin.String>{EnhancedNullability}
/* fake */ override operator fun get(p0: Int): @EnhancedNullability Some<String>
// Mangled name: FinalList#get(kotlin.Int){}Some<kotlin.String>
// Public signature: /FinalList.get|5550525129583729061[0]
// Public signature debug description: get(kotlin.Int){}Some<kotlin.String>
/* fake */ override operator fun get(index: Int): Some<String>
// CHECK JVM_IR:
// Mangled name: FinalList#hashCode(){}kotlin.Int
@@ -87,10 +87,10 @@ class FinalList : SomeList<String> {
/* fake */ override fun hashCode(): Int
// CHECK JVM_IR:
// Mangled name: FinalList#indexOf(Some<kotlin.String>{EnhancedNullability}){}kotlin.Int
// Public signature: /FinalList.indexOf|7750638587776299509[0]
// Public signature debug description: indexOf(Some<kotlin.String>{EnhancedNullability}){}kotlin.Int
/* fake */ override fun indexOf(p0: @EnhancedNullability Some<String>): Int
// Mangled name: FinalList#indexOf(Some<kotlin.String>){}kotlin.Int
// Public signature: /FinalList.indexOf|5440857764812757471[0]
// Public signature debug description: indexOf(Some<kotlin.String>){}kotlin.Int
/* fake */ override fun indexOf(element: Some<String>): Int
// CHECK JVM_IR:
// Mangled name: FinalList#isEmpty(){}kotlin.Boolean
@@ -105,10 +105,10 @@ class FinalList : SomeList<String> {
/* fake */ override operator fun iterator(): @EnhancedNullability MutableIterator<@EnhancedNullability Some<String>>
// CHECK JVM_IR:
// Mangled name: FinalList#lastIndexOf(Some<kotlin.String>{EnhancedNullability}){}kotlin.Int
// Public signature: /FinalList.lastIndexOf|5741372771241017733[0]
// Public signature debug description: lastIndexOf(Some<kotlin.String>{EnhancedNullability}){}kotlin.Int
/* fake */ override fun lastIndexOf(p0: @EnhancedNullability Some<String>): Int
// Mangled name: FinalList#lastIndexOf(Some<kotlin.String>){}kotlin.Int
// Public signature: /FinalList.lastIndexOf|-46333449251229155[0]
// Public signature debug description: lastIndexOf(Some<kotlin.String>){}kotlin.Int
/* fake */ override fun lastIndexOf(element: Some<String>): Int
// CHECK JVM_IR:
// Mangled name: FinalList#listIterator(){}kotlin.collections.MutableListIterator<Some<kotlin.String>{EnhancedNullability}>{EnhancedNullability}
@@ -213,10 +213,10 @@ class FinalList : SomeList<String> {
/* fake */ override fun <T : Any?> toArray(p0: Array<out T?>?): Array<out T?>?
// CHECK JVM_IR:
// Mangled name: FinalList#toString(){}kotlin.String{EnhancedNullability}
// Public signature: /FinalList.toString|7581629773206850948[0]
// Public signature debug description: toString(){}kotlin.String{EnhancedNullability}
/* fake */ override fun toString(): @EnhancedNullability String
// Mangled name: FinalList#toString(){}kotlin.String
// Public signature: /FinalList.toString|6958853723545266802[0]
// Public signature debug description: toString(){}kotlin.String
/* fake */ override fun toString(): String
// CHECK:
// Mangled name: FinalList#trimToSize(){}
@@ -337,16 +337,16 @@ open class SomeList<T : Any?> : ArrayList<Some<T>>, MyList<T> {
/* fake */ override fun clone(): @EnhancedNullability Any
// CHECK JVM_IR:
// Mangled name: SomeList#contains(Some<1:0>{EnhancedNullability}){}kotlin.Boolean
// Public signature: /SomeList.contains|8295010842646223621[0]
// Public signature debug description: contains(Some<1:0>{EnhancedNullability}){}kotlin.Boolean
/* fake */ override operator fun contains(p0: @EnhancedNullability Some<T>): Boolean
// Mangled name: SomeList#contains(Some<1:0>){}kotlin.Boolean
// Public signature: /SomeList.contains|-2920670572443692722[0]
// Public signature debug description: contains(Some<1:0>){}kotlin.Boolean
/* fake */ override operator fun contains(element: Some<T>): Boolean
// CHECK JVM_IR:
// Mangled name: SomeList#containsAll(kotlin.collections.Collection<Some<1:0>?>){}kotlin.Boolean
// Public signature: /SomeList.containsAll|5540597363096413063[0]
// Public signature debug description: containsAll(kotlin.collections.Collection<Some<1:0>?>){}kotlin.Boolean
/* fake */ override fun containsAll(p0: Collection<Some<T>?>): Boolean
// Mangled name: SomeList#containsAll(kotlin.collections.Collection<Some<1:0>>){}kotlin.Boolean
// Public signature: /SomeList.containsAll|4060484050930787658[0]
// Public signature debug description: containsAll(kotlin.collections.Collection<Some<1:0>>){}kotlin.Boolean
/* fake */ override fun containsAll(elements: Collection<Some<T>>): Boolean
// CHECK:
// Mangled name: SomeList#ensureCapacity(kotlin.Int){}
@@ -358,7 +358,7 @@ open class SomeList<T : Any?> : ArrayList<Some<T>>, MyList<T> {
// Mangled name: SomeList#equals(kotlin.Any?){}kotlin.Boolean
// Public signature: /SomeList.equals|722809408929142791[0]
// Public signature debug description: equals(kotlin.Any?){}kotlin.Boolean
/* fake */ override operator fun equals(p0: Any?): Boolean
/* fake */ override operator fun equals(other: Any?): Boolean
// CHECK:
// Mangled name: SomeList#forEach(java.util.function.Consumer<in|Some<1:0>?>?){}
@@ -367,10 +367,10 @@ open class SomeList<T : Any?> : ArrayList<Some<T>>, MyList<T> {
/* fake */ override fun forEach(p0: Consumer<in Some<T>?>?): Unit
// CHECK JVM_IR:
// Mangled name: SomeList#get(kotlin.Int){}Some<1:0>{EnhancedNullability}
// Public signature: /SomeList.get|-3046572306153092239[0]
// Public signature debug description: get(kotlin.Int){}Some<1:0>{EnhancedNullability}
/* fake */ override operator fun get(p0: Int): @EnhancedNullability Some<T>
// Mangled name: SomeList#get(kotlin.Int){}Some<1:0>
// Public signature: /SomeList.get|7985278152358407752[0]
// Public signature debug description: get(kotlin.Int){}Some<1:0>
/* fake */ override operator fun get(index: Int): Some<T>
// CHECK JVM_IR:
// Mangled name: SomeList#hashCode(){}kotlin.Int
@@ -379,10 +379,10 @@ open class SomeList<T : Any?> : ArrayList<Some<T>>, MyList<T> {
/* fake */ override fun hashCode(): Int
// CHECK JVM_IR:
// Mangled name: SomeList#indexOf(Some<1:0>{EnhancedNullability}){}kotlin.Int
// Public signature: /SomeList.indexOf|-8100421064396203855[0]
// Public signature debug description: indexOf(Some<1:0>{EnhancedNullability}){}kotlin.Int
/* fake */ override fun indexOf(p0: @EnhancedNullability Some<T>): Int
// Mangled name: SomeList#indexOf(Some<1:0>){}kotlin.Int
// Public signature: /SomeList.indexOf|4192413876446876489[0]
// Public signature debug description: indexOf(Some<1:0>){}kotlin.Int
/* fake */ override fun indexOf(element: Some<T>): Int
// CHECK JVM_IR:
// Mangled name: SomeList#isEmpty(){}kotlin.Boolean
@@ -397,10 +397,10 @@ open class SomeList<T : Any?> : ArrayList<Some<T>>, MyList<T> {
/* fake */ override operator fun iterator(): @EnhancedNullability MutableIterator<@EnhancedNullability Some<T>>
// CHECK JVM_IR:
// Mangled name: SomeList#lastIndexOf(Some<1:0>{EnhancedNullability}){}kotlin.Int
// Public signature: /SomeList.lastIndexOf|1971452683190765047[0]
// Public signature debug description: lastIndexOf(Some<1:0>{EnhancedNullability}){}kotlin.Int
/* fake */ override fun lastIndexOf(p0: @EnhancedNullability Some<T>): Int
// Mangled name: SomeList#lastIndexOf(Some<1:0>){}kotlin.Int
// Public signature: /SomeList.lastIndexOf|-4798028145670003218[0]
// Public signature debug description: lastIndexOf(Some<1:0>){}kotlin.Int
/* fake */ override fun lastIndexOf(element: Some<T>): Int
// CHECK JVM_IR:
// Mangled name: SomeList#listIterator(){}kotlin.collections.MutableListIterator<Some<1:0>{EnhancedNullability}>{EnhancedNullability}
@@ -505,10 +505,10 @@ open class SomeList<T : Any?> : ArrayList<Some<T>>, MyList<T> {
/* fake */ override fun <T : Any?> toArray(p0: Array<out T?>?): Array<out T?>?
// CHECK JVM_IR:
// Mangled name: SomeList#toString(){}kotlin.String{EnhancedNullability}
// Public signature: /SomeList.toString|7581629773206850948[0]
// Public signature debug description: toString(){}kotlin.String{EnhancedNullability}
/* fake */ override fun toString(): @EnhancedNullability String
// Mangled name: SomeList#toString(){}kotlin.String
// Public signature: /SomeList.toString|6958853723545266802[0]
// Public signature debug description: toString(){}kotlin.String
/* fake */ override fun toString(): String
// CHECK:
// Mangled name: SomeList#trimToSize(){}
@@ -629,3 +629,4 @@ interface MyList<T : Any?> : List<Some<T>> {
abstract /* fake */ override get(): Int
}
@@ -345,6 +345,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
runTest("compiler/testData/diagnostics/tests/Dollar.kt");
}
@Test
@TestMetadata("duplicateDefaultValuesSubsumedIntersection.kt")
public void testDuplicateDefaultValuesSubsumedIntersection() throws Exception {
runTest("compiler/testData/diagnostics/tests/duplicateDefaultValuesSubsumedIntersection.kt");
}
@Test
@TestMetadata("duplicateDirrectOverriddenCallables.kt")
public void testDuplicateDirrectOverriddenCallables() throws Exception {
@@ -28698,6 +28704,36 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
runTest("compiler/testData/diagnostics/tests/override/InternalPotentialOverride.kt");
}
@Test
@TestMetadata("intersectionOfAbstractAndOpen.kt")
public void testIntersectionOfAbstractAndOpen() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOfAbstractAndOpen.kt");
}
@Test
@TestMetadata("intersectionOfSubstitutedProperties.kt")
public void testIntersectionOfSubstitutedProperties() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOfSubstitutedProperties.kt");
}
@Test
@TestMetadata("intersectionOverrideWithSubsumedDifferentType.kt")
public void testIntersectionOverrideWithSubsumedDifferentType() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOverrideWithSubsumedDifferentType.kt");
}
@Test
@TestMetadata("intersectionOverridesIntersection.kt")
public void testIntersectionOverridesIntersection() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionOverridesIntersection.kt");
}
@Test
@TestMetadata("intersectionWithSubsumedWithSubstitution.kt")
public void testIntersectionWithSubsumedWithSubstitution() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/intersectionWithSubsumedWithSubstitution.kt");
}
@Test
@TestMetadata("InvisiblePotentialOverride.kt")
public void testInvisiblePotentialOverride() throws Exception {
@@ -28965,6 +29001,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
runTest("compiler/testData/diagnostics/tests/override/clashesOnInheritance/genericWithUpperBound.kt");
}
@Test
@TestMetadata("intersectionReturnTypeMismatchSubsumed.kt")
public void testIntersectionReturnTypeMismatchSubsumed() throws Exception {
runTest("compiler/testData/diagnostics/tests/override/clashesOnInheritance/intersectionReturnTypeMismatchSubsumed.kt");
}
@Test
@TestMetadata("kt13355.kt")
public void testKt13355() throws Exception {