@@ -83,7 +83,7 @@ open class KotlinFileExtractor(
8383 }
8484
8585 file.declarations.forEach { extractDeclaration(it, extractPrivateMembers = true , extractFunctionBodies = true ) }
86- extractStaticInitializer(file, null )
86+ extractStaticInitializer(file, { extractFileClass(file) } )
8787 CommentExtractor (this , file, tw.fileId).extract()
8888 }
8989 }
@@ -423,7 +423,7 @@ open class KotlinFileExtractor(
423423 if (extractDeclarations) {
424424 c.declarations.forEach { extractDeclaration(it, extractPrivateMembers = extractPrivateMembers, extractFunctionBodies = extractFunctionBodies) }
425425 if (extractStaticInitializer)
426- extractStaticInitializer(c, id )
426+ extractStaticInitializer(c, { id } )
427427 extractJvmStaticProxyMethods(c, id, extractPrivateMembers, extractFunctionBodies)
428428 }
429429 if (c.isNonCompanionObject) {
@@ -638,13 +638,18 @@ open class KotlinFileExtractor(
638638 return type
639639 }
640640
641- private fun extractStaticInitializer (container : IrDeclarationContainer , classLabel : Label <out DbClassorinterface >? ) {
641+ /* *
642+ * mkContainerLabel is a lambda so that we get laziness: If the
643+ * container is a file, then we don't want to extract the file class
644+ * unless something actually needs it.
645+ */
646+ private fun extractStaticInitializer (container : IrDeclarationContainer , mkContainerLabel : () -> Label <out DbClassorinterface >) {
642647 with (" static initializer extraction" , container) {
643648 extractDeclInitializers(container.declarations, true ) {
644- val parentId = classLabel ? : extractFileClass(container as IrFile )
649+ val containerId = mkContainerLabel( )
645650 val clinitLabel = getFunctionLabel(
646651 container,
647- parentId ,
652+ containerId ,
648653 " <clinit>" ,
649654 listOf (),
650655 pluginContext.irBuiltIns.unitType,
@@ -657,7 +662,7 @@ open class KotlinFileExtractor(
657662 )
658663 val clinitId = tw.getLabelFor<DbMethod >(clinitLabel)
659664 val returnType = useType(pluginContext.irBuiltIns.unitType, TypeContext .RETURN )
660- tw.writeMethods(clinitId, " <clinit>" , " <clinit>()" , returnType.javaResult.id, parentId , clinitId)
665+ tw.writeMethods(clinitId, " <clinit>" , " <clinit>()" , returnType.javaResult.id, containerId , clinitId)
661666 tw.writeMethodsKotlinType(clinitId, returnType.kotlinResult.id)
662667
663668 tw.writeCompiler_generated(clinitId, CompilerGeneratedKinds .CLASS_INITIALISATION_METHOD .kind)
0 commit comments