[K/N] only include bodies inside inlines for headers

Also renames the "header klib serializaion" option to something
that hopefully slightly better reflects its meaning
^KT-65442
This commit is contained in:
Johan Bay
2024-01-16 09:17:37 +01:00
committed by Space Cloud
parent ac8aae5da4
commit d50b02adaf
5 changed files with 13 additions and 13 deletions
@@ -113,7 +113,7 @@ open class IrFileSerializer(
private val languageVersionSettings: LanguageVersionSettings, private val languageVersionSettings: LanguageVersionSettings,
private val bodiesOnlyForInlines: Boolean = false, private val bodiesOnlyForInlines: Boolean = false,
private val normalizeAbsolutePaths: Boolean = false, private val normalizeAbsolutePaths: Boolean = false,
private val skipPrivateApi: Boolean = false, private val publicAbiOnly: Boolean = false,
private val sourceBaseDirs: Collection<String> private val sourceBaseDirs: Collection<String>
) { ) {
private val loopIndex = hashMapOf<IrLoop, Int>() private val loopIndex = hashMapOf<IrLoop, Int>()
@@ -1003,7 +1003,7 @@ open class IrFileSerializer(
private fun serializeIrDeclarationBase(declaration: IrDeclaration, flags: Long?): ProtoDeclarationBase { private fun serializeIrDeclarationBase(declaration: IrDeclaration, flags: Long?): ProtoDeclarationBase {
return with(ProtoDeclarationBase.newBuilder()) { return with(ProtoDeclarationBase.newBuilder()) {
symbol = serializeIrSymbol((declaration as IrSymbolOwner).symbol, isDeclared = true) symbol = serializeIrSymbol((declaration as IrSymbolOwner).symbol, isDeclared = true)
coordinates = if (skipPrivateApi && !isInsideInline) 0L else serializeCoordinates(declaration.startOffset, declaration.endOffset) coordinates = if (publicAbiOnly && !isInsideInline) 0L else serializeCoordinates(declaration.startOffset, declaration.endOffset)
addAllAnnotation(serializeAnnotations(declaration.annotations)) addAllAnnotation(serializeAnnotations(declaration.annotations))
flags?.let { setFlags(it) } flags?.let { setFlags(it) }
originName = serializeIrDeclarationOrigin(declaration.origin) originName = serializeIrDeclarationOrigin(declaration.origin)
@@ -1041,7 +1041,7 @@ open class IrFileSerializer(
private fun serializeIrFunctionBase(function: IrFunction, flags: Long): ProtoFunctionBase { private fun serializeIrFunctionBase(function: IrFunction, flags: Long): ProtoFunctionBase {
val isInsideInlineBefore = isInsideInline val isInsideInlineBefore = isInsideInline
isInsideInline = isInsideInline || function.isInline isInsideInline = function.isInline || isInsideInlineBefore
val proto = ProtoFunctionBase.newBuilder() val proto = ProtoFunctionBase.newBuilder()
.setBase(serializeIrDeclarationBase(function, flags)) .setBase(serializeIrDeclarationBase(function, flags))
@@ -1061,7 +1061,7 @@ open class IrFileSerializer(
proto.addValueParameter(serializeIrValueParameter(it)) proto.addValueParameter(serializeIrValueParameter(it))
} }
if (!bodiesOnlyForInlines || isInsideInline) { if (!bodiesOnlyForInlines || function.isInline || (publicAbiOnly && isInsideInline)) {
function.body?.let { proto.body = serializeIrStatementBody(it) } function.body?.let { proto.body = serializeIrStatementBody(it) }
} }
isInsideInline = isInsideInlineBefore isInsideInline = isInsideInlineBefore
@@ -1204,7 +1204,7 @@ open class IrFileSerializer(
private fun serializeIrErrorDeclaration(errorDeclaration: IrErrorDeclaration): ProtoErrorDeclaration { private fun serializeIrErrorDeclaration(errorDeclaration: IrErrorDeclaration): ProtoErrorDeclaration {
val proto = ProtoErrorDeclaration.newBuilder() val proto = ProtoErrorDeclaration.newBuilder()
.setCoordinates(if (skipPrivateApi) 0L else serializeCoordinates(errorDeclaration.startOffset, errorDeclaration.endOffset)) .setCoordinates(if (publicAbiOnly) 0L else serializeCoordinates(errorDeclaration.startOffset, errorDeclaration.endOffset))
return proto.build() return proto.build()
} }
@@ -1273,7 +1273,7 @@ open class IrFileSerializer(
open fun backendSpecificMetadata(irFile: IrFile): FileBackendSpecificMetadata? = null open fun backendSpecificMetadata(irFile: IrFile): FileBackendSpecificMetadata? = null
private fun skipIfPrivate(declaration: IrDeclaration) = private fun skipIfPrivate(declaration: IrDeclaration) =
skipPrivateApi && (declaration as? IrDeclarationWithVisibility)?.let { !it.visibility.isPublicAPI && it.visibility != INTERNAL } == true publicAbiOnly && (declaration as? IrDeclarationWithVisibility)?.let { !it.visibility.isPublicAPI && it.visibility != INTERNAL } == true
// Always keep private interfaces and type aliases as they can be part of public type hierarchies. // Always keep private interfaces and type aliases as they can be part of public type hierarchies.
&& (declaration as? IrClass)?.isInterface != true && declaration !is IrTypeAlias && (declaration as? IrClass)?.isInterface != true && declaration !is IrTypeAlias
@@ -1359,7 +1359,7 @@ open class IrFileSerializer(
proto.addDeclarationId(sigIndex) proto.addDeclarationId(sigIndex)
} }
proto.setFileEntry(serializeFileEntry(file.fileEntry, includeLineStartOffsets = !(skipPrivateApi && protoBodyArray.isEmpty()))) proto.setFileEntry(serializeFileEntry(file.fileEntry, includeLineStartOffsets = !(publicAbiOnly && protoBodyArray.isEmpty())))
// TODO: is it Konan specific? // TODO: is it Konan specific?
@@ -22,12 +22,12 @@ class KonanIrFileSerializer(
compatibilityMode: CompatibilityMode, compatibilityMode: CompatibilityMode,
normalizeAbsolutePaths: Boolean, normalizeAbsolutePaths: Boolean,
sourceBaseDirs: Collection<String>, sourceBaseDirs: Collection<String>,
skipPrivateApi: Boolean = false, publicAbiOnly: Boolean = false,
) : IrFileSerializer( ) : IrFileSerializer(
declarationTable, declarationTable,
compatibilityMode, compatibilityMode,
languageVersionSettings, languageVersionSettings,
skipPrivateApi = skipPrivateApi, publicAbiOnly = publicAbiOnly,
bodiesOnlyForInlines = bodiesOnlyForInlines, bodiesOnlyForInlines = bodiesOnlyForInlines,
normalizeAbsolutePaths = normalizeAbsolutePaths, normalizeAbsolutePaths = normalizeAbsolutePaths,
sourceBaseDirs = sourceBaseDirs sourceBaseDirs = sourceBaseDirs
@@ -21,7 +21,7 @@ class KonanIrModuleSerializer(
sourceBaseDirs: Collection<String>, sourceBaseDirs: Collection<String>,
private val languageVersionSettings: LanguageVersionSettings, private val languageVersionSettings: LanguageVersionSettings,
private val bodiesOnlyForInlines: Boolean = false, private val bodiesOnlyForInlines: Boolean = false,
private val skipPrivateApi: Boolean = false, private val publicAbiOnly: Boolean = false,
shouldCheckSignaturesOnUniqueness: Boolean = true, shouldCheckSignaturesOnUniqueness: Boolean = true,
) : IrModuleSerializer<KonanIrFileSerializer>( ) : IrModuleSerializer<KonanIrFileSerializer>(
diagnosticReporter, diagnosticReporter,
@@ -50,6 +50,6 @@ class KonanIrModuleSerializer(
compatibilityMode = compatibilityMode, compatibilityMode = compatibilityMode,
normalizeAbsolutePaths = normalizeAbsolutePaths, normalizeAbsolutePaths = normalizeAbsolutePaths,
sourceBaseDirs = sourceBaseDirs, sourceBaseDirs = sourceBaseDirs,
skipPrivateApi = skipPrivateApi publicAbiOnly = publicAbiOnly
) )
} }
@@ -71,7 +71,7 @@ internal fun PhaseContext.firSerializerBase(
sourceBaseDirs = sourceBaseDirs, sourceBaseDirs = sourceBaseDirs,
languageVersionSettings = languageVersionSettings, languageVersionSettings = languageVersionSettings,
bodiesOnlyForInlines = produceHeaderKlib, bodiesOnlyForInlines = produceHeaderKlib,
skipPrivateApi = produceHeaderKlib, publicAbiOnly = produceHeaderKlib,
shouldCheckSignaturesOnUniqueness = shouldCheckSignaturesOnUniqueness, shouldCheckSignaturesOnUniqueness = shouldCheckSignaturesOnUniqueness,
) )
}, },
@@ -48,7 +48,7 @@ internal val SerializerPhase = createSimpleNamedCompilerPhase<PhaseContext, Seri
sourceBaseDirs = relativePathBase, sourceBaseDirs = relativePathBase,
languageVersionSettings = config.languageVersionSettings, languageVersionSettings = config.languageVersionSettings,
bodiesOnlyForInlines = input.produceHeaderKlib, bodiesOnlyForInlines = input.produceHeaderKlib,
skipPrivateApi = input.produceHeaderKlib, publicAbiOnly = input.produceHeaderKlib,
).serializedIrModule(ir) ).serializedIrModule(ir)
} }