Skip to content

Commit

Permalink
Fix that Kotlin files do not have their own Swift file.
Browse files Browse the repository at this point in the history
  • Loading branch information
FilipDolnik committed Oct 5, 2023
1 parent 4e4d7ba commit f4d4baf
Showing 1 changed file with 24 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,10 @@ class SkieNamespaceProvider(
.toSet()

fun getFile(swiftModel: KotlinTypeSwiftModel): SirFile =
sirProvider.getFile(swiftModel.skieNamespaceName, swiftModel.skieFileName)
sirProvider.getFile(swiftModel.skieFileNamespaceName, swiftModel.skieFileName)

private fun getFile(classDescriptor: ClassDescriptor): SirFile =
sirProvider.getFile(classDescriptor.skieNamespaceName, classDescriptor.skieFileName)
sirProvider.getFile(classDescriptor.skieFileNamespaceName, classDescriptor.skieFileName)

fun getOrCreateNamespace(classDescriptor: ClassDescriptor): SirClass =
classNamespaceCache.getOrPut(classDescriptor) {
Expand Down Expand Up @@ -106,27 +106,40 @@ class SkieNamespaceProvider(
fileNamespaceCache.getOrPut(sourceFile) {
val module = descriptorProvider.getFileModule(sourceFile)

SirClass(
baseName = namer.getFileClassName(sourceFile).swiftName.toValidNamespaceIdentifier(),
parent = getModuleNamespace(module),
kind = SirClass.Kind.Enum,
)
SirExtension(
classDeclaration = getModuleNamespace(module),
parent = getFile(sourceFile),
).run {
SirClass(
baseName = sourceFile.skieNamespaceName,
kind = SirClass.Kind.Enum,
)
}
}

private fun getFile(sourceFile: SourceFile): SirFile =
sirProvider.getFile(sourceFile.skieFileNamespaceName, sourceFile.skieNamespaceName)

private val SourceFile.skieNamespaceName: String
get() = namer.getFileClassName(this).swiftName.toValidNamespaceIdentifier()

private val ModuleDescriptor.skieModuleName: String
get() {
return if (this.shortNameCollides) this.fullSkieModuleName else this.shortSkieModuleName
}

private val KotlinTypeSwiftModel.skieNamespaceName: String
private val KotlinTypeSwiftModel.skieFileNamespaceName: String
get() = when (val descriptorHolder = descriptorHolder) {
is ClassOrFileDescriptorHolder.Class -> descriptorHolder.value.skieNamespaceName
is ClassOrFileDescriptorHolder.File -> descriptorProvider.getFileModule(descriptorHolder.value).skieModuleName
is ClassOrFileDescriptorHolder.Class -> descriptorHolder.value.skieFileNamespaceName
is ClassOrFileDescriptorHolder.File -> descriptorHolder.value.skieFileNamespaceName
}

private val ClassDescriptor.skieNamespaceName: String
private val ClassDescriptor.skieFileNamespaceName: String
get() = module.skieModuleName

private val SourceFile.skieFileNamespaceName: String
get() = descriptorProvider.getFileModule(this).skieModuleName

private val ModuleDescriptor.shortNameCollides: Boolean
get() = this in modulesWithShortNameCollision

Expand Down

0 comments on commit f4d4baf

Please sign in to comment.