[K/N] Add binary option to produce error on mangled objc names (#5264)
objcExportErrorOnNameCollisions=true binary option makes the compiler emit an error whenever it mangles a name emitted by ObjCExport. ^KT-65863 Fixed
This commit is contained in:
+24
-11
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.backend.konan.objcexport
|
||||
import org.jetbrains.kotlin.backend.common.serialization.findSourceFile
|
||||
import org.jetbrains.kotlin.backend.konan.InternalKotlinNativeApi
|
||||
import org.jetbrains.kotlin.backend.konan.KonanFqNames
|
||||
import org.jetbrains.kotlin.backend.konan.ObjCExportNameCollisionMode
|
||||
import org.jetbrains.kotlin.backend.konan.UnitSuspendFunctionObjCExport
|
||||
import org.jetbrains.kotlin.backend.konan.cKeywords
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.isArray
|
||||
@@ -67,8 +68,8 @@ interface ObjCExportNamer {
|
||||
val ignoreInterfaceMethodCollisions: Boolean
|
||||
get() = false
|
||||
|
||||
val reportNameCollisions: Boolean
|
||||
get() = false
|
||||
val nameCollisionMode: ObjCExportNameCollisionMode
|
||||
get() = ObjCExportNameCollisionMode.NONE
|
||||
}
|
||||
|
||||
val topLevelNamePrefix: String
|
||||
@@ -308,7 +309,7 @@ class ObjCExportNamerImpl(
|
||||
objcGenerics: Boolean = false,
|
||||
disableSwiftMemberNameMangling: Boolean = false,
|
||||
ignoreInterfaceMethodCollisions: Boolean = false,
|
||||
reportNameCollisions: Boolean = false,
|
||||
nameCollisionMode: ObjCExportNameCollisionMode = ObjCExportNameCollisionMode.NONE,
|
||||
) : this(
|
||||
object : ObjCExportNamer.Configuration {
|
||||
override val topLevelNamePrefix: String
|
||||
@@ -326,8 +327,8 @@ class ObjCExportNamerImpl(
|
||||
override val ignoreInterfaceMethodCollisions: Boolean
|
||||
get() = ignoreInterfaceMethodCollisions
|
||||
|
||||
override val reportNameCollisions: Boolean
|
||||
get() = reportNameCollisions
|
||||
override val nameCollisionMode: ObjCExportNameCollisionMode
|
||||
get() = nameCollisionMode
|
||||
},
|
||||
builtIns,
|
||||
mapper,
|
||||
@@ -863,13 +864,25 @@ class ObjCExportNamerImpl(
|
||||
return it
|
||||
}
|
||||
|
||||
if (configuration.reportNameCollisions && !reportedCollision) {
|
||||
if (element is DeclarationDescriptor) {
|
||||
problemCollector.reportWarning(element, "name is mangled when generating Objective-C header")
|
||||
} else {
|
||||
problemCollector.reportWarning("name \"$it\" is mangled when generating Objective-C header")
|
||||
}
|
||||
if (!reportedCollision) {
|
||||
reportedCollision = true
|
||||
when (configuration.nameCollisionMode) {
|
||||
ObjCExportNameCollisionMode.ERROR -> {
|
||||
if (element is DeclarationDescriptor) {
|
||||
problemCollector.reportError(element, "name is mangled when generating Objective-C header")
|
||||
} else {
|
||||
problemCollector.reportError("name \"$it\" is mangled when generating Objective-C header")
|
||||
}
|
||||
}
|
||||
ObjCExportNameCollisionMode.WARNING -> {
|
||||
if (element is DeclarationDescriptor) {
|
||||
problemCollector.reportWarning(element, "name is mangled when generating Objective-C header")
|
||||
} else {
|
||||
problemCollector.reportWarning("name \"$it\" is mangled when generating Objective-C header")
|
||||
}
|
||||
}
|
||||
ObjCExportNameCollisionMode.NONE -> Unit
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
@@ -10,11 +10,15 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
interface ObjCExportProblemCollector {
|
||||
fun reportWarning(text: String)
|
||||
fun reportWarning(declaration: DeclarationDescriptor, text: String)
|
||||
fun reportError(text: String)
|
||||
fun reportError(declaration: DeclarationDescriptor, text: String)
|
||||
fun reportException(throwable: Throwable)
|
||||
|
||||
object SILENT : ObjCExportProblemCollector {
|
||||
override fun reportWarning(text: String) {}
|
||||
override fun reportWarning(declaration: DeclarationDescriptor, text: String) {}
|
||||
override fun reportError(text: String) {}
|
||||
override fun reportError(declaration: DeclarationDescriptor, text: String) {}
|
||||
override fun reportException(throwable: Throwable) {}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user