Psi2Ir: make most declarations internal, remove unused
The main motivation is to avoid pollution in autocompletion in IDE, and avoid clashes for some common names. A lot of stuff was declared public seemingly by accident. It is only used, and can only be meaningfully used, from within the psi2ir module.
This commit is contained in:
committed by
Space Team
parent
bd3eb81aee
commit
f91e1fa7fd
@@ -33,13 +33,13 @@ import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.TypeUtils
|
||||
|
||||
fun KotlinType.containsNull() =
|
||||
internal fun KotlinType.containsNull(): Boolean =
|
||||
TypeUtils.isNullableType(this)
|
||||
|
||||
fun KtElement.deparenthesize(): KtElement =
|
||||
if (this is KtExpression) KtPsiUtil.safeDeparenthesize(this) else this
|
||||
|
||||
fun ResolvedCall<*>.isValueArgumentReorderingRequired(): Boolean {
|
||||
internal fun ResolvedCall<*>.isValueArgumentReorderingRequired(): Boolean {
|
||||
var lastValueParameterIndex = -1
|
||||
for (valueArgument in call.valueArguments) {
|
||||
val argumentMapping =
|
||||
@@ -53,7 +53,7 @@ fun ResolvedCall<*>.isValueArgumentReorderingRequired(): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
fun KtSecondaryConstructor.isConstructorDelegatingToSuper(bindingContext: BindingContext): Boolean {
|
||||
internal fun KtSecondaryConstructor.isConstructorDelegatingToSuper(bindingContext: BindingContext): Boolean {
|
||||
val constructorDescriptor = bindingContext.get(BindingContext.CONSTRUCTOR, this) ?: return false
|
||||
val delegatingResolvedCall = getDelegationCall().getResolvedCall(bindingContext)
|
||||
return if (delegatingResolvedCall != null) {
|
||||
@@ -68,13 +68,13 @@ fun KtSecondaryConstructor.isConstructorDelegatingToSuper(bindingContext: Bindin
|
||||
fun MemberScope.findSingleFunction(name: Name): FunctionDescriptor =
|
||||
getContributedFunctions(name, NoLookupLocation.FROM_BACKEND).single()
|
||||
|
||||
val PsiElement?.startOffsetOrUndefined get() = this?.startOffsetSkippingComments ?: UNDEFINED_OFFSET
|
||||
val PsiElement?.endOffsetOrUndefined get() = this?.endOffset ?: UNDEFINED_OFFSET
|
||||
internal val PsiElement?.startOffsetOrUndefined get() = this?.startOffsetSkippingComments ?: UNDEFINED_OFFSET
|
||||
internal val PsiElement?.endOffsetOrUndefined get() = this?.endOffset ?: UNDEFINED_OFFSET
|
||||
|
||||
val PropertyDescriptor.unwrappedGetMethod: FunctionDescriptor?
|
||||
internal val PropertyDescriptor.unwrappedGetMethod: FunctionDescriptor?
|
||||
get() = if (this is SyntheticPropertyDescriptor) this.getMethod else getter
|
||||
|
||||
val PropertyDescriptor.unwrappedSetMethod: FunctionDescriptor?
|
||||
internal val PropertyDescriptor.unwrappedSetMethod: FunctionDescriptor?
|
||||
get() = if (this is SyntheticPropertyDescriptor) this.setMethod else setter
|
||||
|
||||
// Only works for descriptors of Java fields.
|
||||
@@ -90,7 +90,7 @@ internal fun PropertyDescriptor.resolveFakeOverride(): PropertyDescriptor {
|
||||
return current
|
||||
}
|
||||
|
||||
val KtPureElement?.pureStartOffsetOrUndefined get() = this?.psiOrParent?.startOffsetSkippingComments ?: UNDEFINED_OFFSET
|
||||
val KtPureElement?.pureEndOffsetOrUndefined get() = this?.psiOrParent?.endOffset ?: UNDEFINED_OFFSET
|
||||
internal val KtPureElement?.pureStartOffsetOrUndefined get() = this?.psiOrParent?.startOffsetSkippingComments ?: UNDEFINED_OFFSET
|
||||
internal val KtPureElement?.pureEndOffsetOrUndefined get() = this?.psiOrParent?.endOffset ?: UNDEFINED_OFFSET
|
||||
|
||||
fun KtElement.getChildTokenStartOffsetOrNull(tokenSet: TokenSet) = node.findChildByType(tokenSet)?.startOffset
|
||||
internal fun KtElement.getChildTokenStartOffsetOrNull(tokenSet: TokenSet) = node.findChildByType(tokenSet)?.startOffset
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
|
||||
class AnnotationGenerator(context: GeneratorContext) : IrElementVisitorVoid {
|
||||
internal class AnnotationGenerator(context: GeneratorContext) : IrElementVisitorVoid {
|
||||
private val typeTranslator = context.typeTranslator
|
||||
private val constantValueGenerator = context.constantValueGenerator
|
||||
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.psi.KtBlockExpression
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
|
||||
class AnonymousInitializerGenerator(
|
||||
internal class AnonymousInitializerGenerator(
|
||||
declarationGenerator: DeclarationGenerator
|
||||
) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||
|
||||
|
||||
+21
-21
@@ -54,10 +54,10 @@ import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||
import kotlin.math.max
|
||||
import kotlin.math.min
|
||||
|
||||
fun StatementGenerator.generateReceiverOrNull(ktDefaultElement: KtElement, receiver: ReceiverValue?): IntermediateValue? =
|
||||
internal fun StatementGenerator.generateReceiverOrNull(ktDefaultElement: KtElement, receiver: ReceiverValue?): IntermediateValue? =
|
||||
receiver?.let { generateReceiver(ktDefaultElement, receiver) }
|
||||
|
||||
fun StatementGenerator.generateContextReceiverForDelegatingConstructorCall(
|
||||
private fun StatementGenerator.generateContextReceiverForDelegatingConstructorCall(
|
||||
ktDefaultElement: KtElement,
|
||||
receiver: ContextClassReceiver?
|
||||
): IntermediateValue? =
|
||||
@@ -69,7 +69,7 @@ fun StatementGenerator.generateContextReceiverForDelegatingConstructorCall(
|
||||
)
|
||||
}
|
||||
|
||||
fun StatementGenerator.generateContextReceiverForDelegatingConstructorCall(
|
||||
private fun StatementGenerator.generateContextReceiverForDelegatingConstructorCall(
|
||||
defaultStartOffset: Int,
|
||||
defaultEndOffset: Int,
|
||||
receiver: ContextClassReceiver
|
||||
@@ -85,10 +85,10 @@ fun StatementGenerator.generateContextReceiverForDelegatingConstructorCall(
|
||||
}
|
||||
}
|
||||
|
||||
fun StatementGenerator.generateReceiver(ktDefaultElement: KtElement, receiver: ReceiverValue): IntermediateValue =
|
||||
private fun StatementGenerator.generateReceiver(ktDefaultElement: KtElement, receiver: ReceiverValue): IntermediateValue =
|
||||
generateReceiver(ktDefaultElement.startOffsetSkippingComments, ktDefaultElement.endOffset, receiver)
|
||||
|
||||
fun StatementGenerator.generateReceiver(defaultStartOffset: Int, defaultEndOffset: Int, receiver: ReceiverValue): IntermediateValue {
|
||||
private fun StatementGenerator.generateReceiver(defaultStartOffset: Int, defaultEndOffset: Int, receiver: ReceiverValue): IntermediateValue {
|
||||
val irReceiverType =
|
||||
when (receiver) {
|
||||
is ExtensionReceiver ->
|
||||
@@ -145,7 +145,7 @@ fun StatementGenerator.generateReceiver(defaultStartOffset: Int, defaultEndOffse
|
||||
}
|
||||
}
|
||||
|
||||
fun StatementGenerator.loadContextReceiver(
|
||||
internal fun StatementGenerator.loadContextReceiver(
|
||||
receiver: ContextClassReceiver,
|
||||
defaultStartOffset: Int, defaultEndOffset: Int,
|
||||
): IrGetFieldImpl {
|
||||
@@ -165,7 +165,7 @@ fun StatementGenerator.loadContextReceiver(
|
||||
}
|
||||
|
||||
|
||||
fun StatementGenerator.generateSingletonReference(
|
||||
internal fun StatementGenerator.generateSingletonReference(
|
||||
descriptor: ClassDescriptor,
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
@@ -216,7 +216,7 @@ fun IrExpression.implicitCastTo(expectedType: IrType?): IrExpression {
|
||||
return IrTypeOperatorCallImpl(startOffset, endOffset, expectedType, IrTypeOperator.IMPLICIT_CAST, expectedType, this)
|
||||
}
|
||||
|
||||
fun StatementGenerator.generateBackingFieldReceiver(
|
||||
internal fun StatementGenerator.generateBackingFieldReceiver(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
resolvedCall: ResolvedCall<*>?,
|
||||
@@ -226,7 +226,7 @@ fun StatementGenerator.generateBackingFieldReceiver(
|
||||
return this.generateReceiver(startOffset, endOffset, receiver)
|
||||
}
|
||||
|
||||
fun StatementGenerator.generateCallReceiver(
|
||||
internal fun StatementGenerator.generateCallReceiver(
|
||||
ktDefaultElement: KtElement,
|
||||
calleeDescriptor: CallableDescriptor,
|
||||
dispatchReceiver: ReceiverValue?,
|
||||
@@ -355,11 +355,11 @@ private fun StatementGenerator.generateVarargExpressionUsing(
|
||||
return irVararg
|
||||
}
|
||||
|
||||
fun StatementGenerator.generateValueArgument(
|
||||
private fun StatementGenerator.generateValueArgument(
|
||||
valueArgument: ResolvedValueArgument,
|
||||
valueParameter: ValueParameterDescriptor,
|
||||
resolvedCall: ResolvedCall<*>
|
||||
) = generateValueArgumentUsing(valueArgument, valueParameter, resolvedCall) { generateExpression(it) }
|
||||
): IrExpression? = generateValueArgumentUsing(valueArgument, valueParameter, resolvedCall) { generateExpression(it) }
|
||||
|
||||
private fun StatementGenerator.generateValueArgumentUsing(
|
||||
valueArgument: ResolvedValueArgument,
|
||||
@@ -500,21 +500,21 @@ private fun StatementGenerator.createFunctionForSuspendConversion(
|
||||
return irAdapterFun
|
||||
}
|
||||
|
||||
fun StatementGenerator.castArgumentToFunctionalInterfaceForSamType(irExpression: IrExpression, samType: KotlinType): IrExpression {
|
||||
internal fun StatementGenerator.castArgumentToFunctionalInterfaceForSamType(irExpression: IrExpression, samType: KotlinType): IrExpression {
|
||||
val kotlinFunctionType = samType.getSubstitutedFunctionTypeForSamType()
|
||||
val irFunctionType = context.typeTranslator.translateType(kotlinFunctionType)
|
||||
return irExpression.implicitCastTo(irFunctionType)
|
||||
}
|
||||
|
||||
fun Generator.getSuperQualifier(resolvedCall: ResolvedCall<*>): ClassDescriptor? {
|
||||
internal fun Generator.getSuperQualifier(resolvedCall: ResolvedCall<*>): ClassDescriptor? {
|
||||
val superCallExpression = getSuperCallExpression(resolvedCall.call) ?: return null
|
||||
return getOrFail(BindingContext.REFERENCE_TARGET, superCallExpression.instanceReference) as ClassDescriptor
|
||||
}
|
||||
|
||||
fun StatementGenerator.pregenerateCall(resolvedCall: ResolvedCall<*>): CallBuilder =
|
||||
internal fun StatementGenerator.pregenerateCall(resolvedCall: ResolvedCall<*>): CallBuilder =
|
||||
pregenerateCallUsing(resolvedCall) { generateExpression(it) }
|
||||
|
||||
fun StatementGenerator.pregenerateCallUsing(
|
||||
internal fun StatementGenerator.pregenerateCallUsing(
|
||||
resolvedCall: ResolvedCall<*>,
|
||||
generateArgumentExpression: (KtExpression) -> IrExpression?
|
||||
): CallBuilder {
|
||||
@@ -527,7 +527,7 @@ fun StatementGenerator.pregenerateCallUsing(
|
||||
return call
|
||||
}
|
||||
|
||||
fun getTypeArguments(resolvedCall: ResolvedCall<*>?): Map<TypeParameterDescriptor, KotlinType>? {
|
||||
internal fun getTypeArguments(resolvedCall: ResolvedCall<*>?): Map<TypeParameterDescriptor, KotlinType>? {
|
||||
if (resolvedCall == null) return null
|
||||
|
||||
val descriptor = resolvedCall.resultingDescriptor
|
||||
@@ -537,7 +537,7 @@ fun getTypeArguments(resolvedCall: ResolvedCall<*>?): Map<TypeParameterDescripto
|
||||
}
|
||||
|
||||
|
||||
fun StatementGenerator.pregenerateExtensionInvokeCall(resolvedCall: ResolvedCall<*>): CallBuilder {
|
||||
private fun StatementGenerator.pregenerateExtensionInvokeCall(resolvedCall: ResolvedCall<*>): CallBuilder {
|
||||
val extensionInvoke = resolvedCall.resultingDescriptor
|
||||
val functionNClass = extensionInvoke.containingDeclaration as? ClassDescriptor
|
||||
?: throw AssertionError("'invoke' should be a class member: $extensionInvoke")
|
||||
@@ -606,7 +606,7 @@ private fun ResolvedCall<*>.isExtensionInvokeCall(): Boolean {
|
||||
return extensionReceiver != null
|
||||
}
|
||||
|
||||
fun StatementGenerator.generateSamConversionForValueArgumentsIfRequired(call: CallBuilder, resolvedCall: ResolvedCall<*>) {
|
||||
internal fun StatementGenerator.generateSamConversionForValueArgumentsIfRequired(call: CallBuilder, resolvedCall: ResolvedCall<*>) {
|
||||
val samConversion = context.extensions.samConversion
|
||||
|
||||
val originalDescriptor = resolvedCall.resultingDescriptor
|
||||
@@ -751,7 +751,7 @@ private fun StatementGenerator.getSamTypeForValueParameter(valueParameter: Value
|
||||
)
|
||||
}
|
||||
|
||||
fun StatementGenerator.pregenerateValueArgumentsUsing(
|
||||
internal fun StatementGenerator.pregenerateValueArgumentsUsing(
|
||||
call: CallBuilder,
|
||||
resolvedCall: ResolvedCall<*>,
|
||||
generateArgumentExpression: (KtExpression) -> IrExpression?
|
||||
@@ -763,7 +763,7 @@ fun StatementGenerator.pregenerateValueArgumentsUsing(
|
||||
}
|
||||
}
|
||||
|
||||
fun StatementGenerator.pregenerateCallReceivers(resolvedCall: ResolvedCall<*>): CallBuilder {
|
||||
internal fun StatementGenerator.pregenerateCallReceivers(resolvedCall: ResolvedCall<*>): CallBuilder {
|
||||
val call = unwrapCallableDescriptorAndTypeArguments(resolvedCall)
|
||||
|
||||
call.callReceiver = generateCallReceiver(
|
||||
@@ -790,7 +790,7 @@ private fun unwrapSpecialDescriptor(descriptor: CallableDescriptor): CallableDes
|
||||
descriptor.getOriginalForFunctionInterfaceAdapter()?.let { unwrapSpecialDescriptor(it) } ?: descriptor
|
||||
}
|
||||
|
||||
fun unwrapCallableDescriptorAndTypeArguments(resolvedCall: ResolvedCall<*>): CallBuilder {
|
||||
internal fun unwrapCallableDescriptorAndTypeArguments(resolvedCall: ResolvedCall<*>): CallBuilder {
|
||||
val originalDescriptor = resolvedCall.resultingDescriptor
|
||||
val candidateDescriptor = resolvedCall.candidateDescriptor
|
||||
|
||||
|
||||
+1
-1
@@ -41,7 +41,7 @@ import org.jetbrains.kotlin.resolve.calls.tasks.isDynamic
|
||||
import org.jetbrains.kotlin.resolve.calls.util.FakeCallableDescriptorForObject
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
internal class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
|
||||
fun generateAssignment(ktExpression: KtBinaryExpression, origin: IrStatementOrigin): IrExpression {
|
||||
return if (getResolvedCall(ktExpression) != null) {
|
||||
|
||||
@@ -39,11 +39,11 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassOrAny
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.typeUtil.isUnit
|
||||
|
||||
interface LoopResolver {
|
||||
internal interface LoopResolver {
|
||||
fun getLoop(expression: KtExpression): IrLoop?
|
||||
}
|
||||
|
||||
class BodyGenerator(
|
||||
internal class BodyGenerator(
|
||||
val scopeOwnerSymbol: IrSymbol,
|
||||
override val context: GeneratorContext,
|
||||
private val parentLoopResolver: LoopResolver?
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression
|
||||
import org.jetbrains.kotlin.utils.SmartList
|
||||
|
||||
class BranchingExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
internal class BranchingExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
|
||||
fun generateIfExpression(expression: KtIfExpression): IrExpression {
|
||||
var ktLastIf: KtIfExpression = expression
|
||||
|
||||
@@ -38,7 +38,7 @@ import org.jetbrains.kotlin.resolve.calls.util.FakeCallableDescriptorForObject
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.classValueType
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
class CallGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
internal class CallGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
fun generateCall(startOffset: Int, endOffset: Int, call: CallBuilder, origin: IrStatementOrigin? = null): IrExpression {
|
||||
val descriptor = call.descriptor
|
||||
|
||||
@@ -454,23 +454,24 @@ class CallGenerator(statementGenerator: StatementGenerator) : StatementGenerator
|
||||
}
|
||||
}
|
||||
|
||||
fun IrExpression.isUnchanging() =
|
||||
fun IrExpression.isUnchanging(): Boolean =
|
||||
this is IrFunctionExpression ||
|
||||
(this is IrCallableReference<*> && dispatchReceiver == null && extensionReceiver == null) ||
|
||||
this is IrClassReference ||
|
||||
this is IrConst<*> ||
|
||||
(this is IrGetValue && !symbol.owner.let { it is IrVariable && it.isVar })
|
||||
|
||||
fun IrExpression.hasNoSideEffects() = isUnchanging() || this is IrGetValue
|
||||
fun IrExpression.hasNoSideEffects(): Boolean =
|
||||
isUnchanging() || this is IrGetValue
|
||||
|
||||
fun CallGenerator.generateCall(
|
||||
internal fun CallGenerator.generateCall(
|
||||
ktElement: KtElement,
|
||||
call: CallBuilder,
|
||||
origin: IrStatementOrigin? = null,
|
||||
startOffset: Int = ktElement.startOffsetSkippingComments,
|
||||
endOffset: Int = ktElement.endOffset,
|
||||
) =
|
||||
): IrExpression =
|
||||
generateCall(startOffset, endOffset, call, origin)
|
||||
|
||||
fun CallGenerator.generateCall(irExpression: IrExpression, call: CallBuilder, origin: IrStatementOrigin? = null) =
|
||||
internal fun CallGenerator.generateCall(irExpression: IrExpression, call: CallBuilder, origin: IrStatementOrigin? = null): IrExpression =
|
||||
generateCall(irExpression.startOffset, irExpression.endOffset, call, origin)
|
||||
|
||||
@@ -57,7 +57,7 @@ import org.jetbrains.kotlin.types.TypeSubstitutor
|
||||
import org.jetbrains.kotlin.utils.newHashMapWithExpectedSize
|
||||
|
||||
@ObsoleteDescriptorBasedAPI
|
||||
class ClassGenerator(
|
||||
internal class ClassGenerator(
|
||||
declarationGenerator: DeclarationGenerator
|
||||
) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||
fun generateClass(ktClassOrObject: KtPureClassOrObject, visibility_: DescriptorVisibility? = null): IrClass {
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.getSourceForArgument
|
||||
import org.jetbrains.kotlin.resolve.source.getPsi
|
||||
|
||||
class ConstantValueGeneratorImpl(
|
||||
internal class ConstantValueGeneratorImpl(
|
||||
moduleDescriptor: ModuleDescriptor,
|
||||
symbolTable: ReferenceSymbolTable,
|
||||
typeTranslator: TypeTranslator,
|
||||
|
||||
+1
-1
@@ -41,7 +41,7 @@ import org.jetbrains.kotlin.types.typeUtil.representativeUpperBound
|
||||
* This one uses [DataClassMethodGenerator] to determine which members are needed to generate; uses [DataClassMembersGenerator] to generate
|
||||
* function bodies; and provides ways to declare functions or parameters based on descriptors and binding context.
|
||||
*/
|
||||
class DataClassMembersGenerator(
|
||||
internal class DataClassMembersGenerator(
|
||||
declarationGenerator: DeclarationGenerator,
|
||||
private val generateBodies: Boolean
|
||||
) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||
|
||||
+1
-1
@@ -207,5 +207,5 @@ abstract class DeclarationGeneratorExtension(val declarationGenerator: Declarati
|
||||
fun KotlinType.toIrType() = with(declarationGenerator) { toIrType() }
|
||||
}
|
||||
|
||||
fun Generator.createBodyGenerator(scopeOwnerSymbol: IrSymbol, parentLoopResolver: LoopResolver? = null) =
|
||||
internal fun Generator.createBodyGenerator(scopeOwnerSymbol: IrSymbol, parentLoopResolver: LoopResolver? = null) =
|
||||
BodyGenerator(scopeOwnerSymbol, context, parentLoopResolver)
|
||||
|
||||
+3
-1
@@ -45,7 +45,9 @@ import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.typeUtil.replaceArgumentsWithStarProjections
|
||||
|
||||
class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||
internal class DelegatedPropertyGenerator(
|
||||
declarationGenerator: DeclarationGenerator
|
||||
) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||
constructor(context: GeneratorContext) : this(DeclarationGenerator(context))
|
||||
|
||||
fun generateDelegatedProperty(
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.psi2ir.generators
|
||||
import org.jetbrains.kotlin.ir.declarations.IrField
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||
|
||||
class DescriptorStorageForContextReceivers {
|
||||
internal class DescriptorStorageForContextReceivers {
|
||||
private val syntheticFieldStorage: MutableMap<ReceiverValue, IrField> = mutableMapOf()
|
||||
|
||||
fun put(receiverValue: ReceiverValue, irField: IrField) {
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
import org.jetbrains.kotlin.types.error.ErrorTypeKind
|
||||
import org.jetbrains.kotlin.types.error.ErrorUtils
|
||||
|
||||
class ErrorExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
internal class ErrorExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
private val ignoreErrors: Boolean get() = context.configuration.ignoreErrors
|
||||
|
||||
private inline fun generateErrorExpression(ktElement: KtElement, e: Throwable? = null, body: () -> IrExpression): IrExpression =
|
||||
|
||||
+1
-1
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.propertyIfAccessor
|
||||
|
||||
@ObsoleteDescriptorBasedAPI
|
||||
class FunctionGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||
internal class FunctionGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||
|
||||
constructor(context: GeneratorContext) : this(DeclarationGenerator(context))
|
||||
|
||||
|
||||
@@ -23,43 +23,40 @@ import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
import org.jetbrains.kotlin.psi2ir.descriptors.IrBuiltInsOverDescriptors
|
||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression
|
||||
import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall
|
||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||
import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.util.slicedMap.ReadOnlySlice
|
||||
|
||||
|
||||
interface Generator : IrGenerator {
|
||||
internal interface Generator : IrGenerator {
|
||||
override val context: GeneratorContext
|
||||
}
|
||||
|
||||
interface GeneratorWithScope : Generator, IrGeneratorWithScope
|
||||
internal interface GeneratorWithScope : Generator, IrGeneratorWithScope
|
||||
|
||||
|
||||
fun <K, V : Any> Generator.get(slice: ReadOnlySlice<K, V>, key: K): V? =
|
||||
internal fun <K, V : Any> Generator.get(slice: ReadOnlySlice<K, V>, key: K): V? =
|
||||
context.bindingContext[slice, key]
|
||||
|
||||
fun <K, V : Any> Generator.getOrFail(slice: ReadOnlySlice<K, V>, key: K): V =
|
||||
internal fun <K, V : Any> Generator.getOrFail(slice: ReadOnlySlice<K, V>, key: K): V =
|
||||
context.bindingContext[slice, key] ?: throw RuntimeException("No $slice for $key")
|
||||
|
||||
inline fun <K, V : Any> Generator.getOrFail(slice: ReadOnlySlice<K, V>, key: K, message: (K) -> String): V =
|
||||
internal inline fun <K, V : Any> Generator.getOrFail(slice: ReadOnlySlice<K, V>, key: K, message: (K) -> String): V =
|
||||
context.bindingContext[slice, key] ?: throw RuntimeException(message(key))
|
||||
|
||||
fun Generator.getTypeInferredByFrontend(key: KtExpression): KotlinType? =
|
||||
internal fun Generator.getTypeInferredByFrontend(key: KtExpression): KotlinType? =
|
||||
context.bindingContext.getType(key)
|
||||
|
||||
fun Generator.getTypeInferredByFrontendOrFail(key: KtExpression): KotlinType =
|
||||
internal fun Generator.getTypeInferredByFrontendOrFail(key: KtExpression): KotlinType =
|
||||
getTypeInferredByFrontend(key) ?: throw RuntimeException("No type for expression: ${key.text}")
|
||||
|
||||
fun Generator.getExpressionTypeWithCoercionToUnit(key: KtExpression): KotlinType? =
|
||||
internal fun Generator.getExpressionTypeWithCoercionToUnit(key: KtExpression): KotlinType? =
|
||||
if (key.isUsedAsExpression(context.bindingContext))
|
||||
getTypeInferredByFrontend(key)
|
||||
else
|
||||
(context.irBuiltIns as IrBuiltInsOverDescriptors).unit
|
||||
|
||||
fun Generator.getExpressionTypeWithCoercionToUnitOrFail(key: KtExpression): KotlinType =
|
||||
internal fun Generator.getExpressionTypeWithCoercionToUnitOrFail(key: KtExpression): KotlinType =
|
||||
getExpressionTypeWithCoercionToUnit(key) ?: throw RuntimeException("No type for expression: ${key.text}")
|
||||
|
||||
fun Generator.getResolvedCall(key: KtElement): ResolvedCall<out CallableDescriptor>? =
|
||||
internal fun Generator.getResolvedCall(key: KtElement): ResolvedCall<out CallableDescriptor>? =
|
||||
key.getResolvedCall(context.bindingContext)
|
||||
|
||||
|
||||
+1
-1
@@ -67,7 +67,7 @@ class GeneratorContext private constructor(
|
||||
// TODO: inject a correct StorageManager instance, or store NotFoundClasses inside ModuleDescriptor
|
||||
val reflectionTypes = ReflectionTypes(moduleDescriptor, NotFoundClasses(LockBasedStorageManager.NO_LOCKS, moduleDescriptor))
|
||||
|
||||
val additionalDescriptorStorage: DescriptorStorageForContextReceivers = DescriptorStorageForContextReceivers()
|
||||
internal val additionalDescriptorStorage: DescriptorStorageForContextReceivers = DescriptorStorageForContextReceivers()
|
||||
|
||||
val samTypeApproximator = SamTypeApproximator(moduleDescriptor.builtIns, languageVersionSettings)
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
|
||||
class IrSyntheticDeclarationGenerator(context: GeneratorContext) : IrElementVisitorVoid {
|
||||
internal class IrSyntheticDeclarationGenerator(context: GeneratorContext) : IrElementVisitorVoid {
|
||||
fun generateSyntheticDeclarations(file: IrFile) {
|
||||
try {
|
||||
file.acceptChildrenVoid(this)
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.psi.KtObjectLiteralExpression
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
|
||||
class LocalClassGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
internal class LocalClassGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
fun generateObjectLiteral(ktObjectLiteral: KtObjectLiteralExpression): IrStatement {
|
||||
val startOffset = ktObjectLiteral.startOffsetSkippingComments
|
||||
val endOffset = ktObjectLiteral.endOffset
|
||||
|
||||
+2
-2
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.isInlineableFunctionLiteral
|
||||
|
||||
class LocalFunctionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
internal class LocalFunctionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
|
||||
fun generateLambda(ktLambda: KtLambdaExpression): IrStatement {
|
||||
val ktFun = ktLambda.functionLiteral
|
||||
@@ -69,4 +69,4 @@ class LocalFunctionGenerator(statementGenerator: StatementGenerator) : Statement
|
||||
else null,
|
||||
IrDeclarationOrigin.LOCAL_FUNCTION
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.psi2ir.intermediate.VariableLValue
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.setExplicitReceiverValue
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
|
||||
class LoopExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
internal class LoopExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
fun generateWhileLoop(ktWhile: KtWhileExpression): IrExpression {
|
||||
val irLoop = IrWhileLoopImpl(
|
||||
ktWhile.startOffsetSkippingComments, ktWhile.endOffset,
|
||||
@@ -222,4 +222,4 @@ class LoopExpressionGenerator(statementGenerator: StatementGenerator) : Statemen
|
||||
|
||||
return irForBlock
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+12
-16
@@ -21,8 +21,7 @@ import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||
import org.jetbrains.kotlin.ir.expressions.IrTypeOperator
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
|
||||
|
||||
fun getInfixOperator(ktOperator: IElementType): IrStatementOrigin? =
|
||||
internal fun getInfixOperator(ktOperator: IElementType): IrStatementOrigin? =
|
||||
when (ktOperator) {
|
||||
KtTokens.EQ -> IrStatementOrigin.EQ
|
||||
KtTokens.PLUSEQ -> IrStatementOrigin.PLUSEQ
|
||||
@@ -53,7 +52,7 @@ fun getInfixOperator(ktOperator: IElementType): IrStatementOrigin? =
|
||||
else -> null
|
||||
}
|
||||
|
||||
fun getPrefixOperator(ktOperator: IElementType): IrStatementOrigin? =
|
||||
internal fun getPrefixOperator(ktOperator: IElementType): IrStatementOrigin? =
|
||||
when (ktOperator) {
|
||||
KtTokens.PLUSPLUS -> IrStatementOrigin.PREFIX_INCR
|
||||
KtTokens.MINUSMINUS -> IrStatementOrigin.PREFIX_DECR
|
||||
@@ -63,7 +62,7 @@ fun getPrefixOperator(ktOperator: IElementType): IrStatementOrigin? =
|
||||
else -> null
|
||||
}
|
||||
|
||||
fun getPostfixOperator(ktOperator: IElementType): IrStatementOrigin? =
|
||||
internal fun getPostfixOperator(ktOperator: IElementType): IrStatementOrigin? =
|
||||
when (ktOperator) {
|
||||
KtTokens.PLUSPLUS -> IrStatementOrigin.POSTFIX_INCR
|
||||
KtTokens.MINUSMINUS -> IrStatementOrigin.POSTFIX_DECR
|
||||
@@ -71,7 +70,7 @@ fun getPostfixOperator(ktOperator: IElementType): IrStatementOrigin? =
|
||||
else -> null
|
||||
}
|
||||
|
||||
fun getIrTypeOperator(ktOperator: IElementType): IrTypeOperator? =
|
||||
internal fun getIrTypeOperator(ktOperator: IElementType): IrTypeOperator? =
|
||||
when (ktOperator) {
|
||||
KtTokens.IS_KEYWORD -> IrTypeOperator.INSTANCEOF
|
||||
KtTokens.NOT_IS -> IrTypeOperator.NOT_INSTANCEOF
|
||||
@@ -80,10 +79,10 @@ fun getIrTypeOperator(ktOperator: IElementType): IrTypeOperator? =
|
||||
else -> null
|
||||
}
|
||||
|
||||
val AUGMENTED_ASSIGNMENTS =
|
||||
internal val AUGMENTED_ASSIGNMENTS =
|
||||
setOf(IrStatementOrigin.PLUSEQ, IrStatementOrigin.MINUSEQ, IrStatementOrigin.MULTEQ, IrStatementOrigin.DIVEQ, IrStatementOrigin.PERCEQ)
|
||||
|
||||
val OPERATORS_DESUGARED_TO_CALLS =
|
||||
internal val OPERATORS_DESUGARED_TO_CALLS =
|
||||
setOf(
|
||||
IrStatementOrigin.PLUS,
|
||||
IrStatementOrigin.MINUS,
|
||||
@@ -97,23 +96,20 @@ val OPERATORS_DESUGARED_TO_CALLS =
|
||||
IrStatementOrigin.UPLUS
|
||||
)
|
||||
|
||||
val COMPARISON_OPERATORS =
|
||||
internal val COMPARISON_OPERATORS =
|
||||
setOf(IrStatementOrigin.LT, IrStatementOrigin.LTEQ, IrStatementOrigin.GT, IrStatementOrigin.GTEQ)
|
||||
|
||||
val EQUALITY_OPERATORS =
|
||||
internal val EQUALITY_OPERATORS =
|
||||
setOf(IrStatementOrigin.EQEQ, IrStatementOrigin.EXCLEQ)
|
||||
|
||||
val IDENTITY_OPERATORS =
|
||||
internal val IDENTITY_OPERATORS =
|
||||
setOf(IrStatementOrigin.EQEQEQ, IrStatementOrigin.EXCLEQEQ)
|
||||
|
||||
val IN_OPERATORS =
|
||||
internal val IN_OPERATORS =
|
||||
setOf(IrStatementOrigin.IN, IrStatementOrigin.NOT_IN)
|
||||
|
||||
val BINARY_BOOLEAN_OPERATORS =
|
||||
internal val BINARY_BOOLEAN_OPERATORS =
|
||||
setOf(IrStatementOrigin.ANDAND, IrStatementOrigin.OROR)
|
||||
|
||||
val INCREMENT_DECREMENT_OPERATORS =
|
||||
internal val INCREMENT_DECREMENT_OPERATORS =
|
||||
setOf(IrStatementOrigin.PREFIX_INCR, IrStatementOrigin.PREFIX_DECR, IrStatementOrigin.POSTFIX_INCR, IrStatementOrigin.POSTFIX_DECR)
|
||||
|
||||
val POSTFIX_INCREMENT_DECREMENT_OPERATORS =
|
||||
setOf(IrStatementOrigin.POSTFIX_INCR, IrStatementOrigin.POSTFIX_DECR)
|
||||
+1
-2
@@ -51,8 +51,7 @@ import org.jetbrains.kotlin.types.typeUtil.makeNullable
|
||||
import kotlin.collections.contains
|
||||
import kotlin.collections.set
|
||||
|
||||
|
||||
class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
internal class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
|
||||
private fun createErrorExpression(ktExpression: KtExpression, text: String) =
|
||||
IrErrorExpressionImpl(
|
||||
|
||||
+1
-3
@@ -36,7 +36,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.hasBackingField
|
||||
|
||||
class PropertyGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||
internal class PropertyGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||
fun generatePropertyDeclaration(ktProperty: KtProperty): IrProperty {
|
||||
val propertyDescriptor = getPropertyDescriptor(ktProperty)
|
||||
val ktDelegate = ktProperty.delegate
|
||||
@@ -277,5 +277,3 @@ internal fun IrProperty.linkCorrespondingPropertySymbol() {
|
||||
getter?.correspondingPropertySymbol = symbol
|
||||
setter?.correspondingPropertySymbol = symbol
|
||||
}
|
||||
|
||||
|
||||
|
||||
+2
-2
@@ -48,7 +48,7 @@ import org.jetbrains.kotlin.types.TypeProjectionImpl
|
||||
import org.jetbrains.kotlin.types.TypeSubstitutor
|
||||
import org.jetbrains.kotlin.types.expressions.DoubleColonLHS
|
||||
|
||||
class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
internal class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
|
||||
fun generateClassLiteral(ktClassLiteral: KtClassLiteralExpression): IrExpression {
|
||||
val ktArgument = ktClassLiteral.receiverExpression!!
|
||||
@@ -669,4 +669,4 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St
|
||||
arguments.last().type,
|
||||
suspendFunction
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.calls.util.isSingleUnderscore
|
||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||
|
||||
class ScriptGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||
internal class ScriptGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
fun generateScriptDeclaration(ktScript: KtScript): IrDeclaration? {
|
||||
val descriptor = getOrFail(BindingContext.DECLARATION_TO_DESCRIPTOR, ktScript) as ScriptDescriptor
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.propertyIfAccessor
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
class StandaloneDeclarationGenerator(private val context: GeneratorContext) {
|
||||
internal class StandaloneDeclarationGenerator(private val context: GeneratorContext) {
|
||||
private val typeTranslator = context.typeTranslator
|
||||
private val symbolTable = context.symbolTable
|
||||
private val irFactory = context.irFactory
|
||||
|
||||
+2
-2
@@ -51,7 +51,7 @@ import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils
|
||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||
|
||||
class StatementGenerator(
|
||||
internal class StatementGenerator(
|
||||
val bodyGenerator: BodyGenerator,
|
||||
override val scope: Scope
|
||||
) : KtVisitor<IrStatement, Nothing?>(),
|
||||
@@ -553,7 +553,7 @@ class StatementGenerator(
|
||||
ReflectionReferencesGenerator(this).generateCallableReference(expression)
|
||||
}
|
||||
|
||||
abstract class StatementGeneratorExtension(val statementGenerator: StatementGenerator) : GeneratorWithScope {
|
||||
internal abstract class StatementGeneratorExtension(val statementGenerator: StatementGenerator) : GeneratorWithScope {
|
||||
override val scope: Scope get() = statementGenerator.scope
|
||||
override val context: GeneratorContext get() = statementGenerator.context
|
||||
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.ir.symbols.*
|
||||
import org.jetbrains.kotlin.ir.util.SYNTHETIC_OFFSET
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
|
||||
class SyntheticDeclarationsGenerator(context: GeneratorContext) : DeclarationDescriptorVisitor<Unit, IrDeclarationContainer?> {
|
||||
internal class SyntheticDeclarationsGenerator(context: GeneratorContext) : DeclarationDescriptorVisitor<Unit, IrDeclarationContainer?> {
|
||||
|
||||
private val generator = StandaloneDeclarationGenerator(context)
|
||||
private val symbolTable = context.symbolTable
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
|
||||
class TryCatchExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
internal class TryCatchExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
fun generateTryCatch(ktTry: KtTryExpression): IrExpression {
|
||||
val resultType = getExpressionTypeWithCoercionToUnitOrFail(ktTry).toIrType()
|
||||
val irTryCatch = IrTryImpl(ktTry.startOffsetSkippingComments, ktTry.endOffset, resultType)
|
||||
|
||||
@@ -15,15 +15,15 @@ import org.jetbrains.kotlin.resolve.sam.getFunctionTypeForAbstractMethod
|
||||
import org.jetbrains.kotlin.resolve.sam.getSingleAbstractMethodOrNull
|
||||
import org.jetbrains.kotlin.types.*
|
||||
|
||||
fun GeneratorExtensions.SamConversion.isSamType(kotlinType: KotlinType): Boolean {
|
||||
internal fun GeneratorExtensions.SamConversion.isSamType(kotlinType: KotlinType): Boolean {
|
||||
val descriptor = kotlinType.constructor.declarationDescriptor
|
||||
return descriptor is ClassDescriptor && descriptor.isFun ||
|
||||
isPlatformSamType(kotlinType)
|
||||
}
|
||||
|
||||
fun DeclarationDescriptor.isSamConstructor() = this is FunctionInterfaceConstructorDescriptor
|
||||
internal fun DeclarationDescriptor.isSamConstructor() = this is FunctionInterfaceConstructorDescriptor
|
||||
|
||||
fun CallableDescriptor.getOriginalForFunctionInterfaceAdapter() =
|
||||
internal fun CallableDescriptor.getOriginalForFunctionInterfaceAdapter() =
|
||||
when (this) {
|
||||
is FunctionInterfaceAdapterDescriptor<*> ->
|
||||
baseDescriptorForSynthetic
|
||||
@@ -33,7 +33,7 @@ fun CallableDescriptor.getOriginalForFunctionInterfaceAdapter() =
|
||||
null
|
||||
}
|
||||
|
||||
fun KotlinType.getSubstitutedFunctionTypeForSamType(): KotlinType =
|
||||
internal fun KotlinType.getSubstitutedFunctionTypeForSamType(): KotlinType =
|
||||
when (val unwrapped = this.unwrap()) {
|
||||
is SimpleType -> unwrapped.getSubstitutedFunctionTypeForSamType()
|
||||
is FlexibleType -> KotlinTypeFactory.flexibleType(
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@ import org.jetbrains.kotlin.resolve.calls.tasks.isDynamic
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
||||
|
||||
class ArrayAccessAssignmentReceiver(
|
||||
internal class ArrayAccessAssignmentReceiver(
|
||||
private val irArray: IrExpression,
|
||||
private val ktIndexExpressions: List<KtExpression>,
|
||||
private val irIndexExpressions: List<IrExpression>,
|
||||
|
||||
+1
-2
@@ -23,9 +23,8 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrSetFieldImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
class BackingFieldLValue(
|
||||
internal class BackingFieldLValue(
|
||||
private val context: IrGeneratorContext,
|
||||
private val startOffset: Int,
|
||||
private val endOffset: Int,
|
||||
|
||||
@@ -16,14 +16,17 @@
|
||||
|
||||
package org.jetbrains.kotlin.psi2ir.intermediate
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.psi2ir.generators.hasNoSideEffects
|
||||
import org.jetbrains.kotlin.psi2ir.isValueArgumentReorderingRequired
|
||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
class CallBuilder(
|
||||
internal class CallBuilder(
|
||||
val original: ResolvedCall<*>, // TODO get rid of "original", sometimes we want to generate a call without ResolvedCall
|
||||
val descriptor: CallableDescriptor,
|
||||
val typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
||||
@@ -41,47 +44,31 @@ class CallBuilder(
|
||||
irValueArgumentsByIndex[valueParameterDescriptor.index + parametersOffset]
|
||||
}
|
||||
|
||||
val CallBuilder.argumentsCount: Int
|
||||
internal val CallBuilder.argumentsCount: Int
|
||||
get() =
|
||||
irValueArgumentsByIndex.size
|
||||
|
||||
var CallBuilder.lastArgument: IrExpression?
|
||||
internal var CallBuilder.lastArgument: IrExpression?
|
||||
get() = irValueArgumentsByIndex.last()
|
||||
set(value) {
|
||||
irValueArgumentsByIndex[argumentsCount - 1] = value
|
||||
}
|
||||
|
||||
fun CallBuilder.getValueArgumentsInParameterOrder(): List<IrExpression?> =
|
||||
internal fun CallBuilder.getValueArgumentsInParameterOrder(): List<IrExpression?> =
|
||||
descriptor.valueParameters.map { irValueArgumentsByIndex[it.index] }
|
||||
|
||||
fun CallBuilder.isValueArgumentReorderingRequired() =
|
||||
internal fun CallBuilder.isValueArgumentReorderingRequired() =
|
||||
original.isValueArgumentReorderingRequired() && irValueArgumentsByIndex.any { it != null && !it.hasNoSideEffects() }
|
||||
|
||||
val CallBuilder.hasExtensionReceiver: Boolean
|
||||
internal val CallBuilder.hasExtensionReceiver: Boolean
|
||||
get() =
|
||||
descriptor.extensionReceiverParameter != null
|
||||
|
||||
val CallBuilder.hasDispatchReceiver: Boolean
|
||||
get() =
|
||||
descriptor.dispatchReceiverParameter != null
|
||||
|
||||
val CallBuilder.extensionReceiverType: KotlinType?
|
||||
get() =
|
||||
descriptor.extensionReceiverParameter?.type
|
||||
|
||||
val CallBuilder.dispatchReceiverType: KotlinType?
|
||||
internal val CallBuilder.dispatchReceiverType: KotlinType?
|
||||
get() =
|
||||
descriptor.dispatchReceiverParameter?.type
|
||||
|
||||
val CallBuilder.explicitReceiverParameter: ReceiverParameterDescriptor?
|
||||
get() =
|
||||
descriptor.extensionReceiverParameter ?: descriptor.dispatchReceiverParameter
|
||||
|
||||
val CallBuilder.explicitReceiverType: KotlinType?
|
||||
get() =
|
||||
explicitReceiverParameter?.type
|
||||
|
||||
fun CallBuilder.setExplicitReceiverValue(explicitReceiverValue: IntermediateValue) {
|
||||
internal fun CallBuilder.setExplicitReceiverValue(explicitReceiverValue: IntermediateValue) {
|
||||
val previousCallReceiver = callReceiver
|
||||
callReceiver = object : CallReceiver {
|
||||
override fun call(builder: CallExpressionBuilder): IrExpression {
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
|
||||
class DelegatedLocalPropertyLValue(
|
||||
internal class DelegatedLocalPropertyLValue(
|
||||
private val context: IrGeneratorContext,
|
||||
val startOffset: Int,
|
||||
val endOffset: Int,
|
||||
|
||||
+2
-2
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.ir.expressions.left
|
||||
import org.jetbrains.kotlin.ir.expressions.right
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
|
||||
class DynamicMemberLValue(
|
||||
internal class DynamicMemberLValue(
|
||||
private val context: IrGeneratorContext,
|
||||
private val startOffset: Int,
|
||||
private val endOffset: Int,
|
||||
@@ -69,4 +69,4 @@ class DynamicMemberLValue(
|
||||
if (extensionReceiverValue != null) throw AssertionError("Dynamic call $memberName should have no extension receiver")
|
||||
return dispatchReceiverValue.load()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.psi2ir.intermediate
|
||||
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
|
||||
class ExtensionInvokeCallReceiver(
|
||||
internal class ExtensionInvokeCallReceiver(
|
||||
private val callBuilder: CallBuilder,
|
||||
private val functionReceiver: IntermediateValue,
|
||||
private val extensionInvokeReceiver: IntermediateValue
|
||||
@@ -35,4 +35,4 @@ class ExtensionInvokeCallReceiver(
|
||||
callBuilder.irValueArgumentsByIndex[0] = extensionInvokeReceiver.load()
|
||||
return builder.withReceivers(functionReceiver, null, emptyList())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,10 +22,10 @@ import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
||||
|
||||
fun IrVariable.loadAt(startOffset: Int, endOffset: Int): IrExpression =
|
||||
internal fun IrVariable.loadAt(startOffset: Int, endOffset: Int): IrExpression =
|
||||
IrGetValueImpl(startOffset, endOffset, type, symbol)
|
||||
|
||||
fun CallReceiver.adjustForCallee(callee: CallableMemberDescriptor): CallReceiver =
|
||||
internal fun CallReceiver.adjustForCallee(callee: CallableMemberDescriptor): CallReceiver =
|
||||
object : CallReceiver {
|
||||
override fun call(builder: CallExpressionBuilder): IrExpression =
|
||||
this@adjustForCallee.call { dispatchReceiverValue, extensionReceiverValue, contextReceiverValues ->
|
||||
@@ -51,7 +51,7 @@ fun CallReceiver.adjustForCallee(callee: CallableMemberDescriptor): CallReceiver
|
||||
}
|
||||
|
||||
|
||||
fun computeSubstitutedSyntheticAccessor(
|
||||
internal fun computeSubstitutedSyntheticAccessor(
|
||||
propertyDescriptor: PropertyDescriptor,
|
||||
accessorFunctionDescriptor: FunctionDescriptor,
|
||||
substitutedExtensionAccessorDescriptor: PropertyAccessorDescriptor
|
||||
@@ -94,4 +94,4 @@ private fun copyTypesFromExtensionAccessor(
|
||||
accessorFunctionDescriptor.modality,
|
||||
accessorFunctionDescriptor.visibility
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.psi2ir.generators.CallGenerator
|
||||
|
||||
class LValueWithGetterAndSetterCalls(
|
||||
internal class LValueWithGetterAndSetterCalls(
|
||||
private val callGenerator: CallGenerator,
|
||||
private val descriptor: CallableDescriptor,
|
||||
private val getterCall: () -> CallBuilder?,
|
||||
@@ -42,5 +42,4 @@ class LValueWithGetterAndSetterCalls(
|
||||
val call = setterCall(irExpression) ?: throw AssertionError("No setter call for $descriptor")
|
||||
return callGenerator.generateCall(startOffset, endOffset, call, origin)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+4
-5
@@ -19,16 +19,15 @@ package org.jetbrains.kotlin.psi2ir.intermediate
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.util.render
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
abstract class ExpressionValue(override val type: IrType) : IntermediateValue
|
||||
internal abstract class ExpressionValue(override val type: IrType) : IntermediateValue
|
||||
|
||||
inline fun generateExpressionValue(type: IrType, crossinline generate: () -> IrExpression) =
|
||||
internal inline fun generateExpressionValue(type: IrType, crossinline generate: () -> IrExpression) =
|
||||
object : ExpressionValue(type) {
|
||||
override fun load(): IrExpression = generate()
|
||||
}
|
||||
|
||||
class OnceExpressionValue(val irExpression: IrExpression) : LValue, AssignmentReceiver {
|
||||
internal class OnceExpressionValue(val irExpression: IrExpression) : LValue, AssignmentReceiver {
|
||||
private var instantiated = false
|
||||
|
||||
override fun load(): IrExpression {
|
||||
@@ -45,4 +44,4 @@ class OnceExpressionValue(val irExpression: IrExpression) : LValue, AssignmentRe
|
||||
|
||||
override fun assign(withLValue: (LValue) -> IrExpression): IrExpression =
|
||||
withLValue(this)
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext
|
||||
|
||||
abstract class PropertyLValueBase(
|
||||
internal abstract class PropertyLValueBase(
|
||||
protected val context: GeneratorContext,
|
||||
val scope: Scope,
|
||||
val startOffset: Int,
|
||||
@@ -72,7 +72,7 @@ abstract class PropertyLValueBase(
|
||||
protected abstract fun withReceiver(dispatchReceiver: VariableLValue?, extensionReceiver: VariableLValue?, contextReceivers: List<VariableLValue>): PropertyLValueBase
|
||||
}
|
||||
|
||||
class FieldPropertyLValue(
|
||||
internal class FieldPropertyLValue(
|
||||
context: GeneratorContext,
|
||||
scope: Scope,
|
||||
startOffset: Int,
|
||||
@@ -127,7 +127,7 @@ class FieldPropertyLValue(
|
||||
)
|
||||
}
|
||||
|
||||
class AccessorPropertyLValue(
|
||||
internal class AccessorPropertyLValue(
|
||||
context: GeneratorContext,
|
||||
scope: Scope,
|
||||
startOffset: Int,
|
||||
@@ -207,4 +207,4 @@ class AccessorPropertyLValue(
|
||||
SimpleCallReceiver(dispatchReceiver, extensionReceiver, contextReceivers),
|
||||
superQualifier
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-10
@@ -21,14 +21,8 @@ import org.jetbrains.kotlin.ir.builders.Scope
|
||||
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.IrStatementContainer
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.util.shallowCopy
|
||||
|
||||
class RematerializableValue(override val type: IrType, val irExpression: IrExpression) : IntermediateValue {
|
||||
override fun load(): IrExpression = irExpression.shallowCopy()
|
||||
}
|
||||
|
||||
fun Scope.createTemporaryVariableInBlock(
|
||||
internal fun Scope.createTemporaryVariableInBlock(
|
||||
context: IrGeneratorContext,
|
||||
irExpression: IrExpression,
|
||||
block: IrStatementContainer,
|
||||
@@ -42,7 +36,7 @@ fun Scope.createTemporaryVariableInBlock(
|
||||
)
|
||||
}
|
||||
|
||||
fun Scope.declareTemporaryVariableInBlock(
|
||||
internal fun Scope.declareTemporaryVariableInBlock(
|
||||
irExpression: IrExpression,
|
||||
block: IrStatementContainer,
|
||||
nameHint: String? = null,
|
||||
@@ -53,5 +47,3 @@ fun Scope.declareTemporaryVariableInBlock(
|
||||
block.statements.add(temporaryVariable)
|
||||
return temporaryVariable
|
||||
}
|
||||
|
||||
|
||||
|
||||
+3
-5
@@ -25,8 +25,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrBlockImpl
|
||||
import org.jetbrains.kotlin.ir.types.makeNullable
|
||||
import org.jetbrains.kotlin.psi2ir.generators.GeneratorWithScope
|
||||
|
||||
|
||||
class SafeCallReceiver(
|
||||
internal class SafeCallReceiver(
|
||||
val generator: GeneratorWithScope,
|
||||
val startOffset: Int,
|
||||
val endOffset: Int,
|
||||
@@ -67,8 +66,7 @@ class SafeCallReceiver(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun IrExpression.safeCallOnDispatchReceiver(
|
||||
internal fun IrExpression.safeCallOnDispatchReceiver(
|
||||
generator: GeneratorWithScope,
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
@@ -83,4 +81,4 @@ fun IrExpression.safeCallOnDispatchReceiver(
|
||||
).call { dispatchReceiverValue, _, contextReceiverValues ->
|
||||
assert(contextReceiverValues.isEmpty()) { "Context receivers in numeric promotion" }
|
||||
ifNotNull(dispatchReceiverValue!!.load())
|
||||
}
|
||||
}
|
||||
|
||||
+4
-5
@@ -24,13 +24,13 @@ import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||
import org.jetbrains.kotlin.ir.types.makeNullable
|
||||
import org.jetbrains.kotlin.psi2ir.generators.GeneratorWithScope
|
||||
|
||||
class SafeExtensionInvokeCallReceiver(
|
||||
internal class SafeExtensionInvokeCallReceiver(
|
||||
val generator: GeneratorWithScope,
|
||||
val startOffset: Int,
|
||||
val endOffset: Int,
|
||||
val callBuilder: CallBuilder,
|
||||
val functionReceiver: IntermediateValue,
|
||||
val extensionInvokeReceiver: IntermediateValue
|
||||
private val callBuilder: CallBuilder,
|
||||
private val functionReceiver: IntermediateValue,
|
||||
private val extensionInvokeReceiver: IntermediateValue
|
||||
) : CallReceiver {
|
||||
override fun call(builder: CallExpressionBuilder): IrExpression {
|
||||
// extensionInvokeReceiver is actually a first argument:
|
||||
@@ -62,4 +62,3 @@ class SafeExtensionInvokeCallReceiver(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.psi2ir.intermediate
|
||||
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
|
||||
class SimpleCallReceiver(
|
||||
internal class SimpleCallReceiver(
|
||||
val dispatchReceiverValue: IntermediateValue?,
|
||||
val extensionReceiverValue: IntermediateValue?,
|
||||
val contextReceiverValues: List<IntermediateValue>
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
import org.jetbrains.kotlin.psi2ir.generators.StatementGenerator
|
||||
|
||||
class SpecialExpressionAssignmentReceiver(
|
||||
internal class SpecialExpressionAssignmentReceiver(
|
||||
private val statementGenerator: StatementGenerator,
|
||||
private val ktExpression: KtExpression,
|
||||
private val origin: IrStatementOrigin,
|
||||
@@ -31,4 +31,4 @@ class SpecialExpressionAssignmentReceiver(
|
||||
|
||||
override fun assign(withLValue: (LValue) -> IrExpression): IrExpression =
|
||||
withLValue(this)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -18,9 +18,8 @@ package org.jetbrains.kotlin.psi2ir.intermediate
|
||||
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
class TransientReceiverValue(override val type: IrType) : IntermediateValue {
|
||||
internal class TransientReceiverValue(override val type: IrType) : IntermediateValue {
|
||||
|
||||
override fun load(): IrExpression {
|
||||
throw AssertionError("Transient receiver should not be instantiated")
|
||||
|
||||
@@ -19,22 +19,22 @@ package org.jetbrains.kotlin.psi2ir.intermediate
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
|
||||
interface IntermediateValue {
|
||||
internal interface IntermediateValue {
|
||||
fun load(): IrExpression
|
||||
fun loadIfExists(): IrExpression? = load()
|
||||
val type: IrType
|
||||
}
|
||||
|
||||
interface LValue : IntermediateValue {
|
||||
internal interface LValue : IntermediateValue {
|
||||
fun store(irExpression: IrExpression): IrExpression
|
||||
}
|
||||
|
||||
interface AssignmentReceiver {
|
||||
internal interface AssignmentReceiver {
|
||||
fun assign(withLValue: (LValue) -> IrExpression): IrExpression
|
||||
fun assign(value: IrExpression): IrExpression = assign { it.store(value) }
|
||||
}
|
||||
|
||||
fun interface CallExpressionBuilder {
|
||||
internal fun interface CallExpressionBuilder {
|
||||
fun withReceivers(
|
||||
dispatchReceiver: IntermediateValue?,
|
||||
extensionReceiver: IntermediateValue?,
|
||||
@@ -42,6 +42,6 @@ fun interface CallExpressionBuilder {
|
||||
): IrExpression
|
||||
}
|
||||
|
||||
interface CallReceiver {
|
||||
internal interface CallReceiver {
|
||||
fun call(builder: CallExpressionBuilder): IrExpression
|
||||
}
|
||||
|
||||
+2
-2
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrSetValueImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
|
||||
class VariableLValue(
|
||||
internal class VariableLValue(
|
||||
private val context: IrGeneratorContext,
|
||||
val startOffset: Int,
|
||||
val endOffset: Int,
|
||||
@@ -58,4 +58,4 @@ class VariableLValue(
|
||||
|
||||
override fun assign(withLValue: (LValue) -> IrExpression): IrExpression =
|
||||
withLValue(this)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -57,7 +57,7 @@ import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
||||
import org.jetbrains.kotlin.types.typeUtil.*
|
||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||
|
||||
fun insertImplicitCasts(file: IrFile, context: GeneratorContext) {
|
||||
internal fun insertImplicitCasts(file: IrFile, context: GeneratorContext) {
|
||||
InsertImplicitCasts(
|
||||
context.irBuiltIns,
|
||||
context.typeTranslator,
|
||||
|
||||
Reference in New Issue
Block a user