Track fake overrides for IrField
This commit is contained in:
@@ -17,11 +17,11 @@
|
|||||||
package org.jetbrains.kotlin.descriptors
|
package org.jetbrains.kotlin.descriptors
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor
|
import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor
|
||||||
import org.jetbrains.kotlin.psi.KtPropertyAccessor
|
import org.jetbrains.kotlin.psi.KtDeclarationWithBody
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
|
|
||||||
fun PropertyAccessorDescriptor.hasBody(): Boolean {
|
fun PropertyAccessorDescriptor.hasBody(): Boolean {
|
||||||
val ktAccessor = DescriptorToSourceUtils.getSourceFromDescriptor(this) as? KtPropertyAccessor
|
val ktAccessor = DescriptorToSourceUtils.getSourceFromDescriptor(this) as? KtDeclarationWithBody
|
||||||
return ktAccessor != null && ktAccessor.hasBody()
|
return ktAccessor != null && ktAccessor.hasBody()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.resolve
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
|
import org.jetbrains.kotlin.resolve.source.KotlinSourceElement
|
||||||
|
|
||||||
|
fun PropertyDescriptor.hasBackingField(bindingContext: BindingContext?): Boolean = when {
|
||||||
|
kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE -> overriddenDescriptors.any { it.hasBackingField(bindingContext) }
|
||||||
|
source is KotlinSourceElement && bindingContext != null -> bindingContext.get(BindingContext.BACKING_FIELD_REQUIRED, this) ?: false
|
||||||
|
getter != null -> false
|
||||||
|
else -> true
|
||||||
|
}
|
||||||
+2
-23
@@ -155,29 +155,8 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generateFakeOverrideProperty(propertyDescriptor: PropertyDescriptor, ktElement: KtPureElement): IrProperty {
|
private fun generateFakeOverrideProperty(propertyDescriptor: PropertyDescriptor, ktElement: KtPureElement): IrProperty =
|
||||||
val startOffset = ktElement.pureStartOffsetOrUndefined
|
PropertyGenerator(this).generateFakeOverrideProperty(propertyDescriptor, ktElement)
|
||||||
val endOffset = ktElement.pureEndOffsetOrUndefined
|
|
||||||
|
|
||||||
val backingField =
|
|
||||||
if (propertyDescriptor.getter == null)
|
|
||||||
context.symbolTable.declareField(
|
|
||||||
startOffset, endOffset, IrDeclarationOrigin.FAKE_OVERRIDE,
|
|
||||||
propertyDescriptor, propertyDescriptor.type.toIrType()
|
|
||||||
)
|
|
||||||
else
|
|
||||||
null
|
|
||||||
|
|
||||||
return IrPropertyImpl(
|
|
||||||
startOffset, endOffset,
|
|
||||||
IrDeclarationOrigin.FAKE_OVERRIDE,
|
|
||||||
false,
|
|
||||||
propertyDescriptor,
|
|
||||||
backingField,
|
|
||||||
propertyDescriptor.getter?.let { generateFakeOverrideFunction(it, ktElement) },
|
|
||||||
propertyDescriptor.setter?.let { generateFakeOverrideFunction(it, ktElement) }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun generateFakeOverrideFunction(functionDescriptor: FunctionDescriptor, ktElement: KtPureElement): IrSimpleFunction =
|
private fun generateFakeOverrideFunction(functionDescriptor: FunctionDescriptor, ktElement: KtPureElement): IrSimpleFunction =
|
||||||
FunctionGenerator(this).generateFakeOverrideFunction(functionDescriptor, ktElement)
|
FunctionGenerator(this).generateFakeOverrideFunction(functionDescriptor, ktElement)
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ class ModuleGenerator(override val context: GeneratorContext) : Generator {
|
|||||||
fun generateUnboundSymbolsAsDependencies(irModule: IrModuleFragment) {
|
fun generateUnboundSymbolsAsDependencies(irModule: IrModuleFragment) {
|
||||||
ExternalDependenciesGenerator(
|
ExternalDependenciesGenerator(
|
||||||
irModule.descriptor, context.symbolTable, context.irBuiltIns
|
irModule.descriptor, context.symbolTable, context.irBuiltIns
|
||||||
).generateUnboundSymbolsAsDependencies(irModule)
|
).generateUnboundSymbolsAsDependencies(irModule, context.bindingContext)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generateFiles(ktFiles: Collection<KtFile>): List<IrFile> {
|
private fun generateFiles(ktFiles: Collection<KtFile>): List<IrFile> {
|
||||||
|
|||||||
+33
-7
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.psi2ir.generators
|
package org.jetbrains.kotlin.psi2ir.generators
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrPropertyImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrPropertyImpl
|
||||||
@@ -23,13 +24,15 @@ import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
|||||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.ir.util.declareFieldWithOverrides
|
||||||
import org.jetbrains.kotlin.psi.KtParameter
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.KtProperty
|
|
||||||
import org.jetbrains.kotlin.psi.KtPropertyDelegate
|
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||||
|
import org.jetbrains.kotlin.psi2ir.pureEndOffsetOrUndefined
|
||||||
|
import org.jetbrains.kotlin.psi2ir.pureStartOffsetOrUndefined
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
|
import org.jetbrains.kotlin.resolve.hasBackingField
|
||||||
|
import org.jetbrains.kotlin.resolve.source.KotlinSourceElement
|
||||||
|
|
||||||
class PropertyGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
|
class PropertyGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||||
fun generatePropertyDeclaration(ktProperty: KtProperty): IrProperty {
|
fun generatePropertyDeclaration(ktProperty: KtProperty): IrProperty {
|
||||||
@@ -106,7 +109,7 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
|
|||||||
propertyDescriptor
|
propertyDescriptor
|
||||||
).buildWithScope { irProperty ->
|
).buildWithScope { irProperty ->
|
||||||
irProperty.backingField =
|
irProperty.backingField =
|
||||||
if (propertyDescriptor.hasBackingField())
|
if (propertyDescriptor.hasBackingField(context.bindingContext))
|
||||||
generatePropertyBackingField(ktProperty, propertyDescriptor) { irField ->
|
generatePropertyBackingField(ktProperty, propertyDescriptor) { irField ->
|
||||||
ktProperty.initializer?.let { ktInitializer ->
|
ktProperty.initializer?.let { ktInitializer ->
|
||||||
declarationGenerator.generateInitializerBody(irField.symbol, ktInitializer)
|
declarationGenerator.generateInitializerBody(irField.symbol, ktInitializer)
|
||||||
@@ -119,8 +122,30 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
|
|||||||
irProperty.setter = generateSetterIfRequired(ktProperty, propertyDescriptor)
|
irProperty.setter = generateSetterIfRequired(ktProperty, propertyDescriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun PropertyDescriptor.hasBackingField(): Boolean =
|
fun generateFakeOverrideProperty(propertyDescriptor: PropertyDescriptor, ktElement: KtPureElement): IrProperty {
|
||||||
get(BindingContext.BACKING_FIELD_REQUIRED, this) ?: false
|
val startOffset = ktElement.pureStartOffsetOrUndefined
|
||||||
|
val endOffset = ktElement.pureEndOffsetOrUndefined
|
||||||
|
|
||||||
|
val backingField =
|
||||||
|
if (propertyDescriptor.hasBackingField(context.bindingContext))
|
||||||
|
context.symbolTable.declareFieldWithOverrides(
|
||||||
|
startOffset, endOffset, IrDeclarationOrigin.FAKE_OVERRIDE,
|
||||||
|
propertyDescriptor, propertyDescriptor.type.toIrType(),
|
||||||
|
{ it.hasBackingField(context.bindingContext) }
|
||||||
|
)
|
||||||
|
else
|
||||||
|
null
|
||||||
|
|
||||||
|
return IrPropertyImpl(
|
||||||
|
startOffset, endOffset,
|
||||||
|
IrDeclarationOrigin.FAKE_OVERRIDE,
|
||||||
|
false,
|
||||||
|
propertyDescriptor,
|
||||||
|
backingField,
|
||||||
|
propertyDescriptor.getter?.let { FunctionGenerator(declarationGenerator).generateFakeOverrideFunction(it, ktElement) },
|
||||||
|
propertyDescriptor.setter?.let { FunctionGenerator(declarationGenerator).generateFakeOverrideFunction(it, ktElement) }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
private fun generateGetterIfRequired(ktProperty: KtProperty, property: PropertyDescriptor): IrSimpleFunction? {
|
private fun generateGetterIfRequired(ktProperty: KtProperty, property: PropertyDescriptor): IrSimpleFunction? {
|
||||||
val getter = property.getter ?: return null
|
val getter = property.getter ?: return null
|
||||||
@@ -138,3 +163,4 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
|
|||||||
return variableDescriptor as? PropertyDescriptor ?: TODO("not a property?")
|
return variableDescriptor as? PropertyDescriptor ?: TODO("not a property?")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,11 @@ interface IrSymbolDeclaration<out S : IrSymbol> : IrDeclaration, IrSymbolOwner {
|
|||||||
override val symbol: S
|
override val symbol: S
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface IrOverridableDeclaration<S : IrSymbol> : IrDeclaration {
|
||||||
|
val overriddenSymbols: MutableList<S>
|
||||||
|
}
|
||||||
|
|
||||||
interface IrDeclarationWithVisibility : IrDeclaration {
|
interface IrDeclarationWithVisibility : IrDeclaration {
|
||||||
val visibility: Visibility
|
val visibility: Visibility
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
|
|||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
interface IrField : IrSymbolDeclaration<IrFieldSymbol>, IrDeclarationWithVisibility {
|
interface IrField : IrSymbolDeclaration<IrFieldSymbol>, IrOverridableDeclaration<IrFieldSymbol>, IrDeclarationWithVisibility {
|
||||||
override val descriptor: PropertyDescriptor
|
override val descriptor: PropertyDescriptor
|
||||||
|
|
||||||
val name: Name
|
val name: Name
|
||||||
@@ -23,4 +23,4 @@ interface IrField : IrSymbolDeclaration<IrFieldSymbol>, IrDeclarationWithVisibil
|
|||||||
|
|
||||||
var initializer: IrExpressionBody?
|
var initializer: IrExpressionBody?
|
||||||
var correspondingProperty: IrProperty?
|
var correspondingProperty: IrProperty?
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,14 +19,12 @@ package org.jetbrains.kotlin.ir.declarations
|
|||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
|
|
||||||
interface IrSimpleFunction : IrFunction, IrSymbolDeclaration<IrSimpleFunctionSymbol> {
|
interface IrSimpleFunction : IrFunction, IrSymbolDeclaration<IrSimpleFunctionSymbol>, IrOverridableDeclaration<IrSimpleFunctionSymbol> {
|
||||||
val modality: Modality
|
val modality: Modality
|
||||||
val isTailrec: Boolean
|
val isTailrec: Boolean
|
||||||
val isSuspend: Boolean
|
val isSuspend: Boolean
|
||||||
|
|
||||||
var correspondingProperty: IrProperty?
|
var correspondingProperty: IrProperty?
|
||||||
|
|
||||||
val overriddenSymbols: MutableList<IrSimpleFunctionSymbol>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val IrFunction.isPropertyAccessor: Boolean
|
val IrFunction.isPropertyAccessor: Boolean
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ class IrFieldImpl(
|
|||||||
|
|
||||||
override var initializer: IrExpressionBody? = null
|
override var initializer: IrExpressionBody? = null
|
||||||
override var correspondingProperty: IrProperty? = null
|
override var correspondingProperty: IrProperty? = null
|
||||||
|
override val overriddenSymbols: MutableList<IrFieldSymbol> = mutableListOf()
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||||
return visitor.visitField(this, data)
|
return visitor.visitField(this, data)
|
||||||
|
|||||||
@@ -20,14 +20,14 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings
|
|||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrModuleFragmentImpl
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrPropertyImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrPropertyImpl
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
|
||||||
import org.jetbrains.kotlin.ir.declarations.lazy.*
|
import org.jetbrains.kotlin.ir.declarations.lazy.*
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrErrorExpressionImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrErrorExpressionImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl
|
||||||
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
|
import org.jetbrains.kotlin.resolve.hasBackingField
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
|
||||||
class DeclarationStubGenerator(
|
class DeclarationStubGenerator(
|
||||||
@@ -79,10 +79,10 @@ class DeclarationStubGenerator(
|
|||||||
throw AssertionError("Unexpected member descriptor: $descriptor")
|
throw AssertionError("Unexpected member descriptor: $descriptor")
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun generatePropertyStub(descriptor: PropertyDescriptor): IrProperty =
|
internal fun generatePropertyStub(descriptor: PropertyDescriptor, bindingContext: BindingContext? = null): IrProperty =
|
||||||
IrPropertyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, descriptor).also { irProperty ->
|
IrPropertyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, descriptor).also { irProperty ->
|
||||||
val getterDescriptor = descriptor.getter
|
val getterDescriptor = descriptor.getter
|
||||||
if (getterDescriptor == null) {
|
if (descriptor.hasBackingField(bindingContext)) {
|
||||||
irProperty.backingField =
|
irProperty.backingField =
|
||||||
symbolTable.declareField(
|
symbolTable.declareField(
|
||||||
UNDEFINED_OFFSET,
|
UNDEFINED_OFFSET,
|
||||||
@@ -91,7 +91,8 @@ class DeclarationStubGenerator(
|
|||||||
descriptor.original,
|
descriptor.original,
|
||||||
descriptor.type.toIrType()
|
descriptor.type.toIrType()
|
||||||
)
|
)
|
||||||
} else {
|
}
|
||||||
|
if (getterDescriptor != null) {
|
||||||
irProperty.getter = generateFunctionStub(getterDescriptor)
|
irProperty.getter = generateFunctionStub(getterDescriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -243,6 +243,15 @@ open class DeepCopyIrTree : IrElementTransformerVoid() {
|
|||||||
declaration.initializer?.transform()
|
declaration.initializer?.transform()
|
||||||
).apply {
|
).apply {
|
||||||
transformAnnotations(declaration)
|
transformAnnotations(declaration)
|
||||||
|
if (declaration.origin == IrDeclarationOrigin.FAKE_OVERRIDE) {
|
||||||
|
descriptor.overriddenDescriptors.mapIndexedTo(overriddenSymbols) { index, overriddenDescriptor ->
|
||||||
|
val oldOverriddenSymbol = declaration.overriddenSymbols.getOrNull(index)
|
||||||
|
if (overriddenDescriptor.original == oldOverriddenSymbol?.descriptor?.original)
|
||||||
|
oldOverriddenSymbol
|
||||||
|
else
|
||||||
|
IrFieldSymbolImpl(overriddenDescriptor.original)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty): IrLocalDelegatedProperty =
|
override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty): IrLocalDelegatedProperty =
|
||||||
|
|||||||
@@ -22,10 +22,7 @@ import org.jetbrains.kotlin.ir.declarations.*
|
|||||||
import org.jetbrains.kotlin.ir.declarations.impl.*
|
import org.jetbrains.kotlin.ir.declarations.impl.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.*
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrReturnTargetSymbol
|
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrReturnableBlockSymbol
|
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrAnonymousInitializerSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrAnonymousInitializerSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||||
@@ -175,6 +172,9 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
declaration.type.remapType()
|
declaration.type.remapType()
|
||||||
).apply {
|
).apply {
|
||||||
transformAnnotations(declaration)
|
transformAnnotations(declaration)
|
||||||
|
declaration.overriddenSymbols.mapTo(overriddenSymbols) {
|
||||||
|
symbolRemapper.getReferencedField(it)
|
||||||
|
}
|
||||||
initializer = declaration.initializer?.transform()
|
initializer = declaration.initializer?.transform()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -144,6 +144,16 @@ class DumpIrTreeVisitor(out: Appendable) : IrElementVisitor<Unit, String> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun visitField(declaration: IrField, data: String) {
|
||||||
|
declaration.dumpLabeledElementWith(data) {
|
||||||
|
dumpAnnotations(declaration)
|
||||||
|
declaration.overriddenSymbols.dumpItems("overridden") {
|
||||||
|
it.dumpDeclarationElementOrDescriptor()
|
||||||
|
}
|
||||||
|
declaration.initializer?.accept(this, "")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun List<IrElement>.dumpElements() {
|
private fun List<IrElement>.dumpElements() {
|
||||||
forEach { it.accept(this@DumpIrTreeVisitor, "") }
|
forEach { it.accept(this@DumpIrTreeVisitor, "") }
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-4
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
|||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||||
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
|
|
||||||
class ExternalDependenciesGenerator(
|
class ExternalDependenciesGenerator(
|
||||||
moduleDescriptor: ModuleDescriptor,
|
moduleDescriptor: ModuleDescriptor,
|
||||||
@@ -30,11 +31,11 @@ class ExternalDependenciesGenerator(
|
|||||||
moduleDescriptor, symbolTable, IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, irBuiltIns.languageVersionSettings
|
moduleDescriptor, symbolTable, IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, irBuiltIns.languageVersionSettings
|
||||||
)
|
)
|
||||||
|
|
||||||
fun generateUnboundSymbolsAsDependencies(irModule: IrModuleFragment) {
|
fun generateUnboundSymbolsAsDependencies(irModule: IrModuleFragment, bindingContext: BindingContext? = null) {
|
||||||
DependencyGenerationTask(irModule).run()
|
DependencyGenerationTask(irModule, bindingContext).run()
|
||||||
}
|
}
|
||||||
|
|
||||||
private inner class DependencyGenerationTask(val irModule: IrModuleFragment) {
|
private inner class DependencyGenerationTask(val irModule: IrModuleFragment, val bindingContext: BindingContext?) {
|
||||||
|
|
||||||
fun run() {
|
fun run() {
|
||||||
stubGenerator.unboundSymbolGeneration = true
|
stubGenerator.unboundSymbolGeneration = true
|
||||||
@@ -48,7 +49,7 @@ class ExternalDependenciesGenerator(
|
|||||||
stubGenerator.generateEnumEntryStub(it.descriptor)
|
stubGenerator.generateEnumEntryStub(it.descriptor)
|
||||||
}
|
}
|
||||||
ArrayList(symbolTable.unboundFields).forEach {
|
ArrayList(symbolTable.unboundFields).forEach {
|
||||||
stubGenerator.generatePropertyStub(it.descriptor)
|
stubGenerator.generatePropertyStub(it.descriptor, bindingContext)
|
||||||
}
|
}
|
||||||
ArrayList(symbolTable.unboundSimpleFunctions).forEach {
|
ArrayList(symbolTable.unboundSimpleFunctions).forEach {
|
||||||
stubGenerator.generateFunctionStub(it.descriptor)
|
stubGenerator.generateFunctionStub(it.descriptor)
|
||||||
|
|||||||
@@ -124,8 +124,7 @@ open class SymbolTable : ReferenceSymbolTable {
|
|||||||
private var currentScope: Scope? = null
|
private var currentScope: Scope? = null
|
||||||
|
|
||||||
override fun get(d: D): S? {
|
override fun get(d: D): S? {
|
||||||
val scope = currentScope
|
val scope = currentScope ?: return null
|
||||||
?: throw AssertionError("No active scope")
|
|
||||||
return scope[d]
|
return scope[d]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,9 @@
|
|||||||
package org.jetbrains.kotlin.ir.util
|
package org.jetbrains.kotlin.ir.util
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrField
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
|
|
||||||
@@ -17,10 +19,11 @@ fun SymbolTable.declareSimpleFunctionWithOverrides(
|
|||||||
descriptor: FunctionDescriptor
|
descriptor: FunctionDescriptor
|
||||||
) =
|
) =
|
||||||
declareSimpleFunction(startOffset, endOffset, origin, descriptor).also { declaration ->
|
declareSimpleFunction(startOffset, endOffset, origin, descriptor).also { declaration ->
|
||||||
generateOverriddenSymbols(declaration, this)
|
generateOverriddenFunctionSymbols(declaration, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun generateOverriddenSymbols(
|
|
||||||
|
fun generateOverriddenFunctionSymbols(
|
||||||
declaration: IrSimpleFunction,
|
declaration: IrSimpleFunction,
|
||||||
symbolTable: SymbolTable
|
symbolTable: SymbolTable
|
||||||
) {
|
) {
|
||||||
@@ -28,3 +31,27 @@ fun generateOverriddenSymbols(
|
|||||||
symbolTable.referenceSimpleFunction(it.original)
|
symbolTable.referenceSimpleFunction(it.original)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun SymbolTable.declareFieldWithOverrides(
|
||||||
|
startOffset: Int,
|
||||||
|
endOffset: Int,
|
||||||
|
origin: IrDeclarationOrigin,
|
||||||
|
descriptor: PropertyDescriptor,
|
||||||
|
type: IrType,
|
||||||
|
hasBackingField: (PropertyDescriptor) -> Boolean
|
||||||
|
) =
|
||||||
|
declareField(startOffset, endOffset, origin, descriptor, type).also { declaration ->
|
||||||
|
generateOverriddenFieldSymbols(declaration, this, hasBackingField)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun generateOverriddenFieldSymbols(
|
||||||
|
declaration: IrField,
|
||||||
|
symbolTable: SymbolTable,
|
||||||
|
hasBackingField: (PropertyDescriptor) -> Boolean
|
||||||
|
) {
|
||||||
|
declaration.descriptor.overriddenDescriptors.mapNotNullTo(declaration.overriddenSymbols) {
|
||||||
|
if (hasBackingField(it)) {
|
||||||
|
symbolTable.referenceField(it.original)
|
||||||
|
} else null
|
||||||
|
}
|
||||||
|
}
|
||||||
+12
@@ -58,12 +58,18 @@ FILE fqName:<root> fileName:/argumentReorderingInDelegatingConstructorCall.kt
|
|||||||
y: GET_VAR 'tmp0_y: Int' type=kotlin.Int origin=null
|
y: GET_VAR 'tmp0_y: Int' type=kotlin.Int origin=null
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor='Test1'
|
INSTANCE_INITIALIZER_CALL classDescriptor='Test1'
|
||||||
PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
||||||
|
FIELD FAKE_OVERRIDE name:x type:kotlin.Int visibility:public flags:final
|
||||||
|
overridden:
|
||||||
|
FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:public flags:final
|
||||||
FUN FAKE_OVERRIDE name:<get-x> visibility:public modality:FINAL <> ($this:Base) returnType:kotlin.Int flags:
|
FUN FAKE_OVERRIDE name:<get-x> visibility:public modality:FINAL <> ($this:Base) returnType:kotlin.Int flags:
|
||||||
correspondingProperty: PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
correspondingProperty: PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
||||||
overridden:
|
overridden:
|
||||||
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-x> visibility:public modality:FINAL <> ($this:Base) returnType:kotlin.Int flags:
|
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-x> visibility:public modality:FINAL <> ($this:Base) returnType:kotlin.Int flags:
|
||||||
$this: VALUE_PARAMETER name:<this> type:Base flags:
|
$this: VALUE_PARAMETER name:<this> type:Base flags:
|
||||||
PROPERTY FAKE_OVERRIDE name:y visibility:public modality:FINAL flags:val
|
PROPERTY FAKE_OVERRIDE name:y visibility:public modality:FINAL flags:val
|
||||||
|
FIELD FAKE_OVERRIDE name:y type:kotlin.Int visibility:public flags:final
|
||||||
|
overridden:
|
||||||
|
FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.Int visibility:public flags:final
|
||||||
FUN FAKE_OVERRIDE name:<get-y> visibility:public modality:FINAL <> ($this:Base) returnType:kotlin.Int flags:
|
FUN FAKE_OVERRIDE name:<get-y> visibility:public modality:FINAL <> ($this:Base) returnType:kotlin.Int flags:
|
||||||
correspondingProperty: PROPERTY FAKE_OVERRIDE name:y visibility:public modality:FINAL flags:val
|
correspondingProperty: PROPERTY FAKE_OVERRIDE name:y visibility:public modality:FINAL flags:val
|
||||||
overridden:
|
overridden:
|
||||||
@@ -111,12 +117,18 @@ FILE fqName:<root> fileName:/argumentReorderingInDelegatingConstructorCall.kt
|
|||||||
xx: GET_VAR 'tmp1_xx: Int' type=kotlin.Int origin=null
|
xx: GET_VAR 'tmp1_xx: Int' type=kotlin.Int origin=null
|
||||||
yy: GET_VAR 'tmp0_yy: Int' type=kotlin.Int origin=null
|
yy: GET_VAR 'tmp0_yy: Int' type=kotlin.Int origin=null
|
||||||
PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
||||||
|
FIELD FAKE_OVERRIDE name:x type:kotlin.Int visibility:public flags:final
|
||||||
|
overridden:
|
||||||
|
FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:public flags:final
|
||||||
FUN FAKE_OVERRIDE name:<get-x> visibility:public modality:FINAL <> ($this:Base) returnType:kotlin.Int flags:
|
FUN FAKE_OVERRIDE name:<get-x> visibility:public modality:FINAL <> ($this:Base) returnType:kotlin.Int flags:
|
||||||
correspondingProperty: PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
correspondingProperty: PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
||||||
overridden:
|
overridden:
|
||||||
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-x> visibility:public modality:FINAL <> ($this:Base) returnType:kotlin.Int flags:
|
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-x> visibility:public modality:FINAL <> ($this:Base) returnType:kotlin.Int flags:
|
||||||
$this: VALUE_PARAMETER name:<this> type:Base flags:
|
$this: VALUE_PARAMETER name:<this> type:Base flags:
|
||||||
PROPERTY FAKE_OVERRIDE name:y visibility:public modality:FINAL flags:val
|
PROPERTY FAKE_OVERRIDE name:y visibility:public modality:FINAL flags:val
|
||||||
|
FIELD FAKE_OVERRIDE name:y type:kotlin.Int visibility:public flags:final
|
||||||
|
overridden:
|
||||||
|
FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.Int visibility:public flags:final
|
||||||
FUN FAKE_OVERRIDE name:<get-y> visibility:public modality:FINAL <> ($this:Base) returnType:kotlin.Int flags:
|
FUN FAKE_OVERRIDE name:<get-y> visibility:public modality:FINAL <> ($this:Base) returnType:kotlin.Int flags:
|
||||||
correspondingProperty: PROPERTY FAKE_OVERRIDE name:y visibility:public modality:FINAL flags:val
|
correspondingProperty: PROPERTY FAKE_OVERRIDE name:y visibility:public modality:FINAL flags:val
|
||||||
overridden:
|
overridden:
|
||||||
|
|||||||
@@ -122,4 +122,3 @@ FILE fqName:<root> fileName:/classes.kt
|
|||||||
FUN ENUM_CLASS_SPECIAL_MEMBER name:valueOf visibility:public modality:FINAL <> (value:kotlin.String) returnType:TestEnumClass flags:
|
FUN ENUM_CLASS_SPECIAL_MEMBER name:valueOf visibility:public modality:FINAL <> (value:kotlin.String) returnType:TestEnumClass flags:
|
||||||
VALUE_PARAMETER name:value index:0 type:kotlin.String flags:
|
VALUE_PARAMETER name:value index:0 type:kotlin.String flags:
|
||||||
SYNTHETIC_BODY kind=ENUM_VALUEOF
|
SYNTHETIC_BODY kind=ENUM_VALUEOF
|
||||||
|
|
||||||
|
|||||||
-1
@@ -87,4 +87,3 @@ FILE fqName:<root> fileName:/delegatingConstructorCallToTypeAliasConstructor.kt
|
|||||||
overridden:
|
overridden:
|
||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags:
|
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags:
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||||
|
|
||||||
|
|||||||
+6
-1
@@ -323,6 +323,9 @@ FILE fqName:<root> fileName:/enum.kt
|
|||||||
FUN FAKE_OVERRIDE name:<get-ordinal> visibility:public modality:FINAL <> ($this:kotlin.Enum<TestEnum4>) returnType:kotlin.Int flags:
|
FUN FAKE_OVERRIDE name:<get-ordinal> visibility:public modality:FINAL <> ($this:kotlin.Enum<TestEnum4>) returnType:kotlin.Int flags:
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<TestEnum4> flags:
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<TestEnum4> flags:
|
||||||
PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
||||||
|
FIELD FAKE_OVERRIDE name:x type:kotlin.Int visibility:public flags:final
|
||||||
|
overridden:
|
||||||
|
FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:public flags:final
|
||||||
FUN FAKE_OVERRIDE name:<get-x> visibility:public modality:FINAL <> ($this:TestEnum4) returnType:kotlin.Int flags:
|
FUN FAKE_OVERRIDE name:<get-x> visibility:public modality:FINAL <> ($this:TestEnum4) returnType:kotlin.Int flags:
|
||||||
correspondingProperty: PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
correspondingProperty: PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
||||||
overridden:
|
overridden:
|
||||||
@@ -404,6 +407,9 @@ FILE fqName:<root> fileName:/enum.kt
|
|||||||
FUN FAKE_OVERRIDE name:<get-ordinal> visibility:public modality:FINAL <> ($this:kotlin.Enum<TestEnum4>) returnType:kotlin.Int flags:
|
FUN FAKE_OVERRIDE name:<get-ordinal> visibility:public modality:FINAL <> ($this:kotlin.Enum<TestEnum4>) returnType:kotlin.Int flags:
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<TestEnum4> flags:
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<TestEnum4> flags:
|
||||||
PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
||||||
|
FIELD FAKE_OVERRIDE name:x type:kotlin.Int visibility:public flags:final
|
||||||
|
overridden:
|
||||||
|
FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:public flags:final
|
||||||
FUN FAKE_OVERRIDE name:<get-x> visibility:public modality:FINAL <> ($this:TestEnum4) returnType:kotlin.Int flags:
|
FUN FAKE_OVERRIDE name:<get-x> visibility:public modality:FINAL <> ($this:TestEnum4) returnType:kotlin.Int flags:
|
||||||
correspondingProperty: PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
correspondingProperty: PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
||||||
overridden:
|
overridden:
|
||||||
@@ -537,4 +543,3 @@ FILE fqName:<root> fileName:/enum.kt
|
|||||||
FUN ENUM_CLASS_SPECIAL_MEMBER name:valueOf visibility:public modality:FINAL <> (value:kotlin.String) returnType:TestEnum5 flags:
|
FUN ENUM_CLASS_SPECIAL_MEMBER name:valueOf visibility:public modality:FINAL <> (value:kotlin.String) returnType:TestEnum5 flags:
|
||||||
VALUE_PARAMETER name:value index:0 type:kotlin.String flags:
|
VALUE_PARAMETER name:value index:0 type:kotlin.String flags:
|
||||||
SYNTHETIC_BODY kind=ENUM_VALUEOF
|
SYNTHETIC_BODY kind=ENUM_VALUEOF
|
||||||
|
|
||||||
|
|||||||
@@ -221,6 +221,9 @@ FILE fqName:<root> fileName:/enumWithSecondaryCtor.kt
|
|||||||
FUN FAKE_OVERRIDE name:<get-ordinal> visibility:public modality:FINAL <> ($this:kotlin.Enum<Test2>) returnType:kotlin.Int flags:
|
FUN FAKE_OVERRIDE name:<get-ordinal> visibility:public modality:FINAL <> ($this:kotlin.Enum<Test2>) returnType:kotlin.Int flags:
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<Test2> flags:
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<Test2> flags:
|
||||||
PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
||||||
|
FIELD FAKE_OVERRIDE name:x type:kotlin.Int visibility:public flags:final
|
||||||
|
overridden:
|
||||||
|
FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:public flags:final
|
||||||
FUN FAKE_OVERRIDE name:<get-x> visibility:public modality:FINAL <> ($this:Test2) returnType:kotlin.Int flags:
|
FUN FAKE_OVERRIDE name:<get-x> visibility:public modality:FINAL <> ($this:Test2) returnType:kotlin.Int flags:
|
||||||
correspondingProperty: PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
correspondingProperty: PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
||||||
overridden:
|
overridden:
|
||||||
@@ -287,6 +290,9 @@ FILE fqName:<root> fileName:/enumWithSecondaryCtor.kt
|
|||||||
FUN FAKE_OVERRIDE name:<get-ordinal> visibility:public modality:FINAL <> ($this:kotlin.Enum<Test2>) returnType:kotlin.Int flags:
|
FUN FAKE_OVERRIDE name:<get-ordinal> visibility:public modality:FINAL <> ($this:kotlin.Enum<Test2>) returnType:kotlin.Int flags:
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<Test2> flags:
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<Test2> flags:
|
||||||
PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
||||||
|
FIELD FAKE_OVERRIDE name:x type:kotlin.Int visibility:public flags:final
|
||||||
|
overridden:
|
||||||
|
FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:public flags:final
|
||||||
FUN FAKE_OVERRIDE name:<get-x> visibility:public modality:FINAL <> ($this:Test2) returnType:kotlin.Int flags:
|
FUN FAKE_OVERRIDE name:<get-x> visibility:public modality:FINAL <> ($this:Test2) returnType:kotlin.Int flags:
|
||||||
correspondingProperty: PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
correspondingProperty: PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
||||||
overridden:
|
overridden:
|
||||||
@@ -349,4 +355,3 @@ FILE fqName:<root> fileName:/enumWithSecondaryCtor.kt
|
|||||||
FUN ENUM_CLASS_SPECIAL_MEMBER name:valueOf visibility:public modality:FINAL <> (value:kotlin.String) returnType:Test2 flags:
|
FUN ENUM_CLASS_SPECIAL_MEMBER name:valueOf visibility:public modality:FINAL <> (value:kotlin.String) returnType:Test2 flags:
|
||||||
VALUE_PARAMETER name:value index:0 type:kotlin.String flags:
|
VALUE_PARAMETER name:value index:0 type:kotlin.String flags:
|
||||||
SYNTHETIC_BODY kind=ENUM_VALUEOF
|
SYNTHETIC_BODY kind=ENUM_VALUEOF
|
||||||
|
|
||||||
|
|||||||
-1
@@ -206,4 +206,3 @@ FILE fqName:<root> fileName:/classesWithAnnotations.kt
|
|||||||
overridden:
|
overridden:
|
||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags:
|
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags:
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||||
|
|
||||||
|
|||||||
-1
@@ -155,4 +155,3 @@ FILE fqName:<root> fileName:/enumEntriesWithAnnotations.kt
|
|||||||
FUN ENUM_CLASS_SPECIAL_MEMBER name:valueOf visibility:public modality:FINAL <> (value:kotlin.String) returnType:TestEnum flags:
|
FUN ENUM_CLASS_SPECIAL_MEMBER name:valueOf visibility:public modality:FINAL <> (value:kotlin.String) returnType:TestEnum flags:
|
||||||
VALUE_PARAMETER name:value index:0 type:kotlin.String flags:
|
VALUE_PARAMETER name:value index:0 type:kotlin.String flags:
|
||||||
SYNTHETIC_BODY kind=ENUM_VALUEOF
|
SYNTHETIC_BODY kind=ENUM_VALUEOF
|
||||||
|
|
||||||
|
|||||||
-1
@@ -94,4 +94,3 @@ FILE fqName:<root> fileName:/enumsInAnnotationArguments.kt
|
|||||||
CALL 'constructor TestAnn(En)' type=TestAnn origin=null
|
CALL 'constructor TestAnn(En)' type=TestAnn origin=null
|
||||||
x: GET_ENUM 'A' type=En
|
x: GET_ENUM 'A' type=En
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
|
|
||||||
|
|||||||
@@ -110,4 +110,3 @@ FILE fqName:<root> fileName:/expectedEnumClass.kt
|
|||||||
FUN ENUM_CLASS_SPECIAL_MEMBER name:valueOf visibility:public modality:FINAL <> (value:kotlin.String) returnType:MyEnum flags:
|
FUN ENUM_CLASS_SPECIAL_MEMBER name:valueOf visibility:public modality:FINAL <> (value:kotlin.String) returnType:MyEnum flags:
|
||||||
VALUE_PARAMETER name:value index:0 type:kotlin.String flags:
|
VALUE_PARAMETER name:value index:0 type:kotlin.String flags:
|
||||||
SYNTHETIC_BODY kind=ENUM_VALUEOF
|
SYNTHETIC_BODY kind=ENUM_VALUEOF
|
||||||
|
|
||||||
|
|||||||
@@ -145,4 +145,3 @@ FILE fqName:<root> fileName:/enumEntryAsReceiver.kt
|
|||||||
CALL 'invoke(): String' type=kotlin.String origin=INVOKE
|
CALL 'invoke(): String' type=kotlin.String origin=INVOKE
|
||||||
$this: CALL '<get-value>(): () -> String' type=() -> kotlin.String origin=GET_PROPERTY
|
$this: CALL '<get-value>(): () -> String' type=() -> kotlin.String origin=GET_PROPERTY
|
||||||
$this: GET_ENUM 'B' type=X
|
$this: GET_ENUM 'B' type=X
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ FILE fqName:<root> fileName:/Derived.kt
|
|||||||
value: GET_VAR 'value-parameter value: Int' type=kotlin.Int origin=null
|
value: GET_VAR 'value-parameter value: Int' type=kotlin.Int origin=null
|
||||||
PROPERTY FAKE_OVERRIDE name:value visibility:public modality:FINAL flags:var
|
PROPERTY FAKE_OVERRIDE name:value visibility:public modality:FINAL flags:var
|
||||||
FIELD FAKE_OVERRIDE name:value type:kotlin.Int visibility:public flags:
|
FIELD FAKE_OVERRIDE name:value type:kotlin.Int visibility:public flags:
|
||||||
|
overridden:
|
||||||
|
FIELD IR_EXTERNAL_DECLARATION_STUB name:value type:kotlin.Int visibility:public flags:
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
||||||
overridden:
|
overridden:
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
||||||
|
|||||||
+8
-1
@@ -94,12 +94,18 @@ FILE fqName:<root> fileName:/kt16904.kt
|
|||||||
$this: GET_VAR 'tmp1_this: Test1' type=Test1 origin=null
|
$this: GET_VAR 'tmp1_this: Test1' type=Test1 origin=null
|
||||||
other: CONST Int type=kotlin.Int value=42
|
other: CONST Int type=kotlin.Int value=42
|
||||||
PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
||||||
|
FIELD FAKE_OVERRIDE name:x type:B visibility:public flags:final
|
||||||
|
overridden:
|
||||||
|
FIELD PROPERTY_BACKING_FIELD name:x type:B visibility:public flags:final
|
||||||
FUN FAKE_OVERRIDE name:<get-x> visibility:public modality:FINAL <> ($this:A) returnType:B flags:
|
FUN FAKE_OVERRIDE name:<get-x> visibility:public modality:FINAL <> ($this:A) returnType:B flags:
|
||||||
correspondingProperty: PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
correspondingProperty: PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
||||||
overridden:
|
overridden:
|
||||||
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-x> visibility:public modality:FINAL <> ($this:A) returnType:B flags:
|
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-x> visibility:public modality:FINAL <> ($this:A) returnType:B flags:
|
||||||
$this: VALUE_PARAMETER name:<this> type:A flags:
|
$this: VALUE_PARAMETER name:<this> type:A flags:
|
||||||
PROPERTY FAKE_OVERRIDE name:y visibility:public modality:FINAL flags:var
|
PROPERTY FAKE_OVERRIDE name:y visibility:public modality:FINAL flags:var
|
||||||
|
FIELD FAKE_OVERRIDE name:y type:kotlin.Int visibility:public flags:
|
||||||
|
overridden:
|
||||||
|
FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.Int visibility:public flags:
|
||||||
FUN FAKE_OVERRIDE name:<get-y> visibility:public modality:FINAL <> ($this:A) returnType:kotlin.Int flags:
|
FUN FAKE_OVERRIDE name:<get-y> visibility:public modality:FINAL <> ($this:A) returnType:kotlin.Int flags:
|
||||||
correspondingProperty: PROPERTY FAKE_OVERRIDE name:y visibility:public modality:FINAL flags:var
|
correspondingProperty: PROPERTY FAKE_OVERRIDE name:y visibility:public modality:FINAL flags:var
|
||||||
overridden:
|
overridden:
|
||||||
@@ -137,6 +143,8 @@ FILE fqName:<root> fileName:/kt16904.kt
|
|||||||
value: CONST Int type=kotlin.Int value=42
|
value: CONST Int type=kotlin.Int value=42
|
||||||
PROPERTY FAKE_OVERRIDE name:field visibility:public modality:FINAL flags:var
|
PROPERTY FAKE_OVERRIDE name:field visibility:public modality:FINAL flags:var
|
||||||
FIELD FAKE_OVERRIDE name:field type:kotlin.Int visibility:public flags:
|
FIELD FAKE_OVERRIDE name:field type:kotlin.Int visibility:public flags:
|
||||||
|
overridden:
|
||||||
|
FIELD IR_EXTERNAL_DECLARATION_STUB name:field type:kotlin.Int visibility:public flags:
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
||||||
overridden:
|
overridden:
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
||||||
@@ -150,4 +158,3 @@ FILE fqName:<root> fileName:/kt16904.kt
|
|||||||
overridden:
|
overridden:
|
||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags:
|
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags:
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||||
|
|
||||||
|
|||||||
@@ -98,6 +98,9 @@ FILE fqName:<root> fileName:/multipleThisReferences.kt
|
|||||||
GET_FIELD 'xx: Int' type=kotlin.Int origin=null
|
GET_FIELD 'xx: Int' type=kotlin.Int origin=null
|
||||||
receiver: GET_VAR 'this@<no name provided>: <no name provided>' type=Host.test.<no name provided> origin=null
|
receiver: GET_VAR 'this@<no name provided>: <no name provided>' type=Host.test.<no name provided> origin=null
|
||||||
PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
||||||
|
FIELD FAKE_OVERRIDE name:x type:kotlin.Int visibility:public flags:final
|
||||||
|
overridden:
|
||||||
|
FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:public flags:final
|
||||||
FUN FAKE_OVERRIDE name:<get-x> visibility:public modality:FINAL <> ($this:Outer.Inner) returnType:kotlin.Int flags:
|
FUN FAKE_OVERRIDE name:<get-x> visibility:public modality:FINAL <> ($this:Outer.Inner) returnType:kotlin.Int flags:
|
||||||
correspondingProperty: PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
correspondingProperty: PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
||||||
overridden:
|
overridden:
|
||||||
@@ -130,4 +133,3 @@ FILE fqName:<root> fileName:/multipleThisReferences.kt
|
|||||||
overridden:
|
overridden:
|
||||||
FUN IR_EXTERNAL_DECLARATION_STUB name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags:
|
FUN IR_EXTERNAL_DECLARATION_STUB name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags:
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||||
|
|
||||||
|
|||||||
@@ -108,4 +108,3 @@ FILE fqName:<root> fileName:/objectAsCallable.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
RETURN type=kotlin.Nothing from='<get-test2>(): Int'
|
RETURN type=kotlin.Nothing from='<get-test2>(): Int'
|
||||||
GET_FIELD 'test2: Int' type=kotlin.Int origin=null
|
GET_FIELD 'test2: Int' type=kotlin.Int origin=null
|
||||||
|
|
||||||
|
|||||||
+3
@@ -43,6 +43,9 @@ FILE fqName:<root> fileName:/objectReferenceInClosureInSuperConstructorCall.kt
|
|||||||
FUNCTION_REFERENCE '<anonymous>(): Test' type=() -> Test origin=LAMBDA
|
FUNCTION_REFERENCE '<anonymous>(): Test' type=() -> Test origin=LAMBDA
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor='Test'
|
INSTANCE_INITIALIZER_CALL classDescriptor='Test'
|
||||||
PROPERTY FAKE_OVERRIDE name:lambda visibility:public modality:FINAL flags:val
|
PROPERTY FAKE_OVERRIDE name:lambda visibility:public modality:FINAL flags:val
|
||||||
|
FIELD FAKE_OVERRIDE name:lambda type:() -> kotlin.Any visibility:public flags:final
|
||||||
|
overridden:
|
||||||
|
FIELD PROPERTY_BACKING_FIELD name:lambda type:() -> kotlin.Any visibility:public flags:final
|
||||||
FUN FAKE_OVERRIDE name:<get-lambda> visibility:public modality:FINAL <> ($this:Base) returnType:() -> kotlin.Any flags:
|
FUN FAKE_OVERRIDE name:<get-lambda> visibility:public modality:FINAL <> ($this:Base) returnType:() -> kotlin.Any flags:
|
||||||
correspondingProperty: PROPERTY FAKE_OVERRIDE name:lambda visibility:public modality:FINAL flags:val
|
correspondingProperty: PROPERTY FAKE_OVERRIDE name:lambda visibility:public modality:FINAL flags:val
|
||||||
overridden:
|
overridden:
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ FILE fqName:<root> fileName:/Derived.kt
|
|||||||
GET_VAR 'value-parameter v: Any' type=kotlin.Any origin=null
|
GET_VAR 'value-parameter v: Any' type=kotlin.Any origin=null
|
||||||
PROPERTY FAKE_OVERRIDE name:value visibility:public modality:FINAL flags:var
|
PROPERTY FAKE_OVERRIDE name:value visibility:public modality:FINAL flags:var
|
||||||
FIELD FAKE_OVERRIDE name:value type:kotlin.String? visibility:public flags:
|
FIELD FAKE_OVERRIDE name:value type:kotlin.String? visibility:public flags:
|
||||||
|
overridden:
|
||||||
|
FIELD IR_EXTERNAL_DECLARATION_STUB name:value type:kotlin.String? visibility:public flags:
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
||||||
overridden:
|
overridden:
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
||||||
|
|||||||
@@ -111,4 +111,3 @@ FILE fqName:<root> fileName:/thisOfGenericOuterClass.kt
|
|||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags:
|
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags:
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||||
CALL 'constructor <no name provided>()' type=test.<no name provided> origin=OBJECT_LITERAL
|
CALL 'constructor <no name provided>()' type=test.<no name provided> origin=OBJECT_LITERAL
|
||||||
|
|
||||||
|
|||||||
@@ -137,4 +137,3 @@ FILE fqName:<root> fileName:/values.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
RETURN type=kotlin.Nothing from='test4(): Z.Companion'
|
RETURN type=kotlin.Nothing from='test4(): Z.Companion'
|
||||||
GET_OBJECT 'companion object of Z' type=Z.Companion
|
GET_OBJECT 'companion object of Z' type=Z.Companion
|
||||||
|
|
||||||
|
|||||||
@@ -132,4 +132,3 @@ FILE fqName:<root> fileName:/enumEntry.kt
|
|||||||
FUN ENUM_CLASS_SPECIAL_MEMBER name:valueOf visibility:public modality:FINAL <> (value:kotlin.String) returnType:Z flags:
|
FUN ENUM_CLASS_SPECIAL_MEMBER name:valueOf visibility:public modality:FINAL <> (value:kotlin.String) returnType:Z flags:
|
||||||
VALUE_PARAMETER name:value index:0 type:kotlin.String flags:
|
VALUE_PARAMETER name:value index:0 type:kotlin.String flags:
|
||||||
SYNTHETIC_BODY kind=ENUM_VALUEOF
|
SYNTHETIC_BODY kind=ENUM_VALUEOF
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
// MODULE: m1
|
||||||
|
// FILE: genericClassInDifferentModule_m1.kt
|
||||||
|
|
||||||
|
abstract class Base<T>(val x: T) {
|
||||||
|
abstract fun <Y> foo(y: Y): T
|
||||||
|
|
||||||
|
abstract var bar: T
|
||||||
|
|
||||||
|
abstract var <Z> Z.exn: T
|
||||||
|
}
|
||||||
|
|
||||||
|
// MODULE: m2(m1)
|
||||||
|
// FILE: genericClassInDifferentModule_m2.kt
|
||||||
|
|
||||||
|
class Derived1<T>(x: T) : Base<T>(x) {
|
||||||
|
override fun <Y> foo(y: Y): T = x
|
||||||
|
|
||||||
|
override var bar: T = x
|
||||||
|
|
||||||
|
override var <Z> Z.exn: T
|
||||||
|
get() = x
|
||||||
|
set(value) {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
FILE fqName:<root> fileName:/genericClassInDifferentModule_m1.kt
|
||||||
|
CLASS CLASS name:Base modality:ABSTRACT visibility:public flags: superTypes:[kotlin.Any]
|
||||||
|
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:Base<T> flags:
|
||||||
|
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?]
|
||||||
|
CONSTRUCTOR visibility:public <> (x:T) returnType:Base<T> flags:primary
|
||||||
|
VALUE_PARAMETER name:x index:0 type:T flags:
|
||||||
|
BLOCK_BODY
|
||||||
|
DELEGATING_CONSTRUCTOR_CALL 'constructor Any()'
|
||||||
|
INSTANCE_INITIALIZER_CALL classDescriptor='Base'
|
||||||
|
PROPERTY name:x visibility:public modality:FINAL flags:val
|
||||||
|
FIELD PROPERTY_BACKING_FIELD name:x type:T visibility:public flags:final
|
||||||
|
EXPRESSION_BODY
|
||||||
|
GET_VAR 'value-parameter x: T' type=T origin=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
|
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-x> visibility:public modality:FINAL <> ($this:Base<T>) returnType:T flags:
|
||||||
|
correspondingProperty: PROPERTY name:x visibility:public modality:FINAL flags:val
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:Base<T> flags:
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='<get-x>(): T'
|
||||||
|
GET_FIELD 'x: T' type=T origin=null
|
||||||
|
receiver: GET_VAR 'this@Base: Base<T>' type=Base<T> origin=null
|
||||||
|
FUN name:foo visibility:public modality:ABSTRACT <Y> ($this:Base<T>, y:Y) returnType:T flags:
|
||||||
|
TYPE_PARAMETER name:Y index:0 variance: superTypes:[kotlin.Any?]
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:Base<T> flags:
|
||||||
|
VALUE_PARAMETER name:y index:0 type:Y flags:
|
||||||
|
PROPERTY name:bar visibility:public modality:ABSTRACT flags:var
|
||||||
|
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-bar> visibility:public modality:ABSTRACT <> ($this:Base<T>) returnType:T flags:
|
||||||
|
correspondingProperty: PROPERTY name:bar visibility:public modality:ABSTRACT flags:var
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:Base<T> flags:
|
||||||
|
FUN DEFAULT_PROPERTY_ACCESSOR name:<set-bar> visibility:public modality:ABSTRACT <> ($this:Base<T>, <set-?>:T) returnType:kotlin.Unit flags:
|
||||||
|
correspondingProperty: PROPERTY name:bar visibility:public modality:ABSTRACT flags:var
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:Base<T> flags:
|
||||||
|
VALUE_PARAMETER name:<set-?> index:0 type:T flags:
|
||||||
|
PROPERTY name:exn visibility:public modality:ABSTRACT flags:var
|
||||||
|
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-exn> visibility:public modality:ABSTRACT <Z> ($this:Base<T>, $receiver:Z) returnType:T flags:
|
||||||
|
correspondingProperty: PROPERTY name:exn visibility:public modality:ABSTRACT flags:var
|
||||||
|
TYPE_PARAMETER name:Z index:0 variance: superTypes:[kotlin.Any?]
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:Base<T> flags:
|
||||||
|
$receiver: VALUE_PARAMETER name:<this> type:Z flags:
|
||||||
|
FUN DEFAULT_PROPERTY_ACCESSOR name:<set-exn> visibility:public modality:ABSTRACT <Z> ($this:Base<T>, $receiver:Z, <set-?>:T) returnType:kotlin.Unit flags:
|
||||||
|
correspondingProperty: PROPERTY name:exn visibility:public modality:ABSTRACT flags:var
|
||||||
|
TYPE_PARAMETER name:Z index:0 variance: superTypes:[kotlin.Any?]
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:Base<T> flags:
|
||||||
|
$receiver: VALUE_PARAMETER name:<this> type:Z flags:
|
||||||
|
VALUE_PARAMETER name:<set-?> index:0 type:T flags:
|
||||||
|
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
||||||
|
overridden:
|
||||||
|
FUN IR_EXTERNAL_DECLARATION_STUB name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||||
|
VALUE_PARAMETER name:other index:0 type:kotlin.Any? flags:
|
||||||
|
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int flags:
|
||||||
|
overridden:
|
||||||
|
FUN IR_EXTERNAL_DECLARATION_STUB name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int flags:
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||||
|
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags:
|
||||||
|
overridden:
|
||||||
|
FUN IR_EXTERNAL_DECLARATION_STUB name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags:
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
FILE fqName:<root> fileName:/genericClassInDifferentModule_m2.kt
|
||||||
|
CLASS CLASS name:Derived1 modality:FINAL visibility:public flags: superTypes:[Base<T>]
|
||||||
|
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:Derived1<T> flags:
|
||||||
|
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?]
|
||||||
|
CONSTRUCTOR visibility:public <> (x:T) returnType:Derived1<T> flags:primary
|
||||||
|
VALUE_PARAMETER name:x index:0 type:T flags:
|
||||||
|
BLOCK_BODY
|
||||||
|
DELEGATING_CONSTRUCTOR_CALL 'constructor Base(T)'
|
||||||
|
<T>: T
|
||||||
|
x: GET_VAR 'value-parameter x: T' type=T origin=null
|
||||||
|
INSTANCE_INITIALIZER_CALL classDescriptor='Derived1'
|
||||||
|
FUN name:foo visibility:public modality:OPEN <Y> ($this:Derived1<T>, y:Y) returnType:T flags:
|
||||||
|
overridden:
|
||||||
|
FUN name:foo visibility:public modality:ABSTRACT <Y> ($this:Base<T>, y:Y) returnType:T flags:
|
||||||
|
TYPE_PARAMETER name:Y index:0 variance: superTypes:[kotlin.Any?]
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:Derived1<T> flags:
|
||||||
|
VALUE_PARAMETER name:y index:0 type:Y flags:
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='foo(Y): T'
|
||||||
|
CALL '<get-x>(): T' type=T origin=GET_PROPERTY
|
||||||
|
$this: GET_VAR 'this@Derived1: Derived1<T>' type=Derived1<T> origin=null
|
||||||
|
PROPERTY name:bar visibility:public modality:OPEN flags:var
|
||||||
|
FIELD PROPERTY_BACKING_FIELD name:bar type:T visibility:public flags:
|
||||||
|
EXPRESSION_BODY
|
||||||
|
GET_VAR 'value-parameter x: T' type=T origin=null
|
||||||
|
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-bar> visibility:public modality:OPEN <> ($this:Derived1<T>) returnType:T flags:
|
||||||
|
correspondingProperty: PROPERTY name:bar visibility:public modality:OPEN flags:var
|
||||||
|
overridden:
|
||||||
|
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-bar> visibility:public modality:ABSTRACT <> ($this:Base<T>) returnType:T flags:
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:Derived1<T> flags:
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='<get-bar>(): T'
|
||||||
|
GET_FIELD 'bar: T' type=T origin=null
|
||||||
|
receiver: GET_VAR 'this@Derived1: Derived1<T>' type=Derived1<T> origin=null
|
||||||
|
FUN DEFAULT_PROPERTY_ACCESSOR name:<set-bar> visibility:public modality:OPEN <> ($this:Derived1<T>, <set-?>:T) returnType:kotlin.Unit flags:
|
||||||
|
correspondingProperty: PROPERTY name:bar visibility:public modality:OPEN flags:var
|
||||||
|
overridden:
|
||||||
|
FUN DEFAULT_PROPERTY_ACCESSOR name:<set-bar> visibility:public modality:ABSTRACT <> ($this:Base<T>, <set-?>:T) returnType:kotlin.Unit flags:
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:Derived1<T> flags:
|
||||||
|
VALUE_PARAMETER name:<set-?> index:0 type:T flags:
|
||||||
|
BLOCK_BODY
|
||||||
|
SET_FIELD 'bar: T' type=kotlin.Unit origin=null
|
||||||
|
receiver: GET_VAR 'this@Derived1: Derived1<T>' type=Derived1<T> origin=null
|
||||||
|
value: GET_VAR 'value-parameter <set-?>: T' type=T origin=null
|
||||||
|
PROPERTY name:exn visibility:public modality:OPEN flags:var
|
||||||
|
FUN name:<get-exn> visibility:public modality:OPEN <Z> ($this:Derived1<T>, $receiver:Z) returnType:T flags:
|
||||||
|
correspondingProperty: PROPERTY name:exn visibility:public modality:OPEN flags:var
|
||||||
|
overridden:
|
||||||
|
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-exn> visibility:public modality:ABSTRACT <Z> ($this:Base<T>, $receiver:Z) returnType:T flags:
|
||||||
|
TYPE_PARAMETER name:Z index:0 variance: superTypes:[kotlin.Any?]
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:Derived1<T> flags:
|
||||||
|
$receiver: VALUE_PARAMETER name:<this> type:Z flags:
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='<get-exn>() on Z: T'
|
||||||
|
CALL '<get-x>(): T' type=T origin=GET_PROPERTY
|
||||||
|
$this: GET_VAR 'this@Derived1: Derived1<T>' type=Derived1<T> origin=null
|
||||||
|
FUN name:<set-exn> visibility:public modality:OPEN <Z> ($this:Derived1<T>, $receiver:Z, value:T) returnType:kotlin.Unit flags:
|
||||||
|
correspondingProperty: PROPERTY name:exn visibility:public modality:OPEN flags:var
|
||||||
|
overridden:
|
||||||
|
FUN DEFAULT_PROPERTY_ACCESSOR name:<set-exn> visibility:public modality:ABSTRACT <Z> ($this:Base<T>, $receiver:Z, <set-?>:T) returnType:kotlin.Unit flags:
|
||||||
|
TYPE_PARAMETER name:Z index:0 variance: superTypes:[kotlin.Any?]
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:Derived1<T> flags:
|
||||||
|
$receiver: VALUE_PARAMETER name:<this> type:Z flags:
|
||||||
|
VALUE_PARAMETER name:value index:0 type:T flags:
|
||||||
|
BLOCK_BODY
|
||||||
|
PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
||||||
|
FUN FAKE_OVERRIDE name:<get-x> visibility:public modality:FINAL <> ($this:Base<T>) returnType:T flags:
|
||||||
|
correspondingProperty: PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:val
|
||||||
|
overridden:
|
||||||
|
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-x> visibility:public modality:FINAL <> ($this:Base<T>) returnType:T flags:
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:Base<T> flags:
|
||||||
|
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
||||||
|
overridden:
|
||||||
|
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||||
|
VALUE_PARAMETER name:other index:0 type:kotlin.Any? flags:
|
||||||
|
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int flags:
|
||||||
|
overridden:
|
||||||
|
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int flags:
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||||
|
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags:
|
||||||
|
overridden:
|
||||||
|
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags:
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||||
@@ -19,6 +19,8 @@ FILE fqName:<root> fileName:/javaInnerClass.kt
|
|||||||
receiver: GET_VAR 'this@Test1: Test1' type=Test1 origin=null
|
receiver: GET_VAR 'this@Test1: Test1' type=Test1 origin=null
|
||||||
PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:var
|
PROPERTY FAKE_OVERRIDE name:x visibility:public modality:FINAL flags:var
|
||||||
FIELD FAKE_OVERRIDE name:x type:kotlin.Int visibility:public flags:
|
FIELD FAKE_OVERRIDE name:x type:kotlin.Int visibility:public flags:
|
||||||
|
overridden:
|
||||||
|
FIELD IR_EXTERNAL_DECLARATION_STUB name:x type:kotlin.Int visibility:public flags:
|
||||||
FUN FAKE_OVERRIDE name:bar visibility:public modality:OPEN <> ($this:J) returnType:kotlin.Unit flags:
|
FUN FAKE_OVERRIDE name:bar visibility:public modality:OPEN <> ($this:J) returnType:kotlin.Unit flags:
|
||||||
overridden:
|
overridden:
|
||||||
FUN IR_EXTERNAL_DECLARATION_STUB name:bar visibility:public modality:OPEN <> ($this:J) returnType:kotlin.Unit flags:
|
FUN IR_EXTERNAL_DECLARATION_STUB name:bar visibility:public modality:OPEN <> ($this:J) returnType:kotlin.Unit flags:
|
||||||
|
|||||||
@@ -1395,6 +1395,11 @@ public class IrTextTestCaseGenerated extends AbstractIrTextTestCase {
|
|||||||
runTest("compiler/testData/ir/irText/stubs/builtinMap.kt");
|
runTest("compiler/testData/ir/irText/stubs/builtinMap.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("genericClassInDifferentModule.kt")
|
||||||
|
public void testGenericClassInDifferentModule() throws Exception {
|
||||||
|
runTest("compiler/testData/ir/irText/stubs/genericClassInDifferentModule.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("javaEnum.kt")
|
@TestMetadata("javaEnum.kt")
|
||||||
public void testJavaEnum() throws Exception {
|
public void testJavaEnum() throws Exception {
|
||||||
runTest("compiler/testData/ir/irText/stubs/javaEnum.kt");
|
runTest("compiler/testData/ir/irText/stubs/javaEnum.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user