Kotlin: Extract listOf(...)

This commit is contained in:
Ian Lynagh
2021-11-11 13:11:31 +00:00
parent 3c7fb94002
commit e1cfaaaa9a
2 changed files with 23 additions and 8 deletions

View File

@@ -367,15 +367,27 @@ open class KotlinUsesExtractor(
return UseClassInstanceResult(classLabel, extractClass)
}
fun isExternalDeclaration(d: IrDeclaration): Boolean {
return d.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB ||
d.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB
}
fun extractClassLaterIfExternal(c: IrClass) {
// we don't have an "external dependencies" extractor yet,
// so for now we extract the source class for those too
if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB ||
c.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) {
if (isExternalDeclaration(c)) {
extractExternalClassLater(c)
}
}
fun extractExternalEnclosingClassLater(d: IrDeclaration) {
val parent = d.parent
when (parent) {
is IrClass -> extractExternalClassLater(parent)
is IrFunction -> extractExternalEnclosingClassLater(parent)
is IrFile -> logger.warn(Severity.ErrorSevere, "extractExternalEnclosingClassLater but no enclosing class.")
else -> logger.warn(Severity.ErrorSevere, "Unrecognised extractExternalEnclosingClassLater: " + d.javaClass)
}
}
fun extractExternalClassLater(c: IrClass) {
dependencyCollector?.addDependency(c)
externalClassExtractor.extractLater(c)
@@ -633,7 +645,8 @@ class X {
val javaSignature = "an array" // TODO: Wrong
val javaResult = TypeResult(id, javaSignature)
val kotlinClassName = getUnquotedClassLabel(s.classifier.owner as IrClass, listOf(makeTypeProjection(componentType, Variance.INVARIANT)))
val owner: IrClass = s.classifier.owner as IrClass
val kotlinClassName = getUnquotedClassLabel(owner, listOf(makeTypeProjection(componentType, Variance.INVARIANT)))
val kotlinSignature = "$javaSignature?" // TODO: Wrong
val kotlinLabel = "@\"kt_type;nullable;${kotlinClassName}\""
val kotlinId: Label<DbKt_nullable_type> = tw.getLabelFor(kotlinLabel, {
@@ -712,6 +725,9 @@ class X {
fun <T: DbCallable> useFunction(f: IrFunction): Label<out T> {
val label = getFunctionLabel(f)
val id: Label<T> = tw.getLabelFor(label)
if(isExternalDeclaration(f)) {
extractExternalEnclosingClassLater(f)
}
return id
}
@@ -1118,8 +1134,7 @@ open class KotlinFileExtractor(
}
private fun extractObjectInitializerFunction(c: IrClass, parentId: Label<out DbReftype>) {
if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB ||
c.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) {
if (isExternalDeclaration(c)) {
return
}