From 08b8939b80bbfbec292d3d80c5805e060826553c Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 20 Oct 2020 20:27:21 +0200 Subject: [PATCH] IR: make IrSymbol.isPublicApi an extension --- .../common/lower/AbstractSuspendFunctionsLowering.kt | 4 ++-- .../jetbrains/kotlin/ir/interpreter/IrInterpreter.kt | 4 ++-- .../src/org/jetbrains/kotlin/ir/symbols/IrSymbol.kt | 6 +++--- .../DescriptorlessExternalPackageFragmentSymbol.kt | 3 --- .../org/jetbrains/kotlin/ir/types/irTypePredicates.kt | 4 ++-- .../src/org/jetbrains/kotlin/ir/util/SymbolTable.kt | 6 +++--- .../kotlin/backend/common/overrides/FakeOverrides.kt | 11 +++++++---- .../common/serialization/IrFileDeserializer.kt | 6 +++--- .../ir/backend/jvm/serialization/JvmIrLinker.kt | 3 ++- 9 files changed, 24 insertions(+), 23 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/AbstractSuspendFunctionsLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/AbstractSuspendFunctionsLowering.kt index 285e9f9afb4..c5174321548 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/AbstractSuspendFunctionsLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/AbstractSuspendFunctionsLowering.kt @@ -7,8 +7,8 @@ package org.jetbrains.kotlin.backend.common.lower import org.jetbrains.kotlin.backend.common.* import org.jetbrains.kotlin.backend.common.ir.* -import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.DescriptorVisibilities +import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.builders.declarations.buildClass @@ -78,7 +78,7 @@ abstract class AbstractSuspendFunctionsLowering(val co // Suppress since it is used in native @Suppress("MemberVisibilityCanBePrivate") protected fun IrCall.isReturnIfSuspendedCall() = - symbol.isPublicApi && context.ir.symbols.returnIfSuspended.signature == symbol.signature + symbol.signature == context.ir.symbols.returnIfSuspended.signature private fun tryTransformSuspendFunction(element: IrElement) = diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreter.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreter.kt index fd0a05e1a11..1ea11ec77f9 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreter.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrInterpreter.kt @@ -323,8 +323,8 @@ class IrInterpreter(private val irBuiltIns: IrBuiltIns, private val bodyMap: Map } private fun IrFunction.trySubstituteFunctionBody(): ExecutionResult? { - if (!this.symbol.isPublicApi) return null - val body = bodyMap[this.symbol.signature] + val signature = this.symbol.signature ?: return null + val body = bodyMap[signature] return body?.let { try { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrSymbol.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrSymbol.kt index ab78f3ece97..d9cf941740f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrSymbol.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/IrSymbol.kt @@ -33,11 +33,11 @@ interface IrSymbol { val isBound: Boolean val signature: IdSignature? - - val isPublicApi: Boolean - get() = signature != null } +val IrSymbol.isPublicApi: Boolean + get() = signature != null + interface IrBindableSymbol : IrSymbol { override val owner: B diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/DescriptorlessExternalPackageFragmentSymbol.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/DescriptorlessExternalPackageFragmentSymbol.kt index 4cdd6225e3c..624ab90b7fc 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/DescriptorlessExternalPackageFragmentSymbol.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/symbols/impl/DescriptorlessExternalPackageFragmentSymbol.kt @@ -19,9 +19,6 @@ class DescriptorlessExternalPackageFragmentSymbol : IrExternalPackageFragmentSym private var _owner: IrExternalPackageFragment? = null override val owner get() = _owner!! - override val isPublicApi: Boolean - get() = TODO("Not yet implemented") - override val signature: IdSignature? get() = TODO("Not yet implemented") diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypePredicates.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypePredicates.kt index c564bbe901c..82829791295 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypePredicates.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypePredicates.kt @@ -98,8 +98,8 @@ fun IrType.isCollection(): Boolean = isNotNullClassType(IdSignatureValues.collec fun IrType.isNothing(): Boolean = isNotNullClassType(IdSignatureValues.nothing) fun IrType.isPrimitiveType(hasQuestionMark: Boolean = false): Boolean = - (this is IrSimpleType && hasQuestionMark == this.hasQuestionMark) && - classOrNull?.takeIf(IrClassSymbol::isPublicApi)?.signature in idSignatureToPrimitiveType + (this is IrSimpleType && hasQuestionMark == this.hasQuestionMark) && + classOrNull?.signature in idSignatureToPrimitiveType fun IrType.isNullablePrimitiveType(): Boolean = isPrimitiveType(true) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt index c9dd441c13e..6e90cca0ef1 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt @@ -1112,8 +1112,8 @@ fun SymbolTable.noUnboundLeft(message: String) { val unbound = this.allUnbound assert(unbound.isEmpty()) { "$message\n" + - unbound.map { - "$it ${if (it.isPublicApi) it.signature.toString() else "NON-PUBLIC API $it"}" - }.joinToString("\n") + unbound.joinToString("\n") { + "$it ${it.signature?.toString() ?: "NON-PUBLIC API $it"}" + } } } diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrides.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrides.kt index f957b3d44ea..4c7f5d02b45 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrides.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrides.kt @@ -29,13 +29,16 @@ import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl import org.jetbrains.kotlin.ir.types.getClass -import org.jetbrains.kotlin.ir.util.* - -class FakeOverrideGlobalDeclarationTable(signatureSerializer: IdSignatureSerializer) - : GlobalDeclarationTable(signatureSerializer, signatureSerializer.mangler) { +import org.jetbrains.kotlin.ir.util.IdSignature +import org.jetbrains.kotlin.ir.util.SymbolTable +import org.jetbrains.kotlin.ir.util.parentAsClass +class FakeOverrideGlobalDeclarationTable( + signatureSerializer: IdSignatureSerializer +) : GlobalDeclarationTable(signatureSerializer, signatureSerializer.mangler) { fun clear() = table.clear() } + class FakeOverrideDeclarationTable( signatureSerializer: IdSignatureSerializer, globalTable: FakeOverrideGlobalDeclarationTable = FakeOverrideGlobalDeclarationTable(signatureSerializer) diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileDeserializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileDeserializer.kt index 522956c5f07..ceb119d085a 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileDeserializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrFileDeserializer.kt @@ -61,15 +61,15 @@ import org.jetbrains.kotlin.backend.common.serialization.proto.IrDynamicOperator import org.jetbrains.kotlin.backend.common.serialization.proto.IrDynamicType as ProtoDynamicType import org.jetbrains.kotlin.backend.common.serialization.proto.IrEnumConstructorCall as ProtoEnumConstructorCall import org.jetbrains.kotlin.backend.common.serialization.proto.IrEnumEntry as ProtoEnumEntry +import org.jetbrains.kotlin.backend.common.serialization.proto.IrErrorCallExpression as ProtoErrorCallExpression +import org.jetbrains.kotlin.backend.common.serialization.proto.IrErrorDeclaration as ProtoErrorDeclaration +import org.jetbrains.kotlin.backend.common.serialization.proto.IrErrorExpression as ProtoErrorExpression import org.jetbrains.kotlin.backend.common.serialization.proto.IrErrorType as ProtoErrorType import org.jetbrains.kotlin.backend.common.serialization.proto.IrExpression as ProtoExpression import org.jetbrains.kotlin.backend.common.serialization.proto.IrField as ProtoField import org.jetbrains.kotlin.backend.common.serialization.proto.IrFunction as ProtoFunction import org.jetbrains.kotlin.backend.common.serialization.proto.IrFunctionBase as ProtoFunctionBase import org.jetbrains.kotlin.backend.common.serialization.proto.IrFunctionExpression as ProtoFunctionExpression -import org.jetbrains.kotlin.backend.common.serialization.proto.IrErrorExpression as ProtoErrorExpression -import org.jetbrains.kotlin.backend.common.serialization.proto.IrErrorCallExpression as ProtoErrorCallExpression -import org.jetbrains.kotlin.backend.common.serialization.proto.IrErrorDeclaration as ProtoErrorDeclaration import org.jetbrains.kotlin.backend.common.serialization.proto.IrFunctionReference as ProtoFunctionReference import org.jetbrains.kotlin.backend.common.serialization.proto.IrGetClass as ProtoGetClass import org.jetbrains.kotlin.backend.common.serialization.proto.IrGetEnumValue as ProtoGetEnumValue diff --git a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/serialization/JvmIrLinker.kt b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/serialization/JvmIrLinker.kt index 57d823faefd..df6fcdc22e6 100644 --- a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/serialization/JvmIrLinker.kt +++ b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/serialization/JvmIrLinker.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.ir.descriptors.IrAbstractFunctionFactory import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol +import org.jetbrains.kotlin.ir.symbols.isPublicApi import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.ir.util.SymbolTable @@ -167,4 +168,4 @@ class JvmIrLinker( override val moduleDependencies: Collection = dependencies } -} \ No newline at end of file +}