fix: change logic of calculation fqName for export model.
This commit is contained in:
+4
-15
@@ -504,8 +504,10 @@ class ExportModelGenerator(
|
||||
|
||||
classifier is IrClassSymbol -> {
|
||||
val klass = classifier.owner
|
||||
val isImplicitlyExported = !klass.isExported(context) && !klass.isExternal
|
||||
val name = klass.getExportableName()
|
||||
val isExported = klass.isExported(context)
|
||||
val isImplicitlyExported = !isExported && !klass.isExternal
|
||||
val isNonExportedExternal = klass.isExternal && !isExported
|
||||
val name = klass.getFqNameWithJsNameWhenAvailable(!isNonExportedExternal && generateNamespacesForPackages).asString()
|
||||
|
||||
when (klass.kind) {
|
||||
ClassKind.ANNOTATION_CLASS,
|
||||
@@ -531,19 +533,6 @@ class ExportModelGenerator(
|
||||
return exportedType.withNullability(isMarkedNullable)
|
||||
}
|
||||
|
||||
private fun IrClass.getExportableName(): String {
|
||||
val qualifier = (parent as? IrFile)?.getJsQualifier()
|
||||
val supQualifier = (parent as? IrClass)?.getExportableName()
|
||||
val name = getJsNameOrKotlinName()
|
||||
|
||||
return when {
|
||||
qualifier != null -> "$qualifier.$name"
|
||||
isExternal && !isExported(context) -> "${supQualifier?.plus(".") ?: ""}$name"
|
||||
generateNamespacesForPackages -> fqNameWhenAvailable!!.asString()
|
||||
else -> name.asString()
|
||||
}
|
||||
}
|
||||
|
||||
private fun IrDeclarationWithName.getExportedIdentifier(): String =
|
||||
with(getJsNameOrKotlinName()) {
|
||||
if (isSpecial)
|
||||
|
||||
@@ -9,12 +9,11 @@ import org.jetbrains.kotlin.descriptors.isClass
|
||||
import org.jetbrains.kotlin.descriptors.isInterface
|
||||
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
||||
import org.jetbrains.kotlin.ir.backend.js.export.isExported
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationWithVisibility
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.IrReturn
|
||||
import org.jetbrains.kotlin.ir.symbols.IrReturnableBlockSymbol
|
||||
import org.jetbrains.kotlin.ir.util.parentClassOrNull
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
|
||||
fun IrDeclaration.isExportedMember(context: JsIrBackendContext) =
|
||||
(this is IrDeclarationWithVisibility && visibility.isPublicAPI) &&
|
||||
@@ -29,3 +28,16 @@ fun IrDeclaration?.isExportedInterface(context: JsIrBackendContext) =
|
||||
fun IrReturn.isTheLastReturnStatementIn(target: IrReturnableBlockSymbol): Boolean {
|
||||
return target.owner.statements.lastOrNull() === this
|
||||
}
|
||||
|
||||
fun IrDeclarationWithName.getFqNameWithJsNameWhenAvailable(shouldIncludePackage: Boolean): FqName {
|
||||
val name = getJsNameOrKotlinName()
|
||||
return when (val parent = parent) {
|
||||
is IrDeclarationWithName -> parent.getFqNameWithJsNameWhenAvailable(shouldIncludePackage).child(name)
|
||||
is IrPackageFragment -> getKotlinOrJsQualifier(parent, shouldIncludePackage)?.child(name) ?: FqName(name.identifier)
|
||||
else -> FqName(name.identifier)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getKotlinOrJsQualifier(parent: IrPackageFragment, shouldIncludePackage: Boolean): FqName? {
|
||||
return (parent as? IrFile)?.getJsQualifier()?.let { FqName(it) } ?: parent.fqName.takeIf { shouldIncludePackage }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user