diff --git a/build.gradle.kts b/build.gradle.kts index 2bcddfc2724..8254a96dbc6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - kotlin("jvm") version "1.4-M2" apply false + kotlin("jvm") version "1.4.0" apply false id("org.jetbrains.dokka") version "0.10.0" apply false id("com.gradle.plugin-publish") version "0.11.0" apply false } @@ -13,6 +13,5 @@ subprojects { repositories { mavenCentral() jcenter() - maven("https://dl.bintray.com/kotlin/kotlin-eap") } } diff --git a/kotlin-power-assert/src/main/kotlin/com/bnorm/power/AssertTree.kt b/kotlin-power-assert/src/main/kotlin/com/bnorm/power/AssertTree.kt index 679adff5cc9..ae3ce22c247 100644 --- a/kotlin-power-assert/src/main/kotlin/com/bnorm/power/AssertTree.kt +++ b/kotlin-power-assert/src/main/kotlin/com/bnorm/power/AssertTree.kt @@ -16,13 +16,14 @@ package com.bnorm.power -import org.jetbrains.kotlin.backend.common.deepCopyWithVariables import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrConst import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin import org.jetbrains.kotlin.ir.expressions.IrWhen +import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols import org.jetbrains.kotlin.ir.visitors.IrElementVisitor sealed class Node { @@ -67,10 +68,10 @@ class ExpressionNode( _expressions.add(expression) } - fun getExpressionsCopy(): List { + fun getExpressionsCopy(initialParent: IrDeclarationParent?): List { // Return a copy of all the expression by creating a deep copy of the head // expression and running back through the assertion tree builder - val headCopy = _expressions.first().deepCopyWithVariables() + val headCopy = _expressions.first().deepCopyWithSymbols(initialParent) return (buildAssertTree(headCopy).children.single() as ExpressionNode)._expressions } diff --git a/kotlin-power-assert/src/main/kotlin/com/bnorm/power/PowerAssertCallTransformer.kt b/kotlin-power-assert/src/main/kotlin/com/bnorm/power/PowerAssertCallTransformer.kt index f4eb07bcea3..66b60fb5783 100644 --- a/kotlin-power-assert/src/main/kotlin/com/bnorm/power/PowerAssertCallTransformer.kt +++ b/kotlin-power-assert/src/main/kotlin/com/bnorm/power/PowerAssertCallTransformer.kt @@ -167,6 +167,7 @@ class PowerAssertCallTransformer( isStringFunction(parameters[1].type) -> { object : FunctionDelegate { override fun buildCall(builder: IrBuilderWithScope, message: IrExpression): IrExpression = with(builder) { + val scope = this val lambda = buildFun { name = Name.special("") returnType = context.irBuiltIns.stringType @@ -177,6 +178,7 @@ class PowerAssertCallTransformer( body = bodyBuilder.irBlockBody { +irReturn(message) } + parent = scope.parent } val expression = IrFunctionExpressionImpl(-1, -1, context.irBuiltIns.stringType, lambda, IrStatementOrigin.LAMBDA) irCall(overload, type = overload.descriptor.returnType!!.toIrType()).apply { diff --git a/kotlin-power-assert/src/main/kotlin/com/bnorm/power/PowerAssertGenerator.kt b/kotlin-power-assert/src/main/kotlin/com/bnorm/power/PowerAssertGenerator.kt index 74115ca5499..375b6d3bbf9 100644 --- a/kotlin-power-assert/src/main/kotlin/com/bnorm/power/PowerAssertGenerator.kt +++ b/kotlin-power-assert/src/main/kotlin/com/bnorm/power/PowerAssertGenerator.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.ir.builders.IrStatementsBuilder import org.jetbrains.kotlin.ir.builders.irBlock import org.jetbrains.kotlin.ir.builders.irGet import org.jetbrains.kotlin.ir.builders.irTemporary +import org.jetbrains.kotlin.ir.builders.parent import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrGetValue import org.jetbrains.kotlin.ir.expressions.IrWhen @@ -75,13 +76,13 @@ abstract class PowerAssertGenerator { node: ExpressionNode, thenPart: IrStatementsBuilder<*>.(subStack: MutableList) -> IrExpression ): IrWhen { - val expressions = node.getExpressionsCopy() + val expressions = node.getExpressionsCopy(this.parent) val stackTransformer = StackBuilder(this, stack, expressions) val transformed = expressions.first().transform(stackTransformer, null) return irIfThen(irNot(transformed), thenPart(stack.toMutableList())) } - inner class StackBuilder( + class StackBuilder( private val builder: IrStatementsBuilder<*>, private val stack: MutableList, private val transform: List