Remove ClassBuilderMode.ABI

It was a special mode used only by the removed legacy implementation of
jvm-abi-gen.
This commit is contained in:
Alexander Udalov
2023-03-06 13:07:38 +01:00
committed by Space Team
parent 9f269b83aa
commit 6595275ba7
8 changed files with 6 additions and 81 deletions
@@ -49,16 +49,6 @@ public class ClassBuilderMode {
/* generateMultiFileFacadePartClasses = */ true,
/* mightBeIncorrectCode = */ false);
/**
* ABI for compilation (non-private signatures + inline function bodies)
*/
public final static ClassBuilderMode ABI = new ClassBuilderMode(
/* bodies = */ true,
/* metadata = */ true,
/* sourceRetention = */ false,
/* generateMultiFileFacadePartClasses = */ true,
/* mightBeIncorrectCode = */ false);
/**
* Generating light classes: Only function signatures
*/
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings.*
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapperBase
import org.jetbrains.kotlin.config.JvmDefaultMode
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil
import org.jetbrains.kotlin.load.java.lazy.types.RawTypeImpl
@@ -29,7 +28,6 @@ import org.jetbrains.kotlin.protobuf.GeneratedMessageLite
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.DescriptorUtils.isInterface
import org.jetbrains.kotlin.resolve.descriptorUtil.classId
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyPrivateApi
import org.jetbrains.kotlin.resolve.descriptorUtil.nonSourceAnnotations
import org.jetbrains.kotlin.resolve.jvm.annotations.hasJvmDefaultNoCompatibilityAnnotation
import org.jetbrains.kotlin.resolve.jvm.annotations.hasJvmDefaultWithCompatibilityAnnotation
@@ -64,22 +62,6 @@ class JvmSerializerExtension @JvmOverloads constructor(
private val useOldManglingScheme = state.useOldManglingSchemeForFunctionsWithInlineClassesInSignatures
override fun shouldUseTypeTable(): Boolean = useTypeTable
override fun shouldSerializeFunction(descriptor: FunctionDescriptor): Boolean {
return classBuilderMode != ClassBuilderMode.ABI || descriptor.visibility != DescriptorVisibilities.PRIVATE
}
override fun shouldSerializeProperty(descriptor: PropertyDescriptor): Boolean {
return classBuilderMode != ClassBuilderMode.ABI || descriptor.visibility != DescriptorVisibilities.PRIVATE
}
override fun shouldSerializeTypeAlias(descriptor: TypeAliasDescriptor): Boolean {
// TODO: do not serialize private type aliases in ABI class builder mode once KT-17229 is fixed.
return true
}
override fun shouldSerializeNestedClass(descriptor: ClassDescriptor): Boolean {
return classBuilderMode != ClassBuilderMode.ABI || !descriptor.isEffectivelyPrivateApi
}
override fun serializeClass(
descriptor: ClassDescriptor,
@@ -32,7 +32,10 @@ import org.jetbrains.kotlin.fir.serialization.constant.EnumValue
import org.jetbrains.kotlin.fir.serialization.constant.IntValue
import org.jetbrains.kotlin.fir.serialization.constant.StringValue
import org.jetbrains.kotlin.fir.serialization.constant.toConstantValue
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
@@ -195,10 +198,6 @@ class FirElementSerializer private constructor(
if (nestedClassifier is FirTypeAliasSymbol) {
typeAliasProto(nestedClassifier.fir)?.let { builder.addTypeAlias(it) }
} else if (nestedClassifier is FirRegularClassSymbol) {
if (!extension.shouldSerializeNestedClass(nestedClassifier.fir)) {
continue
}
builder.addNestedClassName(getSimpleNameIndex(nestedClassifier.name))
}
}
@@ -311,8 +310,6 @@ class FirElementSerializer private constructor(
(this as FirAnnotationContainer).nonSourceAnnotations(session)
fun propertyProto(property: FirProperty): ProtoBuf.Property.Builder? = whileAnalysing(session, property) {
if (!extension.shouldSerializeProperty(property)) return null
val builder = ProtoBuf.Property.newBuilder()
val local = createChildSerializer(property)
@@ -419,8 +416,6 @@ class FirElementSerializer private constructor(
}
fun functionProto(function: FirFunction): ProtoBuf.Function.Builder? = whileAnalysing(session, function) {
if (!extension.shouldSerializeFunction(function)) return null
val builder = ProtoBuf.Function.newBuilder()
val simpleFunction = function as? FirSimpleFunction
@@ -523,8 +518,6 @@ class FirElementSerializer private constructor(
}
private fun typeAliasProto(typeAlias: FirTypeAlias): ProtoBuf.TypeAlias.Builder? = whileAnalysing(session, typeAlias) {
if (!extension.shouldSerializeTypeAlias(typeAlias)) return null
val builder = ProtoBuf.TypeAlias.newBuilder()
val local = createChildSerializer(typeAlias)
@@ -8,8 +8,8 @@ package org.jetbrains.kotlin.fir.serialization
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.types.ConeFlexibleType
import org.jetbrains.kotlin.fir.types.ConeErrorType
import org.jetbrains.kotlin.fir.types.ConeFlexibleType
import org.jetbrains.kotlin.metadata.ProtoBuf
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable
@@ -24,12 +24,8 @@ abstract class FirSerializerExtension {
val annotationSerializer by lazy { FirAnnotationSerializer(session, stringTable) }
open fun shouldSerializeNestedClass(nestedClass: FirRegularClass): Boolean = true
open fun shouldSerializeTypeAlias(typeAlias: FirTypeAlias): Boolean = true
open fun shouldUseTypeTable(): Boolean = false
open fun shouldUseNormalizedVisibility(): Boolean = false
abstract fun shouldSerializeFunction(function: FirFunction): Boolean
abstract fun shouldSerializeProperty(property: FirProperty): Boolean
open fun serializePackage(packageFqName: FqName, proto: ProtoBuf.Package.Builder) {
}
@@ -61,11 +61,7 @@ open class FirKLibSerializerExtension(
override val session: FirSession,
override val metadataVersion: BinaryVersion,
override val stringTable: FirElementAwareSerializableStringTable
) : FirSerializerExtension() {
override fun shouldSerializeFunction(function: FirFunction): Boolean = true
override fun shouldSerializeProperty(property: FirProperty): Boolean = true
}
) : FirSerializerExtension()
class FirElementAwareSerializableStringTable() : FirElementAwareStringTable, SerializableStringTable() {
override fun getLocalClassIdReplacement(firClass: FirClass): ClassId? = ClassId.topLevel(StandardNames.FqNames.any.toSafe())
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.codegen.ClassBuilderMode
import org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.config.JvmDefaultMode
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession
@@ -79,23 +78,6 @@ class FirJvmSerializerExtension(
)
override fun shouldUseTypeTable(): Boolean = useTypeTable
override fun shouldSerializeFunction(function: FirFunction): Boolean {
return classBuilderMode != ClassBuilderMode.ABI ||
function !is FirSimpleFunction || function.visibility != Visibilities.Private
}
override fun shouldSerializeProperty(property: FirProperty): Boolean {
return classBuilderMode != ClassBuilderMode.ABI || property.visibility != Visibilities.Private
}
override fun shouldSerializeTypeAlias(typeAlias: FirTypeAlias): Boolean {
// TODO: do not serialize private type aliases in ABI class builder mode once KT-17229 is fixed.
return true
}
override fun shouldSerializeNestedClass(nestedClass: FirRegularClass): Boolean {
return classBuilderMode != ClassBuilderMode.ABI || nestedClass.visibility != Visibilities.Private
}
override fun serializeClass(
klass: FirClass,
@@ -156,10 +156,6 @@ class DescriptorSerializer private constructor(
if (descriptor is TypeAliasDescriptor) {
typeAliasProto(descriptor)?.let { builder.addTypeAlias(it) }
} else {
if (descriptor is ClassDescriptor && !extension.shouldSerializeNestedClass(descriptor)) {
continue
}
val name = getSimpleNameIndex(descriptor.name)
if (isEnumEntry(descriptor)) {
builder.addEnumEntry(enumEntryProto(descriptor as ClassDescriptor))
@@ -254,8 +250,6 @@ class DescriptorSerializer private constructor(
}
fun propertyProto(descriptor: PropertyDescriptor): ProtoBuf.Property.Builder? {
if (!extension.shouldSerializeProperty(descriptor)) return null
val builder = ProtoBuf.Property.newBuilder()
val local = createChildSerializer(descriptor)
@@ -384,8 +378,6 @@ class DescriptorSerializer private constructor(
}
fun functionProto(descriptor: FunctionDescriptor): ProtoBuf.Function.Builder? {
if (!extension.shouldSerializeFunction(descriptor)) return null
val builder = ProtoBuf.Function.newBuilder()
val local = createChildSerializer(descriptor)
@@ -530,8 +522,6 @@ class DescriptorSerializer private constructor(
}
private fun typeAliasProto(descriptor: TypeAliasDescriptor): ProtoBuf.TypeAlias.Builder? = withNewMetDefinitelyNotNullType {
if (!extension.shouldSerializeTypeAlias(descriptor)) return null
val builder = ProtoBuf.TypeAlias.newBuilder()
val local = createChildSerializer(descriptor)
@@ -24,10 +24,6 @@ abstract class SerializerExtension {
open fun shouldUseTypeTable(): Boolean = false
open fun shouldUseNormalizedVisibility(): Boolean = false
open fun shouldSerializeFunction(descriptor: FunctionDescriptor): Boolean = true
open fun shouldSerializeProperty(descriptor: PropertyDescriptor): Boolean = true
open fun shouldSerializeTypeAlias(descriptor: TypeAliasDescriptor): Boolean = true
open fun shouldSerializeNestedClass(descriptor: ClassDescriptor): Boolean = true
interface ClassMembersProducer {
fun getCallableMembers(classDescriptor: ClassDescriptor): Collection<CallableMemberDescriptor>