[FIR2IR] Provide more information for errors inside convertToIrSetCall
This commit is contained in:
committed by
teamcityserver
parent
9de244515e
commit
59c86bcdc4
+65
-57
@@ -276,69 +276,77 @@ class CallAndReferenceGenerator(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun convertToIrSetCall(variableAssignment: FirVariableAssignment, explicitReceiverExpression: IrExpression?): IrExpression {
|
fun convertToIrSetCall(variableAssignment: FirVariableAssignment, explicitReceiverExpression: IrExpression?): IrExpression {
|
||||||
val type = irBuiltIns.unitType
|
try {
|
||||||
val calleeReference = variableAssignment.calleeReference
|
val type = irBuiltIns.unitType
|
||||||
val symbol = calleeReference.toSymbolForCall(session, classifierStorage, declarationStorage, conversionScope, preferGetter = false)
|
val calleeReference = variableAssignment.calleeReference
|
||||||
val origin = IrStatementOrigin.EQ
|
val symbol =
|
||||||
return variableAssignment.convertWithOffsets { startOffset, endOffset ->
|
calleeReference.toSymbolForCall(session, classifierStorage, declarationStorage, conversionScope, preferGetter = false)
|
||||||
val assignedValue = visitor.convertToIrExpression(variableAssignment.rValue)
|
val origin = IrStatementOrigin.EQ
|
||||||
when (symbol) {
|
return variableAssignment.convertWithOffsets { startOffset, endOffset ->
|
||||||
is IrFieldSymbol -> IrSetFieldImpl(startOffset, endOffset, symbol, type, origin).apply {
|
val assignedValue = visitor.convertToIrExpression(variableAssignment.rValue)
|
||||||
value = assignedValue
|
when (symbol) {
|
||||||
}
|
is IrFieldSymbol -> IrSetFieldImpl(startOffset, endOffset, symbol, type, origin).apply {
|
||||||
is IrLocalDelegatedPropertySymbol -> {
|
value = assignedValue
|
||||||
val setter = symbol.owner.setter
|
}
|
||||||
when {
|
is IrLocalDelegatedPropertySymbol -> {
|
||||||
setter != null -> IrCallImpl(
|
val setter = symbol.owner.setter
|
||||||
startOffset, endOffset, type, setter.symbol,
|
when {
|
||||||
typeArgumentsCount = setter.typeParameters.size,
|
setter != null -> IrCallImpl(
|
||||||
|
startOffset, endOffset, type, setter.symbol,
|
||||||
|
typeArgumentsCount = setter.typeParameters.size,
|
||||||
|
valueArgumentsCount = 1,
|
||||||
|
origin = origin,
|
||||||
|
superQualifierSymbol = variableAssignment.dispatchReceiver.superQualifierSymbol(symbol)
|
||||||
|
).apply {
|
||||||
|
putValueArgument(0, assignedValue)
|
||||||
|
}
|
||||||
|
else -> generateErrorCallExpression(startOffset, endOffset, calleeReference)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
is IrPropertySymbol -> {
|
||||||
|
val irProperty = symbol.owner
|
||||||
|
val setter = irProperty.setter
|
||||||
|
val backingField = irProperty.backingField
|
||||||
|
when {
|
||||||
|
setter != null -> IrCallImpl(
|
||||||
|
startOffset, endOffset, type, setter.symbol,
|
||||||
|
typeArgumentsCount = setter.typeParameters.size,
|
||||||
|
valueArgumentsCount = 1,
|
||||||
|
origin = origin,
|
||||||
|
superQualifierSymbol = variableAssignment.dispatchReceiver.superQualifierSymbol(symbol)
|
||||||
|
).apply {
|
||||||
|
putValueArgument(0, assignedValue)
|
||||||
|
}
|
||||||
|
backingField != null -> IrSetFieldImpl(
|
||||||
|
startOffset, endOffset, backingField.symbol, type,
|
||||||
|
origin = null, // NB: to be consistent with PSI2IR, origin should be null here
|
||||||
|
superQualifierSymbol = variableAssignment.dispatchReceiver.superQualifierSymbol(symbol)
|
||||||
|
).apply {
|
||||||
|
value = assignedValue
|
||||||
|
}
|
||||||
|
else -> generateErrorCallExpression(startOffset, endOffset, calleeReference)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
is IrSimpleFunctionSymbol -> {
|
||||||
|
IrCallImpl(
|
||||||
|
startOffset, endOffset, type, symbol,
|
||||||
|
typeArgumentsCount = symbol.owner.typeParameters.size,
|
||||||
valueArgumentsCount = 1,
|
valueArgumentsCount = 1,
|
||||||
origin = origin,
|
origin = origin
|
||||||
superQualifierSymbol = variableAssignment.dispatchReceiver.superQualifierSymbol(symbol)
|
|
||||||
).apply {
|
).apply {
|
||||||
putValueArgument(0, assignedValue)
|
putValueArgument(0, assignedValue)
|
||||||
}
|
}
|
||||||
else -> generateErrorCallExpression(startOffset, endOffset, calleeReference)
|
|
||||||
}
|
}
|
||||||
|
is IrVariableSymbol -> IrSetValueImpl(startOffset, endOffset, type, symbol, assignedValue, origin)
|
||||||
|
else -> generateErrorCallExpression(startOffset, endOffset, calleeReference)
|
||||||
}
|
}
|
||||||
is IrPropertySymbol -> {
|
}.applyTypeArguments(variableAssignment).applyReceivers(variableAssignment, explicitReceiverExpression)
|
||||||
val irProperty = symbol.owner
|
} catch (e: Throwable) {
|
||||||
val setter = irProperty.setter
|
throw IllegalStateException(
|
||||||
val backingField = irProperty.backingField
|
"Error while translating ${variableAssignment.render()} " +
|
||||||
when {
|
"from file ${conversionScope.containingFileIfAny()?.name ?: "???"} to BE IR", e
|
||||||
setter != null -> IrCallImpl(
|
)
|
||||||
startOffset, endOffset, type, setter.symbol,
|
}
|
||||||
typeArgumentsCount = setter.typeParameters.size,
|
|
||||||
valueArgumentsCount = 1,
|
|
||||||
origin = origin,
|
|
||||||
superQualifierSymbol = variableAssignment.dispatchReceiver.superQualifierSymbol(symbol)
|
|
||||||
).apply {
|
|
||||||
putValueArgument(0, assignedValue)
|
|
||||||
}
|
|
||||||
backingField != null -> IrSetFieldImpl(
|
|
||||||
startOffset, endOffset, backingField.symbol, type,
|
|
||||||
origin = null, // NB: to be consistent with PSI2IR, origin should be null here
|
|
||||||
superQualifierSymbol = variableAssignment.dispatchReceiver.superQualifierSymbol(symbol)
|
|
||||||
).apply {
|
|
||||||
value = assignedValue
|
|
||||||
}
|
|
||||||
else -> generateErrorCallExpression(startOffset, endOffset, calleeReference)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
is IrSimpleFunctionSymbol -> {
|
|
||||||
IrCallImpl(
|
|
||||||
startOffset, endOffset, type, symbol,
|
|
||||||
typeArgumentsCount = symbol.owner.typeParameters.size,
|
|
||||||
valueArgumentsCount = 1,
|
|
||||||
origin = origin
|
|
||||||
).apply {
|
|
||||||
putValueArgument(0, assignedValue)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
is IrVariableSymbol -> IrSetValueImpl(startOffset, endOffset, type, symbol, assignedValue, origin)
|
|
||||||
else -> generateErrorCallExpression(startOffset, endOffset, calleeReference)
|
|
||||||
}
|
|
||||||
}.applyTypeArguments(variableAssignment).applyReceivers(variableAssignment, explicitReceiverExpression)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun convertToIrConstructorCall(annotationCall: FirAnnotationCall): IrExpression {
|
fun convertToIrConstructorCall(annotationCall: FirAnnotationCall): IrExpression {
|
||||||
|
|||||||
Reference in New Issue
Block a user