[FIR2IR] Use FIR-specific methods to search for overridden functions
This commit is contained in:
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.backend
|
package org.jetbrains.kotlin.fir.backend
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirReturnExpression
|
import org.jetbrains.kotlin.fir.expressions.FirReturnExpression
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
@@ -13,6 +14,8 @@ import org.jetbrains.kotlin.ir.util.parentClassOrNull
|
|||||||
class Fir2IrConversionScope {
|
class Fir2IrConversionScope {
|
||||||
private val parentStack = mutableListOf<IrDeclarationParent>()
|
private val parentStack = mutableListOf<IrDeclarationParent>()
|
||||||
|
|
||||||
|
private val containingFirClassStack = mutableListOf<FirClass<*>>()
|
||||||
|
|
||||||
fun <T : IrDeclarationParent?> withParent(parent: T, f: T.() -> Unit): T {
|
fun <T : IrDeclarationParent?> withParent(parent: T, f: T.() -> Unit): T {
|
||||||
if (parent == null) return parent
|
if (parent == null) return parent
|
||||||
parentStack += parent
|
parentStack += parent
|
||||||
@@ -21,6 +24,12 @@ class Fir2IrConversionScope {
|
|||||||
return parent
|
return parent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun withContainingFirClass(containingFirClass: FirClass<*>, f: () -> Unit) {
|
||||||
|
containingFirClassStack += containingFirClass
|
||||||
|
f()
|
||||||
|
containingFirClassStack.removeAt(containingFirClassStack.size - 1)
|
||||||
|
}
|
||||||
|
|
||||||
fun parentFromStack(): IrDeclarationParent = parentStack.last()
|
fun parentFromStack(): IrDeclarationParent = parentStack.last()
|
||||||
|
|
||||||
fun parentAccessorOfPropertyFromStack(property: IrProperty): IrSimpleFunction? {
|
fun parentAccessorOfPropertyFromStack(property: IrProperty): IrSimpleFunction? {
|
||||||
@@ -38,6 +47,8 @@ class Fir2IrConversionScope {
|
|||||||
return declaration
|
return declaration
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun containerFirClass(): FirClass<*>? = containingFirClassStack.lastOrNull()
|
||||||
|
|
||||||
private val functionStack = mutableListOf<IrFunction>()
|
private val functionStack = mutableListOf<IrFunction>()
|
||||||
|
|
||||||
fun <T : IrFunction> withFunction(function: T, f: T.() -> Unit): T {
|
fun <T : IrFunction> withFunction(function: T, f: T.() -> Unit): T {
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ class Fir2IrConverter(
|
|||||||
fun processFileAndClassMembers(file: FirFile) {
|
fun processFileAndClassMembers(file: FirFile) {
|
||||||
val irFile = declarationStorage.getIrFile(file)
|
val irFile = declarationStorage.getIrFile(file)
|
||||||
for (declaration in file.declarations) {
|
for (declaration in file.declarations) {
|
||||||
val irDeclaration = processMemberDeclaration(declaration, irFile) ?: continue
|
val irDeclaration = processMemberDeclaration(declaration, null, irFile) ?: continue
|
||||||
irFile.declarations += irDeclaration
|
irFile.declarations += irDeclaration
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -92,7 +92,7 @@ class Fir2IrConverter(
|
|||||||
registerClassAndNestedClasses(declaration, irClass)
|
registerClassAndNestedClasses(declaration, irClass)
|
||||||
processClassAndNestedClassHeaders(declaration)
|
processClassAndNestedClassHeaders(declaration)
|
||||||
}
|
}
|
||||||
val irDeclaration = processMemberDeclaration(declaration, irClass) ?: continue
|
val irDeclaration = processMemberDeclaration(declaration, anonymousObject, irClass) ?: continue
|
||||||
irClass.declarations += irDeclaration
|
irClass.declarations += irDeclaration
|
||||||
}
|
}
|
||||||
return irClass
|
return irClass
|
||||||
@@ -113,7 +113,7 @@ class Fir2IrConverter(
|
|||||||
irClass.declarations += declarationStorage.createIrConstructor(it, irClass)
|
irClass.declarations += declarationStorage.createIrConstructor(it, irClass)
|
||||||
}
|
}
|
||||||
for (declaration in sortBySynthetic(regularClass.declarations)) {
|
for (declaration in sortBySynthetic(regularClass.declarations)) {
|
||||||
val irDeclaration = processMemberDeclaration(declaration, irClass) ?: continue
|
val irDeclaration = processMemberDeclaration(declaration, regularClass, irClass) ?: continue
|
||||||
irClass.declarations += irDeclaration
|
irClass.declarations += irDeclaration
|
||||||
}
|
}
|
||||||
return irClass
|
return irClass
|
||||||
@@ -138,7 +138,11 @@ class Fir2IrConverter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processMemberDeclaration(declaration: FirDeclaration, parent: IrDeclarationParent): IrDeclaration? {
|
private fun processMemberDeclaration(
|
||||||
|
declaration: FirDeclaration,
|
||||||
|
containingClass: FirClass<*>?,
|
||||||
|
parent: IrDeclarationParent
|
||||||
|
): IrDeclaration? {
|
||||||
return when (declaration) {
|
return when (declaration) {
|
||||||
is FirRegularClass -> {
|
is FirRegularClass -> {
|
||||||
processClassMembers(declaration)
|
processClassMembers(declaration)
|
||||||
|
|||||||
@@ -420,9 +420,6 @@ class Fir2IrDeclarationStorage(
|
|||||||
created.overriddenSymbols += getIrFunctionSymbol(it) as IrSimpleFunctionSymbol
|
created.overriddenSymbols += getIrFunctionSymbol(it) as IrSimpleFunctionSymbol
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!created.isFakeOverride && thisReceiverOwner != null) {
|
|
||||||
created.populateOverriddenSymbols(thisReceiverOwner)
|
|
||||||
}
|
|
||||||
functionCache[function] = created
|
functionCache[function] = created
|
||||||
return created
|
return created
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,9 +109,12 @@ class Fir2IrVisitor(
|
|||||||
val correspondingClass = irEnumEntry.correspondingClass ?: return irEnumEntry
|
val correspondingClass = irEnumEntry.correspondingClass ?: return irEnumEntry
|
||||||
declarationStorage.enterScope(irEnumEntry)
|
declarationStorage.enterScope(irEnumEntry)
|
||||||
classifierStorage.putEnumEntryClassInScope(enumEntry, correspondingClass)
|
classifierStorage.putEnumEntryClassInScope(enumEntry, correspondingClass)
|
||||||
converter.processAnonymousObjectMembers(enumEntry.initializer as FirAnonymousObject, correspondingClass)
|
val anonymousObject = enumEntry.initializer as FirAnonymousObject
|
||||||
|
converter.processAnonymousObjectMembers(anonymousObject, correspondingClass)
|
||||||
conversionScope.withParent(correspondingClass) {
|
conversionScope.withParent(correspondingClass) {
|
||||||
memberGenerator.convertClassContent(correspondingClass, enumEntry.initializer as FirAnonymousObject)
|
conversionScope.withContainingFirClass(anonymousObject) {
|
||||||
|
memberGenerator.convertClassContent(correspondingClass, anonymousObject)
|
||||||
|
}
|
||||||
val constructor = correspondingClass.constructors.first()
|
val constructor = correspondingClass.constructors.first()
|
||||||
irEnumEntry.initializerExpression = IrExpressionBodyImpl(
|
irEnumEntry.initializerExpression = IrExpressionBodyImpl(
|
||||||
IrEnumConstructorCallImpl(
|
IrEnumConstructorCallImpl(
|
||||||
@@ -141,7 +144,9 @@ class Fir2IrVisitor(
|
|||||||
}
|
}
|
||||||
val irClass = classifierStorage.getCachedIrClass(regularClass)!!
|
val irClass = classifierStorage.getCachedIrClass(regularClass)!!
|
||||||
return conversionScope.withParent(irClass) {
|
return conversionScope.withParent(irClass) {
|
||||||
memberGenerator.convertClassContent(irClass, regularClass)
|
conversionScope.withContainingFirClass(regularClass) {
|
||||||
|
memberGenerator.convertClassContent(irClass, regularClass)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,7 +157,9 @@ class Fir2IrVisitor(
|
|||||||
?: classifierStorage.createIrAnonymousObject(anonymousObject, irParent = irParent)
|
?: classifierStorage.createIrAnonymousObject(anonymousObject, irParent = irParent)
|
||||||
converter.processAnonymousObjectMembers(anonymousObject, irAnonymousObject)
|
converter.processAnonymousObjectMembers(anonymousObject, irAnonymousObject)
|
||||||
conversionScope.withParent(irAnonymousObject) {
|
conversionScope.withParent(irAnonymousObject) {
|
||||||
memberGenerator.convertClassContent(irAnonymousObject, anonymousObject)
|
conversionScope.withContainingFirClass(anonymousObject) {
|
||||||
|
memberGenerator.convertClassContent(irAnonymousObject, anonymousObject)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
val anonymousClassType = irAnonymousObject.thisReceiver!!.type
|
val anonymousClassType = irAnonymousObject.thisReceiver!!.type
|
||||||
return anonymousObject.convertWithOffsets { startOffset, endOffset ->
|
return anonymousObject.convertWithOffsets { startOffset, endOffset ->
|
||||||
@@ -178,7 +185,7 @@ class Fir2IrVisitor(
|
|||||||
override fun visitConstructor(constructor: FirConstructor, data: Any?): IrElement {
|
override fun visitConstructor(constructor: FirConstructor, data: Any?): IrElement {
|
||||||
val irConstructor = declarationStorage.getCachedIrConstructor(constructor)!!
|
val irConstructor = declarationStorage.getCachedIrConstructor(constructor)!!
|
||||||
return conversionScope.withFunction(irConstructor) {
|
return conversionScope.withFunction(irConstructor) {
|
||||||
memberGenerator.convertFunctionContent(irConstructor, constructor)
|
memberGenerator.convertFunctionContent(irConstructor, constructor, containingClass = conversionScope.containerFirClass())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,21 +199,26 @@ class Fir2IrVisitor(
|
|||||||
|
|
||||||
override fun visitSimpleFunction(simpleFunction: FirSimpleFunction, data: Any?): IrElement {
|
override fun visitSimpleFunction(simpleFunction: FirSimpleFunction, data: Any?): IrElement {
|
||||||
val irFunction = if (simpleFunction.visibility == Visibilities.LOCAL) {
|
val irFunction = if (simpleFunction.visibility == Visibilities.LOCAL) {
|
||||||
val irParent = conversionScope.parent()
|
declarationStorage.createIrFunction(
|
||||||
declarationStorage.createIrFunction(simpleFunction, irParent)
|
simpleFunction, irParent = conversionScope.parent()
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
declarationStorage.getCachedIrFunction(simpleFunction)!!
|
declarationStorage.getCachedIrFunction(simpleFunction)!!
|
||||||
}
|
}
|
||||||
return conversionScope.withFunction(irFunction) {
|
return conversionScope.withFunction(irFunction) {
|
||||||
memberGenerator.convertFunctionContent(irFunction, simpleFunction)
|
memberGenerator.convertFunctionContent(
|
||||||
|
irFunction, simpleFunction, containingClass = conversionScope.containerFirClass()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: Any?): IrElement {
|
override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: Any?): IrElement {
|
||||||
return anonymousFunction.convertWithOffsets { startOffset, endOffset ->
|
return anonymousFunction.convertWithOffsets { startOffset, endOffset ->
|
||||||
val irFunction = declarationStorage.createIrFunction(anonymousFunction, conversionScope.parent())
|
val irFunction = declarationStorage.createIrFunction(
|
||||||
|
anonymousFunction, irParent = conversionScope.parent()
|
||||||
|
)
|
||||||
conversionScope.withFunction(irFunction) {
|
conversionScope.withFunction(irFunction) {
|
||||||
memberGenerator.convertFunctionContent(irFunction, anonymousFunction)
|
memberGenerator.convertFunctionContent(irFunction, anonymousFunction, containingClass = null)
|
||||||
}
|
}
|
||||||
|
|
||||||
val type = anonymousFunction.typeRef.toIrType()
|
val type = anonymousFunction.typeRef.toIrType()
|
||||||
|
|||||||
+20
-3
@@ -15,6 +15,8 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression
|
|||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
|
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
|
||||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
@@ -22,6 +24,7 @@ import org.jetbrains.kotlin.ir.expressions.IrExpression
|
|||||||
import org.jetbrains.kotlin.ir.expressions.IrFieldAccessExpression
|
import org.jetbrains.kotlin.ir.expressions.IrFieldAccessExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
|
|
||||||
@@ -49,7 +52,7 @@ internal class ClassMemberGenerator(
|
|||||||
enterScope(irPrimaryConstructor)
|
enterScope(irPrimaryConstructor)
|
||||||
irPrimaryConstructor.valueParameters.forEach { symbolTable.introduceValueParameter(it) }
|
irPrimaryConstructor.valueParameters.forEach { symbolTable.introduceValueParameter(it) }
|
||||||
irPrimaryConstructor.putParametersInScope(primaryConstructor)
|
irPrimaryConstructor.putParametersInScope(primaryConstructor)
|
||||||
convertFunctionContent(irPrimaryConstructor, primaryConstructor)
|
convertFunctionContent(irPrimaryConstructor, primaryConstructor, containingClass = klass)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val processedCallableNames = klass.declarations.mapNotNullTo(mutableSetOf()) {
|
val processedCallableNames = klass.declarations.mapNotNullTo(mutableSetOf()) {
|
||||||
@@ -102,7 +105,7 @@ internal class ClassMemberGenerator(
|
|||||||
declarationStorage.leaveScope(irClass)
|
declarationStorage.leaveScope(irClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <T : IrFunction> convertFunctionContent(irFunction: T, firFunction: FirFunction<*>?): T {
|
fun <T : IrFunction> convertFunctionContent(irFunction: T, firFunction: FirFunction<*>?, containingClass: FirClass<*>?): T {
|
||||||
conversionScope.withParent(irFunction) {
|
conversionScope.withParent(irFunction) {
|
||||||
if (firFunction != null) {
|
if (firFunction != null) {
|
||||||
if (irFunction !is IrConstructor || !irFunction.isPrimary) {
|
if (irFunction !is IrConstructor || !irFunction.isPrimary) {
|
||||||
@@ -167,6 +170,20 @@ internal class ClassMemberGenerator(
|
|||||||
// Scope for primary constructor should be left after class declaration
|
// Scope for primary constructor should be left after class declaration
|
||||||
declarationStorage.leaveScope(irFunction)
|
declarationStorage.leaveScope(irFunction)
|
||||||
}
|
}
|
||||||
|
if (irFunction is IrSimpleFunction && firFunction != null && containingClass != null) {
|
||||||
|
val scope = containingClass.unsubstitutedScope(session, scopeSession)
|
||||||
|
scope.processFunctionsByName(name) {}
|
||||||
|
val overriddenSet = mutableSetOf<IrSimpleFunctionSymbol>()
|
||||||
|
scope.processDirectlyOverriddenFunctions(firFunction.symbol) {
|
||||||
|
if ((it.fir as FirSimpleFunction).visibility == Visibilities.PRIVATE) {
|
||||||
|
return@processDirectlyOverriddenFunctions ProcessorAction.NEXT
|
||||||
|
}
|
||||||
|
val overridden = declarationStorage.getIrFunctionSymbol(it)
|
||||||
|
overriddenSet += overridden as IrSimpleFunctionSymbol
|
||||||
|
ProcessorAction.NEXT
|
||||||
|
}
|
||||||
|
irFunction.overriddenSymbols = overriddenSet.toList()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return irFunction
|
return irFunction
|
||||||
}
|
}
|
||||||
@@ -213,7 +230,7 @@ internal class ClassMemberGenerator(
|
|||||||
) {
|
) {
|
||||||
conversionScope.withFunction(this) {
|
conversionScope.withFunction(this) {
|
||||||
applyParentFromStackTo(this)
|
applyParentFromStackTo(this)
|
||||||
convertFunctionContent(this, propertyAccessor)
|
convertFunctionContent(this, propertyAccessor, containingClass = null)
|
||||||
if (isDefault) {
|
if (isDefault) {
|
||||||
conversionScope.withParent(this) {
|
conversionScope.withParent(this) {
|
||||||
declarationStorage.enterScope(this)
|
declarationStorage.enterScope(this)
|
||||||
|
|||||||
+5
-3
@@ -88,7 +88,8 @@ class FakeOverrideGenerator(
|
|||||||
// That's why we must check parent during caching...
|
// That's why we must check parent during caching...
|
||||||
val irFunction = declarationStorage.getCachedIrFunction(originalFunction)?.takeIf { it.parent == this }
|
val irFunction = declarationStorage.getCachedIrFunction(originalFunction)?.takeIf { it.parent == this }
|
||||||
?: declarationStorage.createIrFunction(
|
?: declarationStorage.createIrFunction(
|
||||||
originalFunction, irParent = this,
|
originalFunction,
|
||||||
|
irParent = this,
|
||||||
thisReceiverOwner = declarationStorage.findIrParent(baseSymbol.fir) as? IrClass,
|
thisReceiverOwner = declarationStorage.findIrParent(baseSymbol.fir) as? IrClass,
|
||||||
origin = origin
|
origin = origin
|
||||||
)
|
)
|
||||||
@@ -111,7 +112,8 @@ class FakeOverrideGenerator(
|
|||||||
|
|
||||||
classifierStorage.preCacheTypeParameters(originalFunction)
|
classifierStorage.preCacheTypeParameters(originalFunction)
|
||||||
val irFunction = declarationStorage.createIrFunction(
|
val irFunction = declarationStorage.createIrFunction(
|
||||||
fakeOverrideFunction, irParent = this,
|
fakeOverrideFunction,
|
||||||
|
irParent = this,
|
||||||
thisReceiverOwner = declarationStorage.findIrParent(originalFunction) as? IrClass,
|
thisReceiverOwner = declarationStorage.findIrParent(originalFunction) as? IrClass,
|
||||||
origin = origin
|
origin = origin
|
||||||
)
|
)
|
||||||
@@ -136,7 +138,7 @@ class FakeOverrideGenerator(
|
|||||||
) {
|
) {
|
||||||
// Substitution case
|
// Substitution case
|
||||||
// NB: see comment above about substituted function' parent
|
// NB: see comment above about substituted function' parent
|
||||||
val irProperty = declarationStorage.getCachedIrProperty(originalProperty)?.takeIf { it.parent == this}
|
val irProperty = declarationStorage.getCachedIrProperty(originalProperty)?.takeIf { it.parent == this }
|
||||||
?: declarationStorage.createIrProperty(
|
?: declarationStorage.createIrProperty(
|
||||||
originalProperty, irParent = this,
|
originalProperty, irParent = this,
|
||||||
thisReceiverOwner = declarationStorage.findIrParent(baseSymbol.fir) as? IrClass,
|
thisReceiverOwner = declarationStorage.findIrParent(baseSymbol.fir) as? IrClass,
|
||||||
|
|||||||
-1
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
|
|
||||||
// FILE: Test.java
|
// FILE: Test.java
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
|
|
||||||
// FILE: B.java
|
// FILE: B.java
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
|
|
||||||
// FILE: J.java
|
// FILE: J.java
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// KJS_WITH_FULL_RUNTIME
|
// KJS_WITH_FULL_RUNTIME
|
||||||
// IGNORE_BACKEND: JS_IR
|
// IGNORE_BACKEND: JS_IR
|
||||||
// IGNORE_BACKEND: JS_IR_ES6
|
// IGNORE_BACKEND: JS_IR_ES6
|
||||||
|
|||||||
Vendored
-1
@@ -1,5 +1,4 @@
|
|||||||
// !LANGUAGE: +InlineClasses
|
// !LANGUAGE: +InlineClasses
|
||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
|
|
||||||
abstract class GenericBase<T> {
|
abstract class GenericBase<T> {
|
||||||
abstract fun foo(x: T): T
|
abstract fun foo(x: T): T
|
||||||
|
|||||||
-1
@@ -1,5 +1,4 @@
|
|||||||
// !LANGUAGE: +InlineClasses
|
// !LANGUAGE: +InlineClasses
|
||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
// !LANGUAGE: +NewInference +SamConversionPerArgument
|
// !LANGUAGE: +NewInference +SamConversionPerArgument
|
||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// FILE: Fn.java
|
// FILE: Fn.java
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
// !LANGUAGE: +NewInference +SamConversionForKotlinFunctions +SamConversionPerArgument
|
// !LANGUAGE: +NewInference +SamConversionForKotlinFunctions +SamConversionPerArgument
|
||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// FILE: Fn.java
|
// FILE: Fn.java
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// KJS_WITH_FULL_RUNTIME
|
// KJS_WITH_FULL_RUNTIME
|
||||||
// IGNORE_BACKEND: NATIVE
|
// IGNORE_BACKEND: NATIVE
|
||||||
class MySet : HashSet<Int>() {
|
class MySet : HashSet<Int>() {
|
||||||
|
|||||||
+1
-1
@@ -97,8 +97,8 @@ FILE fqName:<root> fileName:/implicitNotNullOnDelegatedImplementation.kt
|
|||||||
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:K4 modality:FINAL visibility:public superTypes:[<root>.JUnrelatedFoo; <root>.IFoo]'
|
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:K4 modality:FINAL visibility:public superTypes:[<root>.JUnrelatedFoo; <root>.IFoo]'
|
||||||
FUN name:foo visibility:public modality:FINAL <> ($this:<root>.K4) returnType:kotlin.String?
|
FUN name:foo visibility:public modality:FINAL <> ($this:<root>.K4) returnType:kotlin.String?
|
||||||
overridden:
|
overridden:
|
||||||
public open fun foo (): kotlin.String? declared in <root>.JUnrelatedFoo
|
|
||||||
public abstract fun foo (): kotlin.String declared in <root>.IFoo
|
public abstract fun foo (): kotlin.String declared in <root>.IFoo
|
||||||
|
public open fun foo (): kotlin.String? declared in <root>.JUnrelatedFoo
|
||||||
$this: VALUE_PARAMETER name:<this> type:<root>.K4
|
$this: VALUE_PARAMETER name:<this> type:<root>.K4
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
RETURN type=kotlin.Nothing from='public final fun foo (): kotlin.String? declared in <root>.K4'
|
RETURN type=kotlin.Nothing from='public final fun foo (): kotlin.String? declared in <root>.K4'
|
||||||
|
|||||||
+2
@@ -22,6 +22,8 @@ FILE fqName:<root> fileName:/expectClassInherited.kt
|
|||||||
CONSTRUCTOR visibility:public <> (i:kotlin.Int) returnType:<root>.B [primary,expect]
|
CONSTRUCTOR visibility:public <> (i:kotlin.Int) returnType:<root>.B [primary,expect]
|
||||||
VALUE_PARAMETER name:i index:0 type:kotlin.Int
|
VALUE_PARAMETER name:i index:0 type:kotlin.Int
|
||||||
FUN name:foo visibility:public modality:OPEN <> ($this:<root>.B) returnType:kotlin.Unit [expect]
|
FUN name:foo visibility:public modality:OPEN <> ($this:<root>.B) returnType:kotlin.Unit [expect]
|
||||||
|
overridden:
|
||||||
|
public abstract fun foo (): kotlin.Unit declared in <root>.A
|
||||||
$this: VALUE_PARAMETER name:<this> type:<root>.B
|
$this: VALUE_PARAMETER name:<this> type:<root>.B
|
||||||
FUN name:bar visibility:public modality:OPEN <> ($this:<root>.B, s:kotlin.String) returnType:kotlin.Unit [expect]
|
FUN name:bar visibility:public modality:OPEN <> ($this:<root>.B, s:kotlin.String) returnType:kotlin.Unit [expect]
|
||||||
$this: VALUE_PARAMETER name:<this> type:<root>.B
|
$this: VALUE_PARAMETER name:<this> type:<root>.B
|
||||||
|
|||||||
@@ -171,6 +171,8 @@ FILE fqName:<root> fileName:/castsInsideCoroutineInference.kt
|
|||||||
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:collector type:<root>.FlowCollector<T of <root>.SafeCollector> visibility:private [final]' type=<root>.FlowCollector<T of <root>.SafeCollector> origin=null
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:collector type:<root>.FlowCollector<T of <root>.SafeCollector> visibility:private [final]' type=<root>.FlowCollector<T of <root>.SafeCollector> origin=null
|
||||||
receiver: GET_VAR '<this>: <root>.SafeCollector<T of <root>.SafeCollector> declared in <root>.SafeCollector.<get-collector>' type=<root>.SafeCollector<T of <root>.SafeCollector> origin=null
|
receiver: GET_VAR '<this>: <root>.SafeCollector<T of <root>.SafeCollector> declared in <root>.SafeCollector.<get-collector>' type=<root>.SafeCollector<T of <root>.SafeCollector> origin=null
|
||||||
FUN name:emit visibility:public modality:FINAL <> ($this:<root>.SafeCollector<T of <root>.SafeCollector>, value:T of <root>.SafeCollector) returnType:kotlin.Unit [suspend]
|
FUN name:emit visibility:public modality:FINAL <> ($this:<root>.SafeCollector<T of <root>.SafeCollector>, value:T of <root>.SafeCollector) returnType:kotlin.Unit [suspend]
|
||||||
|
overridden:
|
||||||
|
public abstract fun emit (value: T of <root>.FlowCollector): kotlin.Unit [suspend] declared in <root>.FlowCollector
|
||||||
$this: VALUE_PARAMETER name:<this> type:<root>.SafeCollector<T of <root>.SafeCollector>
|
$this: VALUE_PARAMETER name:<this> type:<root>.SafeCollector<T of <root>.SafeCollector>
|
||||||
VALUE_PARAMETER name:value index:0 type:T of <root>.SafeCollector
|
VALUE_PARAMETER name:value index:0 type:T of <root>.SafeCollector
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
|
|||||||
+2
@@ -26,6 +26,8 @@ FILE fqName:<root> fileName:/implicitNotNullOnPlatformType.kt
|
|||||||
RETURN type=kotlin.Nothing from='public final fun contains (element: kotlin.String): kotlin.Boolean declared in <root>.MySet'
|
RETURN type=kotlin.Nothing from='public final fun contains (element: kotlin.String): kotlin.Boolean declared in <root>.MySet'
|
||||||
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin' type=kotlin.Nothing origin=null
|
CALL 'public final fun TODO (): kotlin.Nothing [inline] declared in kotlin' type=kotlin.Nothing origin=null
|
||||||
FUN name:containsAll visibility:public modality:FINAL <> ($this:<root>.MySet, elements:kotlin.collections.Collection<kotlin.String>) returnType:kotlin.Boolean
|
FUN name:containsAll visibility:public modality:FINAL <> ($this:<root>.MySet, elements:kotlin.collections.Collection<kotlin.String>) returnType:kotlin.Boolean
|
||||||
|
overridden:
|
||||||
|
public abstract fun containsAll (elements: kotlin.collections.Collection<E of kotlin.collections.Set>): kotlin.Boolean declared in kotlin.collections.Set
|
||||||
$this: VALUE_PARAMETER name:<this> type:<root>.MySet
|
$this: VALUE_PARAMETER name:<this> type:<root>.MySet
|
||||||
VALUE_PARAMETER name:elements index:0 type:kotlin.collections.Collection<kotlin.String>
|
VALUE_PARAMETER name:elements index:0 type:kotlin.collections.Collection<kotlin.String>
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
|
|||||||
Reference in New Issue
Block a user