[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:
+7
-7
@@ -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?
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -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
|
||||||
|
|||||||
+2
-2
@@ -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
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -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,
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|||||||
+1
-1
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user