FIR2IR: eliminate hacky replacement for invoke() & next() calls

At this moment the generic logic for fake override calls
replacement is in use.
This commit is contained in:
Mikhail Glukhikh
2020-03-03 12:19:45 +03:00
parent 50c4c3f4fb
commit 20eddef06f
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.references.FirSuperReference
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
import org.jetbrains.kotlin.fir.references.impl.FirPropertyFromParameterResolvedNamedReference
import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.resolve.calls.SyntheticPropertySymbol
@@ -687,12 +686,7 @@ class Fir2IrVisitor(
val convertibleCall = if (functionCall.toResolvedCallableSymbol()?.fir is FirIntegerOperator) {
functionCall.copy().transformSingle(integerApproximator, null)
} else {
val resolvedSymbol = functionCall.resolvedNamedFunctionSymbol()
if (resolvedSymbol != null) {
functionCall.replaceCalleeReferenceWithOverridden(resolvedSymbol)
} else {
functionCall
}
functionCall
}
return convertibleCall.toIrExpression(convertibleCall.typeRef)
.applyCallArguments(convertibleCall).applyTypeArguments(convertibleCall).applyReceivers(convertibleCall)
@@ -703,21 +697,6 @@ class Fir2IrVisitor(
return calleeReference.resolvedSymbol as? FirNamedFunctionSymbol
}
// Use the generic invoke & next methods to match bridges generated by the backend.
private fun FirFunctionCall.replaceCalleeReferenceWithOverridden(resolvedSymbol: FirNamedFunctionSymbol): FirFunctionCall {
val overriddenSymbol = resolvedSymbol.overriddenSymbol ?: return this
if (resolvedSymbol.callableId.isInvoke() || resolvedSymbol.callableId.isIteratorNext()) {
return copy(
calleeReference = buildResolvedNamedReference {
source = calleeReference.source
name = calleeReference.name
this.resolvedSymbol = overriddenSymbol
}
)
}
return this
}
override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: Any?): IrElement {
return annotationCall.toIrExpression().applyCallArguments(annotationCall)
}