[K/N] Prohibit empty ObjCNames
This commit is contained in:
committed by
SvyatoslavScherbina
parent
0290f09ac2
commit
b406722e20
+1
@@ -46,6 +46,7 @@ private val DIAGNOSTIC_FACTORY_TO_RENDERER by lazy {
|
||||
ErrorsNative.INVALID_OBJC_NAME_FIRST_CHAR, "@ObjCName contains illegal first characters: {0}",
|
||||
CommonRenderers.STRING
|
||||
)
|
||||
put(ErrorsNative.EMPTY_OBJC_NAME, "Empty @ObjCName names aren't supported")
|
||||
put(
|
||||
ErrorsNative.INCOMPATIBLE_OBJC_NAME_OVERRIDE, "Member \"{0}\" inherits inconsistent @ObjCName from {1}",
|
||||
Renderers.NAME,
|
||||
|
||||
@@ -45,6 +45,8 @@ object ErrorsNative {
|
||||
@JvmField
|
||||
val INVALID_OBJC_NAME_FIRST_CHAR = DiagnosticFactory1.create<KtElement, String>(Severity.ERROR)
|
||||
@JvmField
|
||||
val EMPTY_OBJC_NAME = DiagnosticFactory0.create<KtElement>(Severity.ERROR)
|
||||
@JvmField
|
||||
val INCOMPATIBLE_OBJC_NAME_OVERRIDE = DiagnosticFactory2.create<KtElement, DeclarationDescriptor, Collection<DeclarationDescriptor>>(Severity.ERROR)
|
||||
@JvmField
|
||||
val INAPPLICABLE_EXACT_OBJC_NAME = DiagnosticFactory0.create<KtElement>(Severity.ERROR)
|
||||
|
||||
+5
-2
@@ -64,6 +64,9 @@ object NativeObjCNameChecker : DeclarationChecker {
|
||||
if (objCName.name == null && objCName.swiftName == null) {
|
||||
context.trace.report(ErrorsNative.INVALID_OBJC_NAME.on(reportLocation))
|
||||
}
|
||||
if (objCName.name?.isEmpty() == true || objCName.swiftName?.isEmpty() == true) {
|
||||
context.trace.report(ErrorsNative.EMPTY_OBJC_NAME.on(reportLocation))
|
||||
}
|
||||
val invalidNameFirstChar = objCName.name?.firstOrNull()?.takeUnless(validFirstChars::contains)
|
||||
val invalidSwiftNameFirstChar = objCName.swiftName?.firstOrNull()?.takeUnless(validFirstChars::contains)
|
||||
val invalidFirstChars = setOfNotNull(invalidNameFirstChar, invalidSwiftNameFirstChar)
|
||||
@@ -87,8 +90,8 @@ object NativeObjCNameChecker : DeclarationChecker {
|
||||
class ObjCName(
|
||||
val annotation: AnnotationDescriptor
|
||||
) {
|
||||
val name: String? = annotation.argumentValue("name")?.value?.safeAs<String>()?.takeIf { it.isNotBlank() }
|
||||
val swiftName: String? = annotation.argumentValue("swiftName")?.value?.safeAs<String>()?.takeIf { it.isNotBlank() }
|
||||
val name: String? = annotation.argumentValue("name")?.value?.safeAs<String>()
|
||||
val swiftName: String? = annotation.argumentValue("swiftName")?.value?.safeAs<String>()
|
||||
val exact: Boolean = annotation.argumentValue("exact")?.value?.safeAs<Boolean>() ?: false
|
||||
|
||||
override fun equals(other: Any?): Boolean =
|
||||
|
||||
Reference in New Issue
Block a user