Drop IrGeneralCall, pull up corresponding members to IrMemberAccessExpression.
This commit is contained in:
committed by
Dmitry Petrov
parent
d67d8016d3
commit
89de2a2ebe
@@ -116,7 +116,7 @@ class CallGenerator(statementGenerator: StatementGenerator): StatementGeneratorE
|
||||
}
|
||||
}
|
||||
|
||||
private fun addParametersToCall(startOffset: Int, endOffset: Int, call: CallBuilder, irCall: IrGeneralCallBase, returnType: KotlinType): IrExpression =
|
||||
private fun addParametersToCall(startOffset: Int, endOffset: Int, call: CallBuilder, irCall: IrCallWithIndexedArgumentsBase, returnType: KotlinType): IrExpression =
|
||||
if (call.isValueArgumentReorderingRequired()) {
|
||||
generateCallWithArgumentReordering(irCall, startOffset, endOffset, call, returnType)
|
||||
}
|
||||
@@ -129,7 +129,7 @@ class CallGenerator(statementGenerator: StatementGenerator): StatementGeneratorE
|
||||
}
|
||||
|
||||
private fun generateCallWithArgumentReordering(
|
||||
irCall: IrGeneralCall,
|
||||
irCall: IrMemberAccessExpression,
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
call: CallBuilder,
|
||||
|
||||
+1
-1
@@ -40,7 +40,7 @@ class InsertImplicitCasts(val builtIns: KotlinBuiltIns): IrElementTransformerVoi
|
||||
return element
|
||||
}
|
||||
|
||||
override fun visitGeneralCall(expression: IrGeneralCall): IrExpression {
|
||||
override fun visitMemberAccess(expression: IrMemberAccessExpression): IrExpression {
|
||||
expression.transformChildrenVoid(this)
|
||||
|
||||
with(expression) {
|
||||
|
||||
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.ir.expressions
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
|
||||
interface IrCall : IrGeneralCall {
|
||||
interface IrCall : IrMemberAccessExpression {
|
||||
val superQualifier: ClassDescriptor?
|
||||
}
|
||||
|
||||
|
||||
@@ -16,5 +16,5 @@
|
||||
|
||||
package org.jetbrains.kotlin.ir.expressions
|
||||
|
||||
interface IrCallableReference : IrGeneralCall
|
||||
interface IrCallableReference : IrMemberAccessExpression
|
||||
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.ir.expressions
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
|
||||
|
||||
interface IrDelegatingConstructorCall : IrGeneralCall {
|
||||
interface IrDelegatingConstructorCall : IrMemberAccessExpression {
|
||||
override val descriptor: ConstructorDescriptor
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ConstructorDescriptor
|
||||
|
||||
|
||||
interface IrEnumConstructorCall : IrGeneralCall {
|
||||
interface IrEnumConstructorCall : IrMemberAccessExpression {
|
||||
override val descriptor: ConstructorDescriptor
|
||||
val enumEntryDescriptor: ClassDescriptor?
|
||||
}
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2016 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.ir.expressions
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||
|
||||
interface IrGeneralCall : IrMemberAccessExpression {
|
||||
val origin: IrStatementOrigin?
|
||||
override val descriptor: CallableDescriptor
|
||||
|
||||
fun getArgument(index: Int): IrExpression?
|
||||
fun putArgument(index: Int, valueArgument: IrExpression?)
|
||||
fun removeArgument(index: Int)
|
||||
}
|
||||
|
||||
fun <T : IrGeneralCall> T.putArguments(arguments: List<IrExpression>): T {
|
||||
arguments.forEachIndexed { i, irArgument ->
|
||||
putArgument(i, irArgument)
|
||||
}
|
||||
return this
|
||||
}
|
||||
|
||||
inline fun <T : IrGeneralCall> T.mapValueParameters(transform: (ValueParameterDescriptor) -> IrExpression): T {
|
||||
descriptor.valueParameters.forEach {
|
||||
putArgument(it.index, transform(it))
|
||||
}
|
||||
return this
|
||||
}
|
||||
|
||||
+18
@@ -16,8 +16,26 @@
|
||||
|
||||
package org.jetbrains.kotlin.ir.expressions
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||
|
||||
interface IrMemberAccessExpression : IrDeclarationReference {
|
||||
var dispatchReceiver: IrExpression?
|
||||
var extensionReceiver: IrExpression?
|
||||
|
||||
val origin: IrStatementOrigin?
|
||||
override val descriptor: CallableDescriptor
|
||||
|
||||
fun getArgument(index: Int): IrExpression?
|
||||
fun putArgument(index: Int, valueArgument: IrExpression?)
|
||||
fun removeArgument(index: Int)
|
||||
}
|
||||
|
||||
|
||||
inline fun <T : IrMemberAccessExpression> T.mapValueParameters(transform: (ValueParameterDescriptor) -> IrExpression): T {
|
||||
descriptor.valueParameters.forEach {
|
||||
putArgument(it.index, transform(it))
|
||||
}
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ class IrCallImpl(
|
||||
override val descriptor: CallableDescriptor,
|
||||
override val origin: IrStatementOrigin? = null,
|
||||
override val superQualifier: ClassDescriptor? = null
|
||||
) : IrGeneralCallBase(startOffset, endOffset, type, descriptor.valueParameters.size), IrCall {
|
||||
) : IrCallWithIndexedArgumentsBase(startOffset, endOffset, type, descriptor.valueParameters.size), IrCall {
|
||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||
visitor.visitCall(this, data)
|
||||
}
|
||||
+2
-3
@@ -17,18 +17,17 @@
|
||||
package org.jetbrains.kotlin.ir.expressions.impl
|
||||
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.IrGeneralCall
|
||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import java.lang.AssertionError
|
||||
|
||||
abstract class IrGeneralCallBase(
|
||||
abstract class IrCallWithIndexedArgumentsBase(
|
||||
startOffset: Int, endOffset: Int, type: KotlinType,
|
||||
numArguments: Int,
|
||||
override val origin: IrStatementOrigin? = null
|
||||
) : IrMemberAccessExpressionBase(startOffset, endOffset, type), IrGeneralCall {
|
||||
) : IrMemberAccessExpressionBase(startOffset, endOffset, type) {
|
||||
protected val argumentsByParameterIndex =
|
||||
arrayOfNulls<IrExpression>(numArguments)
|
||||
|
||||
+1
-1
@@ -28,7 +28,7 @@ class IrCallableReferenceImpl(
|
||||
type: KotlinType,
|
||||
override val descriptor: CallableDescriptor,
|
||||
override val origin: IrStatementOrigin? = null
|
||||
) : IrGeneralCallBase(startOffset, endOffset, type, descriptor.valueParameters.size, origin), IrCallableReference {
|
||||
) : IrCallWithIndexedArgumentsBase(startOffset, endOffset, type, descriptor.valueParameters.size, origin), IrCallableReference {
|
||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||
return visitor.visitCallableReference(this, data)
|
||||
}
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@ class IrDelegatingConstructorCallImpl(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
override val descriptor: ConstructorDescriptor
|
||||
) : IrGeneralCallBase(startOffset, endOffset, descriptor.returnType, descriptor.valueParameters.size), IrDelegatingConstructorCall {
|
||||
) : IrCallWithIndexedArgumentsBase(startOffset, endOffset, descriptor.returnType, descriptor.valueParameters.size), IrDelegatingConstructorCall {
|
||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||
return visitor.visitDelegatingConstructorCall(this, data)
|
||||
}
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ class IrEnumConstructorCallImpl(
|
||||
endOffset: Int,
|
||||
override val descriptor: ConstructorDescriptor,
|
||||
override val enumEntryDescriptor: ClassDescriptor? = null
|
||||
) : IrGeneralCallBase(startOffset, endOffset, descriptor.returnType, descriptor.valueParameters.size), IrEnumConstructorCall {
|
||||
) : IrCallWithIndexedArgumentsBase(startOffset, endOffset, descriptor.returnType, descriptor.valueParameters.size), IrEnumConstructorCall {
|
||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||
return visitor.visitEnumConstructorCall(this, data)
|
||||
}
|
||||
|
||||
@@ -95,7 +95,7 @@ class DumpIrTreeVisitor(out: Appendable): IrElementVisitor<Unit, String> {
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitGeneralCall(expression: IrGeneralCall, data: String) {
|
||||
override fun visitMemberAccess(expression: IrMemberAccessExpression, data: String) {
|
||||
expression.dumpLabeledElementWith(data) {
|
||||
expression.dispatchReceiver?.accept(this, "\$this")
|
||||
expression.extensionReceiver?.accept(this, "\$receiver")
|
||||
|
||||
@@ -78,13 +78,13 @@ interface IrElementTransformer<in D> : IrElementVisitor<IrElement, D> {
|
||||
override fun visitGetField(expression: IrGetField, data: D) = visitFieldAccess(expression, data)
|
||||
override fun visitSetField(expression: IrSetField, data: D) = visitFieldAccess(expression, data)
|
||||
override fun visitGetExtensionReceiver(expression: IrGetExtensionReceiver, data: D) = visitDeclarationReference(expression, data)
|
||||
override fun visitGeneralCall(expression: IrGeneralCall, data: D) = visitDeclarationReference(expression, data)
|
||||
override fun visitCall(expression: IrCall, data: D) = visitGeneralCall(expression, data)
|
||||
override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: D) = visitGeneralCall(expression, data)
|
||||
override fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: D) = visitGeneralCall(expression, data)
|
||||
override fun visitMemberAccess(expression: IrMemberAccessExpression, data: D): IrElement = visitDeclarationReference(expression, data)
|
||||
override fun visitCall(expression: IrCall, data: D) = visitMemberAccess(expression, data)
|
||||
override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: D) = visitMemberAccess(expression, data)
|
||||
override fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: D) = visitMemberAccess(expression, data)
|
||||
override fun visitGetClass(expression: IrGetClass, data: D) = visitExpression(expression, data)
|
||||
|
||||
override fun visitCallableReference(expression: IrCallableReference, data: D) = visitGeneralCall(expression, data)
|
||||
override fun visitCallableReference(expression: IrCallableReference, data: D) = visitMemberAccess(expression, data)
|
||||
override fun visitClassReference(expression: IrClassReference, data: D) = visitDeclarationReference(expression, data)
|
||||
|
||||
override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: D) = visitExpression(expression, data)
|
||||
|
||||
+6
-6
@@ -145,22 +145,22 @@ interface IrElementTransformerVoid : IrElementTransformer<Nothing?> {
|
||||
fun visitGetExtensionReceiver(expression: IrGetExtensionReceiver) = visitDeclarationReference(expression)
|
||||
override fun visitGetExtensionReceiver(expression: IrGetExtensionReceiver, data: Nothing?) = visitGetExtensionReceiver(expression)
|
||||
|
||||
fun visitGeneralCall(expression: IrGeneralCall) = visitDeclarationReference(expression)
|
||||
override fun visitGeneralCall(expression: IrGeneralCall, data: Nothing?) = visitGeneralCall(expression)
|
||||
fun visitMemberAccess(expression: IrMemberAccessExpression) = visitDeclarationReference(expression)
|
||||
override fun visitMemberAccess(expression: IrMemberAccessExpression, data: Nothing?) = visitMemberAccess(expression)
|
||||
|
||||
fun visitCall(expression: IrCall) = visitGeneralCall(expression)
|
||||
fun visitCall(expression: IrCall) = visitMemberAccess(expression)
|
||||
override fun visitCall(expression: IrCall, data: Nothing?) = visitCall(expression)
|
||||
|
||||
fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall) = visitGeneralCall(expression)
|
||||
fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall) = visitMemberAccess(expression)
|
||||
override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: Nothing?) = visitDelegatingConstructorCall(expression)
|
||||
|
||||
fun visitEnumConstructorCall(expression: IrEnumConstructorCall) = visitGeneralCall(expression)
|
||||
fun visitEnumConstructorCall(expression: IrEnumConstructorCall) = visitMemberAccess(expression)
|
||||
override fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: Nothing?) = visitEnumConstructorCall(expression)
|
||||
|
||||
fun visitGetClass(expression: IrGetClass) = visitExpression(expression)
|
||||
override fun visitGetClass(expression: IrGetClass, data: Nothing?) = visitGetClass(expression)
|
||||
|
||||
fun visitCallableReference(expression: IrCallableReference) = visitGeneralCall(expression)
|
||||
fun visitCallableReference(expression: IrCallableReference) = visitMemberAccess(expression)
|
||||
override fun visitCallableReference(expression: IrCallableReference, data: Nothing?) = visitCallableReference(expression)
|
||||
|
||||
fun visitClassReference(expression: IrClassReference) = visitDeclarationReference(expression)
|
||||
|
||||
@@ -64,13 +64,13 @@ interface IrElementVisitor<out R, in D> {
|
||||
fun visitGetField(expression: IrGetField, data: D) = visitFieldAccess(expression, data)
|
||||
fun visitSetField(expression: IrSetField, data: D) = visitFieldAccess(expression, data)
|
||||
fun visitGetExtensionReceiver(expression: IrGetExtensionReceiver, data: D) = visitDeclarationReference(expression, data)
|
||||
fun visitGeneralCall(expression: IrGeneralCall, data: D) = visitDeclarationReference(expression, data)
|
||||
fun visitCall(expression: IrCall, data: D) = visitGeneralCall(expression, data)
|
||||
fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: D) = visitGeneralCall(expression, data)
|
||||
fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: D) = visitGeneralCall(expression, data)
|
||||
fun visitMemberAccess(expression: IrMemberAccessExpression, data: D) = visitDeclarationReference(expression, data)
|
||||
fun visitCall(expression: IrCall, data: D) = visitMemberAccess(expression, data)
|
||||
fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: D) = visitMemberAccess(expression, data)
|
||||
fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: D) = visitMemberAccess(expression, data)
|
||||
fun visitGetClass(expression: IrGetClass, data: D) = visitExpression(expression, data)
|
||||
|
||||
fun visitCallableReference(expression: IrCallableReference, data: D) = visitGeneralCall(expression, data)
|
||||
fun visitCallableReference(expression: IrCallableReference, data: D) = visitMemberAccess(expression, data)
|
||||
fun visitClassReference(expression: IrClassReference, data: D) = visitDeclarationReference(expression, data)
|
||||
|
||||
fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: D) = visitExpression(expression, data)
|
||||
|
||||
@@ -135,22 +135,22 @@ interface IrElementVisitorVoid : IrElementVisitor<Unit, Nothing?> {
|
||||
fun visitGetExtensionReceiver(expression: IrGetExtensionReceiver) = visitDeclarationReference(expression)
|
||||
override fun visitGetExtensionReceiver(expression: IrGetExtensionReceiver, data: Nothing?) = visitGetExtensionReceiver(expression)
|
||||
|
||||
fun visitGeneralCall(expression: IrGeneralCall) = visitDeclarationReference(expression)
|
||||
override fun visitGeneralCall(expression: IrGeneralCall, data: Nothing?) = visitGeneralCall(expression)
|
||||
fun visitMemberAccess(expression: IrMemberAccessExpression) = visitDeclarationReference(expression)
|
||||
override fun visitMemberAccess(expression: IrMemberAccessExpression, data: Nothing?) = visitMemberAccess(expression)
|
||||
|
||||
fun visitCall(expression: IrCall) = visitGeneralCall(expression)
|
||||
fun visitCall(expression: IrCall) = visitMemberAccess(expression)
|
||||
override fun visitCall(expression: IrCall, data: Nothing?) = visitCall(expression)
|
||||
|
||||
fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall) = visitGeneralCall(expression)
|
||||
fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall) = visitMemberAccess(expression)
|
||||
override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: Nothing?) = visitDelegatingConstructorCall(expression)
|
||||
|
||||
fun visitEnumConstructorCall(expression: IrEnumConstructorCall) = visitGeneralCall(expression)
|
||||
fun visitEnumConstructorCall(expression: IrEnumConstructorCall) = visitMemberAccess(expression)
|
||||
override fun visitEnumConstructorCall(expression: IrEnumConstructorCall, data: Nothing?) = visitEnumConstructorCall(expression)
|
||||
|
||||
fun visitGetClass(expression: IrGetClass) = visitExpression(expression)
|
||||
override fun visitGetClass(expression: IrGetClass, data: Nothing?) = visitGetClass(expression)
|
||||
|
||||
fun visitCallableReference(expression: IrCallableReference) = visitGeneralCall(expression)
|
||||
fun visitCallableReference(expression: IrCallableReference) = visitMemberAccess(expression)
|
||||
override fun visitCallableReference(expression: IrCallableReference, data: Nothing?) = visitCallableReference(expression)
|
||||
|
||||
fun visitClassReference(expression: IrClassReference) = visitDeclarationReference(expression)
|
||||
|
||||
Reference in New Issue
Block a user