diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt index 10fa6c91c5a..6b7c69ddab9 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt @@ -17,7 +17,9 @@ import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.IrDeclaration +import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrCompositeImpl import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol @@ -139,8 +141,13 @@ private class TypeOperatorLowering(private val context: JvmBackendContext) : Fil irNot(lowerInstanceOf(expression.argument.transformVoid(), expression.typeOperand)) IrTypeOperator.IMPLICIT_NOTNULL -> { - val (startOffset, endOffset) = expression.extents() - val source = sourceViewFor(parent as IrDeclaration).subSequence(startOffset, endOffset).toString() + val owner = scope.scopeOwnerSymbol.owner + val source = if (owner is IrFunction && owner.origin == IrDeclarationOrigin.DELEGATED_MEMBER) { + "${owner.name.asString()}(...)" + } else { + val (startOffset, endOffset) = expression.extents() + sourceViewFor(parent as IrDeclaration).subSequence(startOffset, endOffset).toString() + } irLetS(expression.argument.transformVoid(), irType = context.irBuiltIns.anyNType) { valueSymbol -> irComposite(resultType = expression.type) { diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt index 4edee3f4d9a..c64c4023ed8 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.psi2ir.generators import org.jetbrains.kotlin.backend.common.CodegenUtil import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.descriptors.IrImplementingDelegateDescriptorImpl import org.jetbrains.kotlin.ir.expressions.IrBlockBody @@ -305,7 +306,7 @@ class ClassGenerator( delegateToDescriptor: FunctionDescriptor ): IrSimpleFunction = context.symbolTable.declareSimpleFunctionWithOverrides( - irDelegate.startOffset, irDelegate.endOffset, + UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrDeclarationOrigin.DELEGATED_MEMBER, delegatedDescriptor ).buildWithScope { irFunction -> @@ -323,8 +324,8 @@ class ClassGenerator( delegateToDescriptor: FunctionDescriptor, irDelegatedFunction: IrSimpleFunction ): IrBlockBody { - val startOffset = irDelegate.startOffset - val endOffset = irDelegate.endOffset + val startOffset = UNDEFINED_OFFSET + val endOffset = UNDEFINED_OFFSET val irBlockBody = context.irFactory.createBlockBody(startOffset, endOffset) diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/delegatedFunctionOverriddenByProperty_ir.kt b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/delegatedFunctionOverriddenByProperty_ir.kt index 6102ff4cb74..3bb7b70c3c3 100644 --- a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/delegatedFunctionOverriddenByProperty_ir.kt +++ b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/accidentalOverrides/delegatedFunctionOverriddenByProperty_ir.kt @@ -7,4 +7,4 @@ interface D { val x: Int } -class C(d: D) : D by d, B \ No newline at end of file +class C(d: D) : D by d, B \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/erasure/delegateToTwoTraits_ir.kt b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/erasure/delegateToTwoTraits_ir.kt index cf48fc934c0..6912654a04b 100644 --- a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/erasure/delegateToTwoTraits_ir.kt +++ b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/erasure/delegateToTwoTraits_ir.kt @@ -9,7 +9,7 @@ interface Bar { fun foo(l: List) } -class Baz(f: Foo, b: Bar) : - Foo by f, - Bar by b { +class Baz(f: Foo, b: Bar) : + Foo by f, + Bar by b { } \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/erasure/delegationAndOwnMethod_ir.kt b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/erasure/delegationAndOwnMethod_ir.kt index 0fa4c2bb896..5fac2b426fe 100644 --- a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/erasure/delegationAndOwnMethod_ir.kt +++ b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/erasure/delegationAndOwnMethod_ir.kt @@ -5,6 +5,6 @@ interface Foo { fun foo(l: List) } -class Bar(f: Foo): Foo by f { +class Bar(f: Foo): Foo by f { fun foo(l: List) {} } \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/erasure/delegationToTraitImplAndOwnMethod_ir.kt b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/erasure/delegationToTraitImplAndOwnMethod_ir.kt index 94ad1c9da35..9757a6ff8b8 100644 --- a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/erasure/delegationToTraitImplAndOwnMethod_ir.kt +++ b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/erasure/delegationToTraitImplAndOwnMethod_ir.kt @@ -7,7 +7,7 @@ interface Foo { } } -class Bar(f: Foo): Foo by f { +class Bar(f: Foo): Foo by f { fun foo(l: List) {} } diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/erasure/superTraitAndDelegationToTraitImpl_ir.kt b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/erasure/superTraitAndDelegationToTraitImpl_ir.kt index 21e42f83e13..8bb10a9d25f 100644 --- a/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/erasure/superTraitAndDelegationToTraitImpl_ir.kt +++ b/compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/erasure/superTraitAndDelegationToTraitImpl_ir.kt @@ -9,6 +9,6 @@ interface B { fun foo(l: List) {} } -class C(f: A): A by f, B +class C(f: A): A by f, B class D(f: A): A by f, B \ No newline at end of file diff --git a/idea/jvm-debugger/jvm-debugger-test/testData/stepping/custom/smartStepIntoWithDelegates.out b/idea/jvm-debugger/jvm-debugger-test/testData/stepping/custom/smartStepIntoWithDelegates.out index c07cd295ce5..67a684b8be3 100644 --- a/idea/jvm-debugger/jvm-debugger-test/testData/stepping/custom/smartStepIntoWithDelegates.out +++ b/idea/jvm-debugger/jvm-debugger-test/testData/stepping/custom/smartStepIntoWithDelegates.out @@ -1,4 +1,3 @@ -// IGNORE_BACKEND: JVM_IR LineBreakpoint created at smartStepIntoWithDelegates.kt:24 LineBreakpoint created at smartStepIntoWithDelegates.kt:32 LineBreakpoint created at smartStepIntoWithDelegates.kt:40