From d5feb2d6f4e5e3af88f2ebefdd9b1401de0ac032 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Thu, 4 May 2017 13:51:17 +0300 Subject: [PATCH] Deep copy fixes + sanitize file names for module dumps --- .../src/org/jetbrains/kotlin/ir/util/DeepCopyIrTree.kt | 6 +++++- ...ns module>.txt => extFunInvokeAsFun__builtinsmodule.txt} | 0 ...e__.txt => simple__builtinsmodule.txt} | 0 .../tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt | 5 +++-- 4 files changed, 8 insertions(+), 3 deletions(-) rename compiler/testData/ir/irText/expressions/{extFunInvokeAsFun__.txt => extFunInvokeAsFun__builtinsmodule.txt} (100%) rename compiler/testData/ir/irText/stubs/{simple__.txt => simple__builtinsmodule.txt} (100%) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTree.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTree.kt index 01138bcf583..abf4cab4f4b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTree.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTree.kt @@ -94,9 +94,13 @@ open class DeepCopyIrTree : IrElementTransformerVoid() { mapClassDeclaration(declaration.descriptor), declaration.declarations.map { it.transform() } ).apply { + thisReceiver = declaration.thisReceiver?.withDescriptor(descriptor.thisAsReceiverParameter) transformTypeParameters(declaration, descriptor.declaredTypeParameters) } + private fun IrValueParameter.withDescriptor(newDescriptor: ParameterDescriptor) = + IrValueParameterImpl(startOffset, endOffset, origin, newDescriptor, defaultValue?.transform()) + override fun visitTypeAlias(declaration: IrTypeAlias): IrTypeAlias = IrTypeAliasImpl( declaration.startOffset, declaration.endOffset, @@ -421,7 +425,7 @@ open class DeepCopyIrTree : IrElementTransformerVoid() { newProperty, newFieldSymbol, newGetterSymbol, newSetterSymbol, expression.transformTypeArguments(newProperty), mapStatementOrigin(expression.origin) - ) + ).transformValueArguments(expression) } override fun visitLocalDelegatedPropertyReference(expression: IrLocalDelegatedPropertyReference): IrExpression { diff --git a/compiler/testData/ir/irText/expressions/extFunInvokeAsFun__.txt b/compiler/testData/ir/irText/expressions/extFunInvokeAsFun__builtinsmodule.txt similarity index 100% rename from compiler/testData/ir/irText/expressions/extFunInvokeAsFun__.txt rename to compiler/testData/ir/irText/expressions/extFunInvokeAsFun__builtinsmodule.txt diff --git a/compiler/testData/ir/irText/stubs/simple__.txt b/compiler/testData/ir/irText/stubs/simple__builtinsmodule.txt similarity index 100% rename from compiler/testData/ir/irText/stubs/simple__.txt rename to compiler/testData/ir/irText/stubs/simple__builtinsmodule.txt diff --git a/compiler/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt b/compiler/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt index d9b62432989..c6b2a56c91e 100644 --- a/compiler/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt +++ b/compiler/tests/org/jetbrains/kotlin/ir/AbstractIrTextTestCase.kt @@ -53,7 +53,8 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() { private fun doTestIrModuleDependencies(wholeFile: File, irModule: IrModuleFragment) { irModule.dependencyModules.forEach { irDependencyModule -> val actual = irDependencyModule.dump() - val expectedFileName = wholeFile.absolutePath.replace(".kt", "__${irDependencyModule.descriptor.name.asString()}.txt") + val sanitizedModuleName = StringUtil.sanitizeJavaIdentifier(irDependencyModule.descriptor.name.asString()) + val expectedFileName = wholeFile.absolutePath.replace(".kt", "__$sanitizedModuleName.txt") KotlinTestUtils.assertEqualsToFile(File(expectedFileName), actual) } } @@ -83,7 +84,7 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() { val irFileCopyOld = irFile.deepCopyOld() val copiedTreesOld = irFileCopyOld.dumpTreesFromLineNumber(irTreeFileLabel.lineNumber) - TestCase.assertEquals("IR dump mismatch after old deep copy", actualTrees, copiedTrees) + TestCase.assertEquals("IR dump mismatch after old deep copy", actualTrees, copiedTreesOld) } try {