Mark implicit 'invoke' calls with origin INVOKE

This commit is contained in:
Dmitry Petrov
2018-10-17 15:17:10 +03:00
parent ad9953724f
commit 763e72603a
3 changed files with 33 additions and 2 deletions
@@ -44,6 +44,7 @@ import org.jetbrains.kotlin.resolve.constants.CompileTimeConstant
import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils
import org.jetbrains.kotlin.util.OperatorNameConventions
class StatementGenerator(
val bodyGenerator: BodyGenerator,
@@ -294,7 +295,16 @@ class StatementGenerator(
return CallGenerator(this).generateCall(expression, functionCall, IrStatementOrigin.INVOKE)
}
return CallGenerator(this).generateCall(expression.startOffset, expression.endOffset, pregenerateCall(resolvedCall))
val calleeExpression = expression.calleeExpression
val origin =
if (resolvedCall.resultingDescriptor.name == OperatorNameConventions.INVOKE &&
calleeExpression !is KtSimpleNameExpression && calleeExpression !is KtQualifiedExpression
)
IrStatementOrigin.INVOKE
else
null
return CallGenerator(this).generateCall(expression.startOffset, expression.endOffset, pregenerateCall(resolvedCall), origin)
}
override fun visitArrayAccessExpression(expression: KtArrayAccessExpression, data: Nothing?): IrStatement {