[JVM_IR] Remove line numbers from delegated member functions.

This fixes smart step into for delegated member functions.
Additionally, we align on the string "memberFunctionName(...)"
for expression non-null checks for both JVM_IR and JVM
backends.
This commit is contained in:
Mads Ager
2020-09-17 14:14:48 +02:00
committed by Alexander Udalov
parent eea4ff33a0
commit 05c662ec55
8 changed files with 20 additions and 13 deletions
@@ -17,7 +17,9 @@ import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.declarations.IrDeclaration 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.IrFile
import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.IrCompositeImpl import org.jetbrains.kotlin.ir.expressions.impl.IrCompositeImpl
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol 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)) irNot(lowerInstanceOf(expression.argument.transformVoid(), expression.typeOperand))
IrTypeOperator.IMPLICIT_NOTNULL -> { IrTypeOperator.IMPLICIT_NOTNULL -> {
val (startOffset, endOffset) = expression.extents() val owner = scope.scopeOwnerSymbol.owner
val source = sourceViewFor(parent as IrDeclaration).subSequence(startOffset, endOffset).toString() 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 -> irLetS(expression.argument.transformVoid(), irType = context.irBuiltIns.anyNType) { valueSymbol ->
irComposite(resultType = expression.type) { irComposite(resultType = expression.type) {
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.psi2ir.generators
import org.jetbrains.kotlin.backend.common.CodegenUtil import org.jetbrains.kotlin.backend.common.CodegenUtil
import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.descriptors.IrImplementingDelegateDescriptorImpl import org.jetbrains.kotlin.ir.descriptors.IrImplementingDelegateDescriptorImpl
import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.expressions.IrBlockBody
@@ -305,7 +306,7 @@ class ClassGenerator(
delegateToDescriptor: FunctionDescriptor delegateToDescriptor: FunctionDescriptor
): IrSimpleFunction = ): IrSimpleFunction =
context.symbolTable.declareSimpleFunctionWithOverrides( context.symbolTable.declareSimpleFunctionWithOverrides(
irDelegate.startOffset, irDelegate.endOffset, UNDEFINED_OFFSET, UNDEFINED_OFFSET,
IrDeclarationOrigin.DELEGATED_MEMBER, IrDeclarationOrigin.DELEGATED_MEMBER,
delegatedDescriptor delegatedDescriptor
).buildWithScope { irFunction -> ).buildWithScope { irFunction ->
@@ -323,8 +324,8 @@ class ClassGenerator(
delegateToDescriptor: FunctionDescriptor, delegateToDescriptor: FunctionDescriptor,
irDelegatedFunction: IrSimpleFunction irDelegatedFunction: IrSimpleFunction
): IrBlockBody { ): IrBlockBody {
val startOffset = irDelegate.startOffset val startOffset = UNDEFINED_OFFSET
val endOffset = irDelegate.endOffset val endOffset = UNDEFINED_OFFSET
val irBlockBody = context.irFactory.createBlockBody(startOffset, endOffset) val irBlockBody = context.irFactory.createBlockBody(startOffset, endOffset)
@@ -7,4 +7,4 @@ interface D {
val x: Int val x: Int
} }
class C(d: D) : D by <!ACCIDENTAL_OVERRIDE!>d<!>, B class <!ACCIDENTAL_OVERRIDE!>C(d: D)<!> : D by d, B
@@ -9,7 +9,7 @@ interface Bar<T> {
fun foo(l: List<T>) fun foo(l: List<T>)
} }
class Baz(f: Foo<String>, b: Bar<Int>) : class <!CONFLICTING_JVM_DECLARATIONS!>Baz(f: Foo<String>, b: Bar<Int>)<!> :
Foo<String> by <!CONFLICTING_JVM_DECLARATIONS!>f<!>, Foo<String> by f,
Bar<Int> by <!CONFLICTING_JVM_DECLARATIONS!>b<!> { Bar<Int> by b {
} }
@@ -5,6 +5,6 @@ interface Foo<T> {
fun foo(l: List<T>) fun foo(l: List<T>)
} }
class Bar(f: Foo<String>): Foo<String> by <!CONFLICTING_JVM_DECLARATIONS!>f<!> { class <!CONFLICTING_JVM_DECLARATIONS!>Bar(f: Foo<String>)<!>: Foo<String> by f {
<!CONFLICTING_JVM_DECLARATIONS!>fun foo(l: List<Int>)<!> {} <!CONFLICTING_JVM_DECLARATIONS!>fun foo(l: List<Int>)<!> {}
} }
@@ -7,7 +7,7 @@ interface Foo<T> {
} }
} }
class Bar(f: Foo<String>): Foo<String> by <!CONFLICTING_JVM_DECLARATIONS!>f<!> { class <!CONFLICTING_JVM_DECLARATIONS!>Bar(f: Foo<String>)<!>: Foo<String> by f {
<!CONFLICTING_JVM_DECLARATIONS!>fun foo(l: List<Int>)<!> {} <!CONFLICTING_JVM_DECLARATIONS!>fun foo(l: List<Int>)<!> {}
} }
@@ -9,6 +9,6 @@ interface B {
fun foo(l: List<Int>) {} fun foo(l: List<Int>) {}
} }
class C(f: A<String>): A<String> by <!ACCIDENTAL_OVERRIDE!>f<!>, B class <!ACCIDENTAL_OVERRIDE!>C(f: A<String>)<!>: A<String> by f, B
<!DELEGATED_MEMBER_HIDES_SUPERTYPE_OVERRIDE!>class D<!>(f: A<Int>): A<Int> by f, B <!DELEGATED_MEMBER_HIDES_SUPERTYPE_OVERRIDE!>class D<!>(f: A<Int>): A<Int> by f, B
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
LineBreakpoint created at smartStepIntoWithDelegates.kt:24 LineBreakpoint created at smartStepIntoWithDelegates.kt:24
LineBreakpoint created at smartStepIntoWithDelegates.kt:32 LineBreakpoint created at smartStepIntoWithDelegates.kt:32
LineBreakpoint created at smartStepIntoWithDelegates.kt:40 LineBreakpoint created at smartStepIntoWithDelegates.kt:40