Generate annotations for declarations in psi2ir
This commit is contained in:
@@ -92,6 +92,7 @@ open class DeepCopyIrTree : IrElementTransformerVoid() {
|
||||
mapClassDeclaration(declaration.descriptor),
|
||||
declaration.declarations.map { it.transform() }
|
||||
).apply {
|
||||
transformAnnotations(declaration)
|
||||
thisReceiver = declaration.thisReceiver?.withDescriptor(descriptor.thisAsReceiverParameter)
|
||||
transformTypeParameters(declaration, descriptor.declaredTypeParameters)
|
||||
|
||||
@@ -117,7 +118,9 @@ open class DeepCopyIrTree : IrElementTransformerVoid() {
|
||||
declaration.startOffset, declaration.endOffset,
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
mapTypeAliasDeclaration(declaration.descriptor)
|
||||
)
|
||||
).apply {
|
||||
transformAnnotations(declaration)
|
||||
}
|
||||
|
||||
override fun visitSimpleFunction(declaration: IrSimpleFunction): IrFunction =
|
||||
IrFunctionImpl(
|
||||
@@ -126,6 +129,7 @@ open class DeepCopyIrTree : IrElementTransformerVoid() {
|
||||
mapFunctionDeclaration(declaration.descriptor),
|
||||
declaration.body?.transform()
|
||||
).transformParameters(declaration).apply {
|
||||
transformAnnotations(declaration)
|
||||
descriptor.overriddenDescriptors.mapIndexedTo(overriddenSymbols) { index, overriddenDescriptor ->
|
||||
val oldOverriddenSymbol = declaration.overriddenSymbols.getOrNull(index)
|
||||
if (overriddenDescriptor.original == oldOverriddenSymbol?.descriptor?.original)
|
||||
@@ -141,7 +145,9 @@ open class DeepCopyIrTree : IrElementTransformerVoid() {
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
mapConstructorDeclaration(declaration.descriptor),
|
||||
declaration.body?.transform()
|
||||
).transformParameters(declaration)
|
||||
).transformParameters(declaration).apply {
|
||||
transformAnnotations(declaration)
|
||||
}
|
||||
|
||||
protected fun <T : IrTypeParametersContainer> T.transformTypeParameters(
|
||||
original: T,
|
||||
@@ -183,6 +189,10 @@ open class DeepCopyIrTree : IrElementTransformerVoid() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun IrAnnotationContainer.transformAnnotations(original: IrAnnotationContainer) {
|
||||
original.annotations.mapTo(annotations) { it.transform() }
|
||||
}
|
||||
|
||||
protected fun copyTypeParameter(
|
||||
originalTypeParameter: IrTypeParameter,
|
||||
newTypeParameterDescriptor: TypeParameterDescriptor
|
||||
@@ -220,7 +230,9 @@ open class DeepCopyIrTree : IrElementTransformerVoid() {
|
||||
mapDeclarationOrigin(originalValueParameter.origin),
|
||||
newParameterDescriptor,
|
||||
originalValueParameter.defaultValue?.transform()
|
||||
)
|
||||
).apply {
|
||||
transformAnnotations(originalValueParameter)
|
||||
}
|
||||
|
||||
// TODO visitTypeParameter
|
||||
// TODO visitValueParameter
|
||||
@@ -234,7 +246,9 @@ open class DeepCopyIrTree : IrElementTransformerVoid() {
|
||||
declaration.backingField?.transform(),
|
||||
declaration.getter?.transform(),
|
||||
declaration.setter?.transform()
|
||||
)
|
||||
).apply {
|
||||
transformAnnotations(declaration)
|
||||
}
|
||||
|
||||
override fun visitField(declaration: IrField): IrField =
|
||||
IrFieldImpl(
|
||||
@@ -242,7 +256,9 @@ open class DeepCopyIrTree : IrElementTransformerVoid() {
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
mapPropertyDeclaration(declaration.descriptor),
|
||||
declaration.initializer?.transform()
|
||||
)
|
||||
).apply {
|
||||
transformAnnotations(declaration)
|
||||
}
|
||||
|
||||
override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty): IrLocalDelegatedProperty =
|
||||
IrLocalDelegatedPropertyImpl(
|
||||
@@ -277,7 +293,9 @@ open class DeepCopyIrTree : IrElementTransformerVoid() {
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
mapVariableDeclaration(declaration.descriptor),
|
||||
declaration.initializer?.transform()
|
||||
)
|
||||
).apply {
|
||||
transformAnnotations(declaration)
|
||||
}
|
||||
|
||||
override fun visitBody(body: IrBody): IrBody =
|
||||
throw IllegalArgumentException("Unsupported body type: $body")
|
||||
|
||||
@@ -86,6 +86,7 @@ open class DeepCopyIrTreeWithSymbols(private val symbolRemapper: SymbolRemapper)
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
symbolRemapper.getDeclaredClass(declaration.symbol)
|
||||
).apply {
|
||||
transformAnnotations(declaration)
|
||||
declaration.superClasses.mapTo(superClasses) {
|
||||
symbolRemapper.getReferencedClass(it)
|
||||
}
|
||||
@@ -99,7 +100,9 @@ open class DeepCopyIrTreeWithSymbols(private val symbolRemapper: SymbolRemapper)
|
||||
declaration.startOffset, declaration.endOffset,
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
declaration.descriptor
|
||||
)
|
||||
).apply {
|
||||
transformAnnotations(declaration)
|
||||
}
|
||||
|
||||
override fun visitSimpleFunction(declaration: IrSimpleFunction): IrSimpleFunction =
|
||||
IrFunctionImpl(
|
||||
@@ -124,6 +127,7 @@ open class DeepCopyIrTreeWithSymbols(private val symbolRemapper: SymbolRemapper)
|
||||
|
||||
private fun <T : IrFunction> T.transformFunctionChildren(declaration: T): T =
|
||||
apply {
|
||||
transformAnnotations(declaration)
|
||||
declaration.typeParameters.transformTo(typeParameters)
|
||||
dispatchReceiverParameter = declaration.dispatchReceiverParameter?.transform()
|
||||
extensionReceiverParameter = declaration.extensionReceiverParameter?.transform()
|
||||
@@ -131,6 +135,10 @@ open class DeepCopyIrTreeWithSymbols(private val symbolRemapper: SymbolRemapper)
|
||||
body = declaration.body?.transform()
|
||||
}
|
||||
|
||||
private fun IrDeclaration.transformAnnotations(declaration: IrDeclaration) {
|
||||
declaration.annotations.transformTo(annotations)
|
||||
}
|
||||
|
||||
override fun visitProperty(declaration: IrProperty): IrProperty =
|
||||
IrPropertyImpl(
|
||||
declaration.startOffset, declaration.endOffset,
|
||||
@@ -140,7 +148,9 @@ open class DeepCopyIrTreeWithSymbols(private val symbolRemapper: SymbolRemapper)
|
||||
declaration.backingField?.transform(),
|
||||
declaration.getter?.transform(),
|
||||
declaration.setter?.transform()
|
||||
)
|
||||
).apply {
|
||||
transformAnnotations(declaration)
|
||||
}
|
||||
|
||||
override fun visitField(declaration: IrField): IrField =
|
||||
IrFieldImpl(
|
||||
@@ -148,6 +158,7 @@ open class DeepCopyIrTreeWithSymbols(private val symbolRemapper: SymbolRemapper)
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
symbolRemapper.getDeclaredField(declaration.symbol)
|
||||
).apply {
|
||||
transformAnnotations(declaration)
|
||||
initializer = declaration.initializer?.transform()
|
||||
}
|
||||
|
||||
@@ -186,6 +197,7 @@ open class DeepCopyIrTreeWithSymbols(private val symbolRemapper: SymbolRemapper)
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
symbolRemapper.getDeclaredVariable(declaration.symbol)
|
||||
).apply {
|
||||
transformAnnotations(declaration)
|
||||
initializer = declaration.initializer?.transform()
|
||||
}
|
||||
|
||||
@@ -206,6 +218,7 @@ open class DeepCopyIrTreeWithSymbols(private val symbolRemapper: SymbolRemapper)
|
||||
mapDeclarationOrigin(declaration.origin),
|
||||
symbolRemapper.getDeclaredValueParameter(declaration.symbol)
|
||||
).apply {
|
||||
transformAnnotations(declaration)
|
||||
defaultValue = declaration.defaultValue?.transform()
|
||||
}
|
||||
|
||||
|
||||
@@ -53,7 +53,12 @@ class DumpIrTreeVisitor(out: Appendable) : IrElementVisitor<Unit, String> {
|
||||
}
|
||||
|
||||
override fun visitElement(element: IrElement, data: String) {
|
||||
element.dumpLabeledSubTree(data)
|
||||
element.dumpLabeledElementWith(data) {
|
||||
if (element is IrAnnotationContainer) {
|
||||
dumpAnnotations(element)
|
||||
}
|
||||
element.acceptChildren(this@DumpIrTreeVisitor, "")
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitModuleFragment(declaration: IrModuleFragment, data: String) {
|
||||
@@ -79,6 +84,7 @@ class DumpIrTreeVisitor(out: Appendable) : IrElementVisitor<Unit, String> {
|
||||
|
||||
override fun visitClass(declaration: IrClass, data: String) {
|
||||
declaration.dumpLabeledElementWith(data) {
|
||||
dumpAnnotations(declaration)
|
||||
declaration.thisReceiver?.accept(this, "\$this")
|
||||
declaration.superClasses.renderDeclarationElementsOrDescriptors("superClasses")
|
||||
declaration.typeParameters.dumpElements()
|
||||
@@ -88,12 +94,14 @@ class DumpIrTreeVisitor(out: Appendable) : IrElementVisitor<Unit, String> {
|
||||
|
||||
override fun visitTypeParameter(declaration: IrTypeParameter, data: String) {
|
||||
declaration.dumpLabeledElementWith(data) {
|
||||
dumpAnnotations(declaration)
|
||||
declaration.superClassifiers.renderDeclarationElementsOrDescriptors("superClassifiers")
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitSimpleFunction(declaration: IrSimpleFunction, data: String) {
|
||||
declaration.dumpLabeledElementWith(data) {
|
||||
dumpAnnotations(declaration)
|
||||
declaration.overriddenSymbols.renderDeclarationElementsOrDescriptors("overridden")
|
||||
declaration.typeParameters.dumpElements()
|
||||
declaration.dispatchReceiverParameter?.accept(this, "\$this")
|
||||
@@ -103,6 +111,14 @@ class DumpIrTreeVisitor(out: Appendable) : IrElementVisitor<Unit, String> {
|
||||
}
|
||||
}
|
||||
|
||||
private fun dumpAnnotations(element: IrAnnotationContainer) {
|
||||
if (element.annotations.isNotEmpty()) {
|
||||
indented("annotations") {
|
||||
element.annotations.dumpElements()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun Collection<IrSymbol>.renderDeclarationElementsOrDescriptors(caption: String) {
|
||||
if (isNotEmpty()) {
|
||||
indented(caption) {
|
||||
@@ -114,19 +130,19 @@ class DumpIrTreeVisitor(out: Appendable) : IrElementVisitor<Unit, String> {
|
||||
}
|
||||
|
||||
private fun IrSymbol.renderDeclarationElementOrDescriptor(label: String? = null) {
|
||||
if (isBound)
|
||||
owner.render(label)
|
||||
else {
|
||||
if (label != null) {
|
||||
when {
|
||||
isBound ->
|
||||
owner.render(label)
|
||||
label != null ->
|
||||
printer.println("$label: ", "UNBOUND: ", DescriptorRenderer.COMPACT.render(descriptor))
|
||||
} else {
|
||||
else ->
|
||||
printer.println("UNBOUND: ", DescriptorRenderer.COMPACT.render(descriptor))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitConstructor(declaration: IrConstructor, data: String) {
|
||||
declaration.dumpLabeledElementWith(data) {
|
||||
dumpAnnotations(declaration)
|
||||
declaration.typeParameters.dumpElements()
|
||||
declaration.dispatchReceiverParameter?.accept(this, "\$outer")
|
||||
declaration.valueParameters.dumpElements()
|
||||
@@ -136,6 +152,7 @@ class DumpIrTreeVisitor(out: Appendable) : IrElementVisitor<Unit, String> {
|
||||
|
||||
override fun visitProperty(declaration: IrProperty, data: String) {
|
||||
declaration.dumpLabeledElementWith(data) {
|
||||
dumpAnnotations(declaration)
|
||||
declaration.typeParameters.dumpElements()
|
||||
declaration.backingField?.accept(this, "")
|
||||
declaration.getter?.accept(this, "")
|
||||
@@ -156,6 +173,7 @@ class DumpIrTreeVisitor(out: Appendable) : IrElementVisitor<Unit, String> {
|
||||
|
||||
override fun visitEnumEntry(declaration: IrEnumEntry, data: String) {
|
||||
declaration.dumpLabeledElementWith(data) {
|
||||
dumpAnnotations(declaration)
|
||||
declaration.initializerExpression?.accept(this, "init")
|
||||
declaration.correspondingClass?.accept(this, "class")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user