[ObjCExport] Fix 'MustBeDocumented' annotation missing on non value parameters

This commit is contained in:
Sebastian Sellmair
2023-12-07 13:05:12 +01:00
committed by Space Team
parent 885a7dcd8f
commit 1440e66519
10 changed files with 139 additions and 4 deletions
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.backend.konan.objcexport
import org.jetbrains.kotlin.backend.common.descriptors.allParameters
import org.jetbrains.kotlin.backend.common.serialization.findSourceFile
import org.jetbrains.kotlin.backend.konan.*
import org.jetbrains.kotlin.backend.konan.descriptors.enumEntries
@@ -807,7 +808,7 @@ class ObjCExportTranslatorImpl(
} else emptyList()
val visibilityComments = visibilityComments(method.visibility, "method")
val paramComments = method.valueParameters.flatMap { parameterDescriptor ->
val paramComments = method.allParameters.flatMap { parameterDescriptor ->
parameters.find { parameter -> parameter.origin?.name == parameterDescriptor.name }?.let { parameter ->
mustBeDocumentedParamAttributeList(parameter, descriptor = parameterDescriptor)
} ?: emptyList()
@@ -374,8 +374,6 @@ class ObjCExportLazyImpl(
private val lazy: ObjCExportLazyImpl,
) : LazyObjCInterface(name = name.objCName, generics = emptyList(), categoryName = categoryName, attributes = emptyList()) {
override val origin: ObjCExportStubOrigin? = ObjCExportStubOrigin(classDescriptor)
override fun computeRealStub(): ObjCInterface = lazy.translator.translateExtensions(
classDescriptor,
declarations.mapNotNull { declaration ->
@@ -403,6 +401,10 @@ private abstract class LazyObjCInterface(
private val realStub by lazy { computeRealStub() }
override val origin: ObjCExportStubOrigin? by lazy {
realStub.origin
}
override val members: List<ObjCExportStub>
get() = realStub.members
@@ -13,14 +13,18 @@ import org.jetbrains.kotlin.resolve.source.PsiSourceElement
fun ObjCExportStubOrigin(descriptor: DeclarationDescriptor?): ObjCExportStubOrigin? {
if (descriptor == null) return null
if (descriptor is DeserializedDescriptor) {
return ObjCExportStubOrigin.Binary(descriptor.name, descriptor.extractSerializedKdocString())
}
if (descriptor is DeclarationDescriptorWithSource) {
return ObjCExportStubOrigin.Source(descriptor.name, descriptor.findKDocString(), (descriptor.source as? PsiSourceElement)?.psi)
}
assert(descriptor is DeserializedDescriptor) { "Expected '$descriptor' to implement ${DeserializedDescriptor::class.simpleName}" }
return ObjCExportStubOrigin.Binary(descriptor.name, descriptor.extractSerializedKdocString())
}
fun ObjCProtocolImpl(
name: String,
descriptor: ClassDescriptor,