Skip to content

Commit e89047d

Browse files
committed
Generate super classes and overridden functions in proper scope
Such references require proper scope so that local symbols are bound. Example: ``` fun <T> outer() { abstract class ALocal<S : T> { abstract fun bar() } class Local<S : T> : ALocal<S>() { override fun bar() {} } } ``` Here local classes have type parameters with upper bounds depending on function type parameters, and members overriding members in other local classes.
1 parent 8fef0f0 commit e89047d

File tree

54 files changed

+2495
-111
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+2495
-111
lines changed

compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/Psi2IrTranslator.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
2020
import org.jetbrains.kotlin.ir.IrElement
2121
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
2222
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
23-
import org.jetbrains.kotlin.ir.util.patchOverriddenFunctionsFromDescriptors
2423
import org.jetbrains.kotlin.psi.KtFile
2524
import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext
2625
import org.jetbrains.kotlin.psi2ir.generators.ModuleGenerator
@@ -61,6 +60,5 @@ class Psi2IrTranslator(val configuration: Psi2IrConfiguration = Psi2IrConfigurat
6160
postprocessingSteps.forEach { it.postprocess(context, irElement) }
6261

6362
irElement.patchDeclarationParents()
64-
irElement.patchOverriddenFunctionsFromDescriptors(context.symbolTable)
6563
}
6664
}

compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.ir.descriptors.IrImplementingDelegateDescriptorImpl
2424
import org.jetbrains.kotlin.ir.expressions.impl.*
2525
import org.jetbrains.kotlin.ir.expressions.mapValueParameters
2626
import org.jetbrains.kotlin.ir.util.StableDescriptorsComparator
27+
import org.jetbrains.kotlin.ir.util.declareSimpleFunctionWithOverrides
2728
import org.jetbrains.kotlin.psi.KtClassOrObject
2829
import org.jetbrains.kotlin.psi.KtDelegatedSuperTypeEntry
2930
import org.jetbrains.kotlin.psi.KtEnumEntry
@@ -187,7 +188,7 @@ class ClassGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGe
187188
}
188189

189190
private fun generateDelegatedFunction(irDelegate: IrField, delegated: FunctionDescriptor, overridden: FunctionDescriptor): IrFunction =
190-
context.symbolTable.declareSimpleFunction(
191+
context.symbolTable.declareSimpleFunctionWithOverrides(
191192
irDelegate.startOffset, irDelegate.endOffset,
192193
IrDeclarationOrigin.DELEGATED_MEMBER,
193194
delegated

compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DataClassMembersGenerator.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.ir.expressions.IrExpression
3030
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
3131
import org.jetbrains.kotlin.ir.expressions.mapValueParameters
3232
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
33+
import org.jetbrains.kotlin.ir.util.declareSimpleFunctionWithOverrides
3334
import org.jetbrains.kotlin.psi.KtClassOrObject
3435
import org.jetbrains.kotlin.psi.KtParameter
3536
import org.jetbrains.kotlin.psi2ir.containsNull
@@ -48,7 +49,7 @@ class DataClassMembersGenerator(declarationGenerator: DeclarationGenerator) : De
4849
}
4950

5051
private fun declareSimpleFunction(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, function: FunctionDescriptor) =
51-
context.symbolTable.declareSimpleFunction(startOffset, endOffset, origin, function)
52+
context.symbolTable.declareSimpleFunctionWithOverrides(startOffset, endOffset, origin, function)
5253

5354
private inner class MemberFunctionBuilder(
5455
val irClass: IrClass,

compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationGenerator.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,24 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator {
8383
val ktTypeParameterDeclaration = DescriptorToSourceUtils.getSourceFromDescriptor(typeParameterDescriptor)
8484
val startOffset = ktTypeParameterDeclaration.startOffsetOrUndefined
8585
val endOffset = ktTypeParameterDeclaration.endOffsetOrUndefined
86-
context.symbolTable.declareTypeParameter(startOffset, endOffset, IrDeclarationOrigin.DEFINED, typeParameterDescriptor)
86+
declareTypeParameterWithSuperClassifiers(startOffset, endOffset, IrDeclarationOrigin.DEFINED, typeParameterDescriptor)
8787
}
8888
}
8989

90+
private fun declareTypeParameterWithSuperClassifiers(
91+
startOffset: Int,
92+
endOffset: Int,
93+
origin: IrDeclarationOrigin,
94+
descriptor: TypeParameterDescriptor
95+
) =
96+
context.symbolTable.declareTypeParameter(startOffset, endOffset, origin, descriptor).also { irTypeParameter ->
97+
descriptor.typeConstructor.supertypes.mapNotNullTo(irTypeParameter.superClassifiers) {
98+
it.constructor.declarationDescriptor?.let {
99+
context.symbolTable.referenceClassifier(it)
100+
}
101+
}
102+
}
103+
90104
fun generateInitializerBody(scopeOwnerSymbol: IrSymbol, ktBody: KtExpression): IrExpressionBody =
91105
createBodyGenerator(scopeOwnerSymbol).generateExpressionBody(ktBody)
92106

compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DelegatedPropertyGenerator.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
3333
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
3434
import org.jetbrains.kotlin.ir.symbols.IrSymbol
3535
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
36+
import org.jetbrains.kotlin.ir.util.declareSimpleFunctionWithOverrides
3637
import org.jetbrains.kotlin.psi.KtElement
3738
import org.jetbrains.kotlin.psi.KtProperty
3839
import org.jetbrains.kotlin.psi.KtPropertyDelegate
@@ -93,7 +94,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D
9394
accessorDescriptor: PropertyAccessorDescriptor,
9495
generateBody: (IrFunction) -> IrBody
9596
): IrFunction =
96-
context.symbolTable.declareSimpleFunction(
97+
context.symbolTable.declareSimpleFunctionWithOverrides(
9798
ktDelegate.startOffset, ktDelegate.endOffset,
9899
IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR,
99100
accessorDescriptor
@@ -327,7 +328,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D
327328
ktDelegate: KtPropertyDelegate,
328329
generateBody: (IrFunction) -> IrBody
329330
) =
330-
context.symbolTable.declareSimpleFunction(
331+
context.symbolTable.declareSimpleFunctionWithOverrides(
331332
ktDelegate.startOffset, ktDelegate.endOffset,
332333
IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR,
333334
getterDescriptor

compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/EnumClassMembersGenerator.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
2222
import org.jetbrains.kotlin.ir.declarations.addMember
2323
import org.jetbrains.kotlin.ir.expressions.IrSyntheticBodyKind
2424
import org.jetbrains.kotlin.ir.expressions.impl.IrSyntheticBodyImpl
25+
import org.jetbrains.kotlin.ir.util.declareSimpleFunctionWithOverrides
2526
import org.jetbrains.kotlin.psi2ir.findFirstFunction
2627

2728
class EnumClassMembersGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
@@ -38,7 +39,7 @@ class EnumClassMembersGenerator(declarationGenerator: DeclarationGenerator) : De
3839
}
3940

4041
irClass.addMember(
41-
context.symbolTable.declareSimpleFunction(
42+
context.symbolTable.declareSimpleFunctionWithOverrides(
4243
irClass.startOffset, irClass.endOffset,
4344
IrDeclarationOrigin.ENUM_CLASS_SPECIAL_MEMBER,
4445
valuesFunction
@@ -57,7 +58,7 @@ class EnumClassMembersGenerator(declarationGenerator: DeclarationGenerator) : De
5758
}
5859

5960
irClass.addMember(
60-
context.symbolTable.declareSimpleFunction(
61+
context.symbolTable.declareSimpleFunctionWithOverrides(
6162
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
6263
IrDeclarationOrigin.ENUM_CLASS_SPECIAL_MEMBER,
6364
valueOfFunction

compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.ir.expressions.IrBlockBody
2222
import org.jetbrains.kotlin.ir.expressions.IrBody
2323
import org.jetbrains.kotlin.ir.expressions.IrExpression
2424
import org.jetbrains.kotlin.ir.expressions.impl.*
25+
import org.jetbrains.kotlin.ir.util.declareSimpleFunctionWithOverrides
2526
import org.jetbrains.kotlin.psi.*
2627
import org.jetbrains.kotlin.psi.psiUtil.endOffset
2728
import org.jetbrains.kotlin.psi.psiUtil.startOffset
@@ -55,7 +56,7 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
5556
}
5657

5758
fun generateFakeOverrideFunction(functionDescriptor: FunctionDescriptor, ktElement: KtElement): IrFunction =
58-
context.symbolTable.declareSimpleFunction(
59+
context.symbolTable.declareSimpleFunctionWithOverrides(
5960
ktElement.startOffsetOrUndefined, ktElement.endOffsetOrUndefined,
6061
IrDeclarationOrigin.FAKE_OVERRIDE,
6162
functionDescriptor
@@ -70,7 +71,7 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
7071
descriptor: FunctionDescriptor,
7172
generateBody: BodyGenerator.() -> IrBody?
7273
): IrSimpleFunction =
73-
context.symbolTable.declareSimpleFunction(
74+
context.symbolTable.declareSimpleFunctionWithOverrides(
7475
ktFunction.startOffset, ktFunction.endOffset, origin, descriptor
7576
).buildWithScope { irFunction ->
7677
generateFunctionParameterDeclarations(irFunction, ktFunction, ktReceiver)
@@ -91,7 +92,7 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
9192
ktProperty: KtProperty,
9293
ktAccessor: KtPropertyAccessor?
9394
): IrSimpleFunction =
94-
context.symbolTable.declareSimpleFunction(
95+
context.symbolTable.declareSimpleFunctionWithOverrides(
9596
ktAccessor?.startOffset ?: ktProperty.startOffset,
9697
ktAccessor?.endOffset ?: ktProperty.endOffset,
9798
if (ktAccessor != null) IrDeclarationOrigin.DEFINED else IrDeclarationOrigin.DEFAULT_PROPERTY_ACCESSOR,
@@ -110,7 +111,7 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
110111
descriptor: PropertyAccessorDescriptor,
111112
ktParameter: KtParameter
112113
): IrFunction =
113-
context.symbolTable.declareSimpleFunction(
114+
context.symbolTable.declareSimpleFunctionWithOverrides(
114115
ktParameter.startOffsetOrUndefined,
115116
ktParameter.endOffsetOrUndefined,
116117
IrDeclarationOrigin.DEFAULT_PROPERTY_ACCESSOR,

compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeParameter.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.jetbrains.kotlin.ir.declarations
1818

1919
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
20+
import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
2021
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
2122
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
2223
import org.jetbrains.kotlin.name.Name
@@ -34,5 +35,7 @@ interface IrTypeParameter : IrSymbolDeclaration<IrTypeParameterSymbol> {
3435
val index: Int
3536
val upperBounds: List<KotlinType>
3637

38+
val superClassifiers: MutableList<IrClassifierSymbol>
39+
3740
override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrTypeParameter
3841
}

compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeParameterImpl.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,15 @@ package org.jetbrains.kotlin.ir.declarations.impl
1919
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
2020
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
2121
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
22+
import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
2223
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
2324
import org.jetbrains.kotlin.ir.symbols.impl.IrTypeParameterSymbolImpl
2425
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
2526
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
2627
import org.jetbrains.kotlin.name.Name
2728
import org.jetbrains.kotlin.types.KotlinType
2829
import org.jetbrains.kotlin.types.Variance
30+
import org.jetbrains.kotlin.utils.SmartList
2931

3032
class IrTypeParameterImpl(
3133
startOffset: Int,
@@ -56,6 +58,8 @@ class IrTypeParameterImpl(
5658

5759
override val descriptor: TypeParameterDescriptor get() = symbol.descriptor
5860

61+
override val superClassifiers: MutableList<IrClassifierSymbol> = SmartList<IrClassifierSymbol>()
62+
5963
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
6064
visitor.visitTypeParameter(this, data)
6165

compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class DeclarationStubGenerator(
7171
}
7272

7373
fun generateFunctionStub(descriptor: FunctionDescriptor): IrSimpleFunction =
74-
symbolTable.declareSimpleFunction(UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, descriptor.original).also { irFunction ->
74+
symbolTable.declareSimpleFunctionWithOverrides(UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, descriptor.original).also { irFunction ->
7575
generateTypeParameterStubs(descriptor.typeParameters, irFunction)
7676
generateValueParametersStubs(descriptor.valueParameters, irFunction)
7777
}

compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTree.kt

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,8 @@ import org.jetbrains.kotlin.ir.declarations.*
2424
import org.jetbrains.kotlin.ir.declarations.impl.*
2525
import org.jetbrains.kotlin.ir.expressions.*
2626
import org.jetbrains.kotlin.ir.expressions.impl.*
27-
import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl
28-
import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl
29-
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
30-
import org.jetbrains.kotlin.ir.symbols.impl.IrVariableSymbolImpl
27+
import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
28+
import org.jetbrains.kotlin.ir.symbols.impl.*
3129
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
3230
import org.jetbrains.kotlin.types.KotlinType
3331
import java.util.*
@@ -188,7 +186,25 @@ open class DeepCopyIrTree : IrElementTransformerVoid() {
188186
originalTypeParameter.startOffset, originalTypeParameter.endOffset,
189187
mapDeclarationOrigin(originalTypeParameter.origin),
190188
newTypeParameterDescriptor
191-
)
189+
).apply {
190+
for (i in upperBounds.indices) {
191+
val upperBoundClassifier = upperBounds[i].constructor.declarationDescriptor ?: continue
192+
val oldSuperClassifierSymbol = originalTypeParameter.superClassifiers[i]
193+
val newSuperClassifierSymbol =
194+
if (upperBoundClassifier == oldSuperClassifierSymbol.descriptor)
195+
oldSuperClassifierSymbol
196+
else
197+
createUnboundClassifierSymbol(upperBoundClassifier)
198+
superClassifiers.add(newSuperClassifierSymbol)
199+
}
200+
}
201+
202+
protected fun createUnboundClassifierSymbol(classifier: ClassifierDescriptor): IrClassifierSymbol =
203+
when (classifier) {
204+
is TypeParameterDescriptor -> IrTypeParameterSymbolImpl(classifier)
205+
is ClassDescriptor -> IrClassSymbolImpl(classifier)
206+
else -> throw IllegalArgumentException("Unexpected classifier descriptor: $classifier")
207+
}
192208

193209
protected fun copyValueParameter(
194210
originalValueParameter: IrValueParameter,

compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,11 @@ open class DeepCopyIrTreeWithSymbols(private val symbolRemapper: SymbolRemapper)
196196
declaration.startOffset, declaration.endOffset,
197197
mapDeclarationOrigin(declaration.origin),
198198
symbolRemapper.getDeclaredTypeParameter(declaration.symbol)
199-
)
199+
).apply {
200+
declaration.superClassifiers.mapTo(superClassifiers) {
201+
symbolRemapper.getReferencedClassifier(it)
202+
}
203+
}
200204

201205
override fun visitValueParameter(declaration: IrValueParameter): IrValueParameter =
202206
IrValueParameterImpl(

compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DependenciesCollector.kt

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@
1616

1717
package org.jetbrains.kotlin.ir.util
1818

19-
import org.jetbrains.kotlin.descriptors.ClassDescriptor
20-
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
21-
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
22-
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
19+
import org.jetbrains.kotlin.descriptors.*
2320
import org.jetbrains.kotlin.ir.symbols.IrSymbol
2421
import org.jetbrains.kotlin.resolve.DescriptorUtils
2522
import org.jetbrains.kotlin.resolve.descriptorUtil.getAllSuperClassifiers
@@ -42,13 +39,8 @@ class DependenciesCollector {
4239
assert(symbolTable.unboundValueParameters.isEmpty()) { "Unbound value parameters: ${symbolTable.unboundValueParameters}" }
4340
assert(symbolTable.unboundVariables.isEmpty()) { "Unbound variables: ${symbolTable.unboundVariables}" }
4441

45-
for (unboundClass in symbolTable.unboundClasses.toTypedArray()) {
46-
for (superClassifier in unboundClass.descriptor.getAllSuperClassifiers()) {
47-
if (superClassifier is ClassDescriptor) {
48-
symbolTable.referenceClass(superClassifier)
49-
}
50-
}
51-
}
42+
symbolTable.markOverriddenFunctionsForUnboundFunctionsReferenced()
43+
symbolTable.markSuperClassesForUnboundClassesReferenced()
5244

5345
symbolTable.unboundClasses.addTopLevelDeclarations()
5446
symbolTable.unboundConstructors.addTopLevelDeclarations()
@@ -57,14 +49,39 @@ class DependenciesCollector {
5749
symbolTable.unboundSimpleFunctions.addTopLevelDeclarations()
5850
}
5951

60-
private fun Collection<IrSymbol>.addTopLevelDeclarations() {
61-
forEach { addTopLevelDeclaration(it) }
52+
private fun SymbolTable.markOverriddenFunctionsForUnboundFunctionsReferenced() {
53+
for (unboundFunction in unboundSimpleFunctions.toTypedArray()) {
54+
markOverriddenFunctionsReferenced(unboundFunction.descriptor, HashSet())
55+
}
56+
}
57+
58+
private fun SymbolTable.markOverriddenFunctionsReferenced(
59+
function: FunctionDescriptor,
60+
visitedFunctions: MutableSet<FunctionDescriptor>
61+
) {
62+
for (overridden in function.overriddenDescriptors) {
63+
if (overridden !in visitedFunctions) {
64+
visitedFunctions.add(overridden)
65+
referenceFunction(overridden.original)
66+
markOverriddenFunctionsReferenced(overridden, visitedFunctions)
67+
}
68+
}
69+
}
70+
71+
private fun SymbolTable.markSuperClassesForUnboundClassesReferenced() {
72+
for (unboundClass in unboundClasses.toTypedArray()) {
73+
for (superClassifier in unboundClass.descriptor.getAllSuperClassifiers()) {
74+
if (superClassifier is ClassDescriptor) {
75+
referenceClass(superClassifier)
76+
}
77+
}
78+
}
6279
}
6380

64-
fun addTopLevelDeclaration(symbol: IrSymbol) {
65-
val descriptor = symbol.descriptor
66-
val topLevelDeclaration = getTopLevelDeclaration(descriptor)
67-
addTopLevelDescriptor(topLevelDeclaration)
81+
private fun Collection<IrSymbol>.addTopLevelDeclarations() {
82+
forEach {
83+
addTopLevelDescriptor(getTopLevelDeclaration(it.descriptor))
84+
}
6885
}
6986

7087
private fun getTopLevelDeclaration(descriptor: DeclarationDescriptor): DeclarationDescriptor {

compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DumpIrTree.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.ir.SourceManager
2222
import org.jetbrains.kotlin.ir.declarations.*
2323
import org.jetbrains.kotlin.ir.expressions.*
2424
import org.jetbrains.kotlin.ir.symbols.IrBindableSymbol
25+
import org.jetbrains.kotlin.ir.symbols.IrSymbol
2526
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
2627
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
2728
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
@@ -86,6 +87,12 @@ class DumpIrTreeVisitor(out: Appendable) : IrElementVisitor<Unit, String> {
8687
}
8788
}
8889

90+
override fun visitTypeParameter(declaration: IrTypeParameter, data: String) {
91+
declaration.dumpLabeledElementWith(data) {
92+
declaration.superClassifiers.renderDeclarationElementsOrDescriptors("superClassifiers")
93+
}
94+
}
95+
8996
override fun visitSimpleFunction(declaration: IrSimpleFunction, data: String) {
9097
declaration.dumpLabeledElementWith(data) {
9198
declaration.overriddenSymbols.renderDeclarationElementsOrDescriptors("overridden")
@@ -97,9 +104,7 @@ class DumpIrTreeVisitor(out: Appendable) : IrElementVisitor<Unit, String> {
97104
}
98105
}
99106

100-
private fun <D : DeclarationDescriptor, B : IrSymbolOwner> Collection<IrBindableSymbol<D, B>>.renderDeclarationElementsOrDescriptors(
101-
caption: String
102-
) {
107+
private fun Collection<IrSymbol>.renderDeclarationElementsOrDescriptors(caption: String) {
103108
if (isNotEmpty()) {
104109
indented(caption) {
105110
for (symbol in this) {
@@ -109,7 +114,7 @@ class DumpIrTreeVisitor(out: Appendable) : IrElementVisitor<Unit, String> {
109114
}
110115
}
111116

112-
private fun <D : DeclarationDescriptor, B : IrSymbolOwner> IrBindableSymbol<D, B>.renderDeclarationElementOrDescriptor() {
117+
private fun IrSymbol.renderDeclarationElementOrDescriptor() {
113118
if (isBound)
114119
owner.render()
115120
else

0 commit comments

Comments
 (0)