Skip to content

Commit b62193d

Browse files
authored
Merge pull request #10333 from igfoo/igfoo/extractStaticInitializer2
Kotlin: Remove a cast from extractStaticInitializer
2 parents ac30713 + b2c83ae commit b62193d

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)