Descriptors in calls are substituted,
and symbols refer to the original descriptors.
This commit is contained in:
+8
-2
@@ -189,15 +189,21 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen
|
|||||||
): PropertyLValueBase {
|
): PropertyLValueBase {
|
||||||
val superQualifierSymbol = superQualifier?.let { context.symbolTable.referenceClass(it) }
|
val superQualifierSymbol = superQualifier?.let { context.symbolTable.referenceClass(it) }
|
||||||
|
|
||||||
val getterSymbol = descriptor.getter?.let { context.symbolTable.referenceFunction(it) }
|
val getterDescriptor = descriptor.getter
|
||||||
val setterSymbol = descriptor.setter?.let { context.symbolTable.referenceFunction(it) }
|
val getterSymbol = getterDescriptor?.let { context.symbolTable.referenceFunction(it.original) }
|
||||||
|
|
||||||
|
val setterDescriptor = descriptor.setter
|
||||||
|
val setterSymbol = setterDescriptor?.let { context.symbolTable.referenceFunction(it.original) }
|
||||||
|
|
||||||
return if (getterSymbol != null || setterSymbol != null) {
|
return if (getterSymbol != null || setterSymbol != null) {
|
||||||
AccessorPropertyLValue(
|
AccessorPropertyLValue(
|
||||||
scope,
|
scope,
|
||||||
ktExpression.startOffset, ktExpression.endOffset, origin,
|
ktExpression.startOffset, ktExpression.endOffset, origin,
|
||||||
descriptor.type,
|
descriptor.type,
|
||||||
getterSymbol,
|
getterSymbol,
|
||||||
|
getterDescriptor,
|
||||||
setterSymbol,
|
setterSymbol,
|
||||||
|
setterDescriptor,
|
||||||
typeArguments,
|
typeArguments,
|
||||||
propertyReceiver,
|
propertyReceiver,
|
||||||
superQualifierSymbol
|
superQualifierSymbol
|
||||||
|
|||||||
@@ -135,10 +135,11 @@ class CallGenerator(statementGenerator: StatementGenerator): StatementGeneratorE
|
|||||||
|
|
||||||
val getterDescriptor = descriptor.getter
|
val getterDescriptor = descriptor.getter
|
||||||
if (getterDescriptor != null) {
|
if (getterDescriptor != null) {
|
||||||
val getterSymbol = context.symbolTable.referenceFunction(getterDescriptor)
|
val getterSymbol = context.symbolTable.referenceFunction(getterDescriptor.original)
|
||||||
IrGetterCallImpl(
|
IrGetterCallImpl(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
getterSymbol,
|
getterSymbol,
|
||||||
|
getterDescriptor,
|
||||||
getTypeArguments(call.original),
|
getTypeArguments(call.original),
|
||||||
dispatchReceiverValue?.load(),
|
dispatchReceiverValue?.load(),
|
||||||
extensionReceiverValue?.load(),
|
extensionReceiverValue?.load(),
|
||||||
|
|||||||
+6
-3
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.psi2ir.intermediate
|
package org.jetbrains.kotlin.psi2ir.intermediate
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||||
import org.jetbrains.kotlin.ir.builders.Scope
|
import org.jetbrains.kotlin.ir.builders.Scope
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
@@ -112,7 +113,9 @@ class AccessorPropertyLValue(
|
|||||||
origin: IrStatementOrigin?,
|
origin: IrStatementOrigin?,
|
||||||
type: KotlinType,
|
type: KotlinType,
|
||||||
val getter: IrFunctionSymbol?,
|
val getter: IrFunctionSymbol?,
|
||||||
|
val getterDescriptor: FunctionDescriptor?,
|
||||||
val setter: IrFunctionSymbol?,
|
val setter: IrFunctionSymbol?,
|
||||||
|
val setterDescriptor: FunctionDescriptor?,
|
||||||
val typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
val typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
||||||
callReceiver: CallReceiver,
|
callReceiver: CallReceiver,
|
||||||
superQualifier: IrClassSymbol?
|
superQualifier: IrClassSymbol?
|
||||||
@@ -121,7 +124,7 @@ class AccessorPropertyLValue(
|
|||||||
callReceiver.call { dispatchReceiverValue, extensionReceiverValue ->
|
callReceiver.call { dispatchReceiverValue, extensionReceiverValue ->
|
||||||
IrGetterCallImpl(
|
IrGetterCallImpl(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
getter!!,
|
getter!!, getterDescriptor!!,
|
||||||
typeArguments,
|
typeArguments,
|
||||||
dispatchReceiverValue?.load(),
|
dispatchReceiverValue?.load(),
|
||||||
extensionReceiverValue?.load(),
|
extensionReceiverValue?.load(),
|
||||||
@@ -134,7 +137,7 @@ class AccessorPropertyLValue(
|
|||||||
callReceiver.call { dispatchReceiverValue, extensionReceiverValue ->
|
callReceiver.call { dispatchReceiverValue, extensionReceiverValue ->
|
||||||
IrSetterCallImpl(
|
IrSetterCallImpl(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
setter!!,
|
setter!!, setterDescriptor!!,
|
||||||
typeArguments,
|
typeArguments,
|
||||||
dispatchReceiverValue?.load(),
|
dispatchReceiverValue?.load(),
|
||||||
extensionReceiverValue?.load(),
|
extensionReceiverValue?.load(),
|
||||||
@@ -147,7 +150,7 @@ class AccessorPropertyLValue(
|
|||||||
override fun withReceiver(dispatchReceiver: VariableLValue?, extensionReceiver: VariableLValue?): PropertyLValueBase =
|
override fun withReceiver(dispatchReceiver: VariableLValue?, extensionReceiver: VariableLValue?): PropertyLValueBase =
|
||||||
AccessorPropertyLValue(
|
AccessorPropertyLValue(
|
||||||
scope, startOffset, endOffset, origin,
|
scope, startOffset, endOffset, origin,
|
||||||
type, getter, setter,
|
type, getter, getterDescriptor, setter, setterDescriptor,
|
||||||
typeArguments,
|
typeArguments,
|
||||||
SimpleCallReceiver(dispatchReceiver, extensionReceiver),
|
SimpleCallReceiver(dispatchReceiver, extensionReceiver),
|
||||||
superQualifier
|
superQualifier
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ fun IrBuilderWithScope.irNotEquals(arg1: IrExpression, arg2: IrExpression) =
|
|||||||
arg1, arg2))
|
arg1, arg2))
|
||||||
|
|
||||||
fun IrBuilderWithScope.irGet(receiver: IrExpression, getterSymbol: IrFunctionSymbol): IrCall =
|
fun IrBuilderWithScope.irGet(receiver: IrExpression, getterSymbol: IrFunctionSymbol): IrCall =
|
||||||
IrGetterCallImpl(startOffset, endOffset, getterSymbol, null, receiver, null, IrStatementOrigin.GET_PROPERTY)
|
IrGetterCallImpl(startOffset, endOffset, getterSymbol, getterSymbol.descriptor, null, receiver, null, IrStatementOrigin.GET_PROPERTY)
|
||||||
|
|
||||||
fun IrBuilderWithScope.irCall(callee: IrFunctionSymbol, type: KotlinType): IrCall =
|
fun IrBuilderWithScope.irCall(callee: IrFunctionSymbol, type: KotlinType): IrCall =
|
||||||
IrCallImpl(startOffset, endOffset, type, callee, callee.descriptor, null)
|
IrCallImpl(startOffset, endOffset, type, callee, callee.descriptor, null)
|
||||||
|
|||||||
@@ -16,9 +16,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.expressions.impl
|
package org.jetbrains.kotlin.ir.expressions.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrCall
|
import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrCallWithShallowCopy
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||||
@@ -63,7 +64,7 @@ class IrCallImpl(
|
|||||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null,
|
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null,
|
||||||
origin: IrStatementOrigin? = null,
|
origin: IrStatementOrigin? = null,
|
||||||
superQualifierSymbol: IrClassSymbol? = null
|
superQualifierSymbol: IrClassSymbol? = null
|
||||||
) : this(startOffset, endOffset, symbol.descriptor.returnType!!, symbol, descriptor, typeArguments, origin, superQualifierSymbol)
|
) : this(startOffset, endOffset, descriptor.returnType!!, symbol, descriptor, typeArguments, origin, superQualifierSymbol)
|
||||||
|
|
||||||
constructor(startOffset: Int, endOffset: Int, symbol: IrFunctionSymbol) :
|
constructor(startOffset: Int, endOffset: Int, symbol: IrFunctionSymbol) :
|
||||||
this(startOffset, endOffset, symbol, symbol.descriptor)
|
this(startOffset, endOffset, symbol, symbol.descriptor)
|
||||||
|
|||||||
+18
-8
@@ -36,11 +36,11 @@ import java.lang.UnsupportedOperationException
|
|||||||
abstract class IrPropertyAccessorCallBase(
|
abstract class IrPropertyAccessorCallBase(
|
||||||
startOffset: Int, endOffset: Int,
|
startOffset: Int, endOffset: Int,
|
||||||
override val symbol: IrFunctionSymbol,
|
override val symbol: IrFunctionSymbol,
|
||||||
|
override val descriptor: FunctionDescriptor,
|
||||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
||||||
override val origin: IrStatementOrigin? = null,
|
override val origin: IrStatementOrigin? = null,
|
||||||
override val superQualifierSymbol: IrClassSymbol? = null
|
override val superQualifierSymbol: IrClassSymbol? = null
|
||||||
) : IrMemberAccessExpressionBase(startOffset, endOffset, symbol.descriptor.returnType!!, typeArguments), IrCall {
|
) : IrMemberAccessExpressionBase(startOffset, endOffset, descriptor.returnType!!, typeArguments), IrCall {
|
||||||
override val descriptor: FunctionDescriptor get() = symbol.descriptor
|
|
||||||
override val superQualifier: ClassDescriptor? get() = superQualifierSymbol?.descriptor
|
override val superQualifier: ClassDescriptor? get() = superQualifierSymbol?.descriptor
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||||
@@ -55,18 +55,20 @@ abstract class IrPropertyAccessorCallBase(
|
|||||||
class IrGetterCallImpl(
|
class IrGetterCallImpl(
|
||||||
startOffset: Int, endOffset: Int,
|
startOffset: Int, endOffset: Int,
|
||||||
symbol: IrFunctionSymbol,
|
symbol: IrFunctionSymbol,
|
||||||
|
descriptor: FunctionDescriptor,
|
||||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
||||||
origin: IrStatementOrigin? = null,
|
origin: IrStatementOrigin? = null,
|
||||||
superQualifierSymbol: IrClassSymbol? = null
|
superQualifierSymbol: IrClassSymbol? = null
|
||||||
) : IrPropertyAccessorCallBase(startOffset, endOffset, symbol, typeArguments, origin, superQualifierSymbol), IrCallWithShallowCopy {
|
) : IrPropertyAccessorCallBase(startOffset, endOffset, symbol, descriptor, typeArguments, origin, superQualifierSymbol), IrCallWithShallowCopy {
|
||||||
constructor(startOffset: Int, endOffset: Int,
|
constructor(startOffset: Int, endOffset: Int,
|
||||||
symbol: IrFunctionSymbol,
|
symbol: IrFunctionSymbol,
|
||||||
|
descriptor: FunctionDescriptor,
|
||||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
||||||
dispatchReceiver: IrExpression?,
|
dispatchReceiver: IrExpression?,
|
||||||
extensionReceiver: IrExpression?,
|
extensionReceiver: IrExpression?,
|
||||||
origin: IrStatementOrigin? = null,
|
origin: IrStatementOrigin? = null,
|
||||||
superQualifierSymbol: IrClassSymbol? = null
|
superQualifierSymbol: IrClassSymbol? = null
|
||||||
) : this(startOffset, endOffset, symbol, typeArguments, origin, superQualifierSymbol) {
|
) : this(startOffset, endOffset, symbol, descriptor, typeArguments, origin, superQualifierSymbol) {
|
||||||
this.dispatchReceiver = dispatchReceiver
|
this.dispatchReceiver = dispatchReceiver
|
||||||
this.extensionReceiver = extensionReceiver
|
this.extensionReceiver = extensionReceiver
|
||||||
}
|
}
|
||||||
@@ -82,12 +84,15 @@ class IrGetterCallImpl(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun shallowCopy(newOrigin: IrStatementOrigin?, newCallee: IrFunctionSymbol, newSuperQualifier: IrClassSymbol?): IrCall =
|
override fun shallowCopy(newOrigin: IrStatementOrigin?, newCallee: IrFunctionSymbol, newSuperQualifier: IrClassSymbol?): IrCall =
|
||||||
IrGetterCallImpl(startOffset, endOffset, newCallee, typeArguments, dispatchReceiver, extensionReceiver, newOrigin, newSuperQualifier)
|
IrGetterCallImpl(startOffset, endOffset, newCallee,
|
||||||
|
descriptor, // TODO substitute descriptor for new callee?
|
||||||
|
typeArguments, dispatchReceiver, extensionReceiver, newOrigin, newSuperQualifier)
|
||||||
|
|
||||||
override fun shallowCopy(newOrigin: IrStatementOrigin?, newCallee: FunctionDescriptor, newSuperQualifier: ClassDescriptor?): IrCall =
|
override fun shallowCopy(newOrigin: IrStatementOrigin?, newCallee: FunctionDescriptor, newSuperQualifier: ClassDescriptor?): IrCall =
|
||||||
IrGetterCallImpl(
|
IrGetterCallImpl(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
createFunctionSymbol(newCallee),
|
createFunctionSymbol(newCallee),
|
||||||
|
newCallee,
|
||||||
typeArguments, dispatchReceiver, extensionReceiver,
|
typeArguments, dispatchReceiver, extensionReceiver,
|
||||||
newOrigin,
|
newOrigin,
|
||||||
createClassSymbolOrNull(newSuperQualifier)
|
createClassSymbolOrNull(newSuperQualifier)
|
||||||
@@ -97,19 +102,21 @@ class IrGetterCallImpl(
|
|||||||
class IrSetterCallImpl(
|
class IrSetterCallImpl(
|
||||||
startOffset: Int, endOffset: Int,
|
startOffset: Int, endOffset: Int,
|
||||||
symbol: IrFunctionSymbol,
|
symbol: IrFunctionSymbol,
|
||||||
|
descriptor: FunctionDescriptor,
|
||||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
||||||
origin: IrStatementOrigin? = null,
|
origin: IrStatementOrigin? = null,
|
||||||
superQualifierSymbol: IrClassSymbol? = null
|
superQualifierSymbol: IrClassSymbol? = null
|
||||||
) : IrPropertyAccessorCallBase(startOffset, endOffset, symbol, typeArguments, origin, superQualifierSymbol), IrCallWithShallowCopy {
|
) : IrPropertyAccessorCallBase(startOffset, endOffset, symbol, descriptor, typeArguments, origin, superQualifierSymbol), IrCallWithShallowCopy {
|
||||||
constructor(startOffset: Int, endOffset: Int,
|
constructor(startOffset: Int, endOffset: Int,
|
||||||
symbol: IrFunctionSymbol,
|
symbol: IrFunctionSymbol,
|
||||||
|
descriptor: FunctionDescriptor,
|
||||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
||||||
dispatchReceiver: IrExpression?,
|
dispatchReceiver: IrExpression?,
|
||||||
extensionReceiver: IrExpression?,
|
extensionReceiver: IrExpression?,
|
||||||
argument: IrExpression,
|
argument: IrExpression,
|
||||||
origin: IrStatementOrigin? = null,
|
origin: IrStatementOrigin? = null,
|
||||||
superQualifierSymbol: IrClassSymbol? = null
|
superQualifierSymbol: IrClassSymbol? = null
|
||||||
) : this(startOffset, endOffset, symbol, typeArguments, origin, superQualifierSymbol) {
|
) : this(startOffset, endOffset, symbol, descriptor, typeArguments, origin, superQualifierSymbol) {
|
||||||
this.dispatchReceiver = dispatchReceiver
|
this.dispatchReceiver = dispatchReceiver
|
||||||
this.extensionReceiver = extensionReceiver
|
this.extensionReceiver = extensionReceiver
|
||||||
putValueArgument(SETTER_ARGUMENT_INDEX, argument)
|
putValueArgument(SETTER_ARGUMENT_INDEX, argument)
|
||||||
@@ -131,12 +138,15 @@ class IrSetterCallImpl(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun shallowCopy(newOrigin: IrStatementOrigin?, newCallee: IrFunctionSymbol, newSuperQualifier: IrClassSymbol?): IrCall =
|
override fun shallowCopy(newOrigin: IrStatementOrigin?, newCallee: IrFunctionSymbol, newSuperQualifier: IrClassSymbol?): IrCall =
|
||||||
IrSetterCallImpl(startOffset, endOffset, newCallee, typeArguments, newOrigin, newSuperQualifier)
|
IrSetterCallImpl(startOffset, endOffset, newCallee,
|
||||||
|
descriptor, // TODO substitute newCallee.descriptor?
|
||||||
|
typeArguments, newOrigin, newSuperQualifier)
|
||||||
|
|
||||||
override fun shallowCopy(newOrigin: IrStatementOrigin?, newCallee: FunctionDescriptor, newSuperQualifier: ClassDescriptor?): IrCall =
|
override fun shallowCopy(newOrigin: IrStatementOrigin?, newCallee: FunctionDescriptor, newSuperQualifier: ClassDescriptor?): IrCall =
|
||||||
IrSetterCallImpl(
|
IrSetterCallImpl(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
createFunctionSymbol(newCallee),
|
createFunctionSymbol(newCallee),
|
||||||
|
newCallee,
|
||||||
typeArguments,
|
typeArguments,
|
||||||
newOrigin,
|
newOrigin,
|
||||||
createClassSymbolOrNull(newSuperQualifier)
|
createClassSymbolOrNull(newSuperQualifier)
|
||||||
|
|||||||
@@ -24,6 +24,18 @@ abstract class IrSymbolBase<out D : DeclarationDescriptor>(override val descript
|
|||||||
|
|
||||||
abstract class IrBindableSymbolBase<out D : DeclarationDescriptor, B : IrSymbolOwner>(descriptor: D) :
|
abstract class IrBindableSymbolBase<out D : DeclarationDescriptor, B : IrSymbolOwner>(descriptor: D) :
|
||||||
IrBindableSymbol<D, B>, IrSymbolBase<D>(descriptor) {
|
IrBindableSymbol<D, B>, IrSymbolBase<D>(descriptor) {
|
||||||
|
init {
|
||||||
|
assert(isOriginalDescriptor(descriptor)) {
|
||||||
|
"Substituted descriptor $descriptor for ${descriptor.original}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun isOriginalDescriptor(descriptor: DeclarationDescriptor): Boolean =
|
||||||
|
if (descriptor is ValueParameterDescriptor)
|
||||||
|
isOriginalDescriptor(descriptor.containingDeclaration)
|
||||||
|
else
|
||||||
|
descriptor == descriptor.original
|
||||||
|
|
||||||
private var _owner: B? = null
|
private var _owner: B? = null
|
||||||
override val owner: B
|
override val owner: B
|
||||||
get() = _owner ?: throw IllegalStateException("Symbol for $descriptor is unbound")
|
get() = _owner ?: throw IllegalStateException("Symbol for $descriptor is unbound")
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
val <T> T.id get() = this
|
||||||
|
|
||||||
|
val test = "abc".id
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
FILE /genericPropertyCall.kt
|
||||||
|
PROPERTY public val <T> T.id: T
|
||||||
|
FUN public fun T.<get-id>(): T
|
||||||
|
$receiver: VALUE_PARAMETER <receiver: id: T on T>
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='<get-id>() on T: T'
|
||||||
|
GET_VAR '<receiver: id: T on T>' type=T origin=null
|
||||||
|
PROPERTY public val test: kotlin.String
|
||||||
|
FIELD PROPERTY_BACKING_FIELD public val test: kotlin.String
|
||||||
|
EXPRESSION_BODY
|
||||||
|
CALL '<get-id>() on String: String' type=kotlin.String origin=GET_PROPERTY
|
||||||
|
$receiver: CONST String type=kotlin.String value='abc'
|
||||||
|
FUN DEFAULT_PROPERTY_ACCESSOR public fun <get-test>(): kotlin.String
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='<get-test>(): String'
|
||||||
|
GET_FIELD 'test: String' type=kotlin.String origin=null
|
||||||
@@ -647,6 +647,12 @@ public class IrTextTestCaseGenerated extends AbstractIrTextTestCase {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("genericPropertyCall.kt")
|
||||||
|
public void testGenericPropertyCall() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/expressions/genericPropertyCall.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("identity.kt")
|
@TestMetadata("identity.kt")
|
||||||
public void testIdentity() throws Exception {
|
public void testIdentity() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/expressions/identity.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/expressions/identity.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user