JVM IR: do not use JvmDeclarationOrigin in duplicate signatures

Apparently the client code which reports errors only meaningfully uses
the `descriptor` field of `JvmDeclarationOrigin` in case of JVM IR.
This commit is contained in:
Alexander Udalov
2023-02-27 13:56:12 +01:00
parent 00fff3de72
commit b1d109e7a3
8 changed files with 44 additions and 60 deletions
@@ -78,7 +78,8 @@ abstract class SignatureCollectingClassBuilderFactory(
classInternalName,
classCreatedFor,
signature,
elementsAndDescriptors
elementsAndDescriptors,
elementsAndDescriptors.mapNotNull(JvmDeclarationOrigin::descriptor),
))
}
onClassDone(classCreatedFor, classInternalName, signatures)
@@ -71,17 +71,17 @@ class BuilderFactoryForDuplicateSignatureDiagnostics(
}
private fun reportConflictingJvmSignatures(data: ConflictingJvmDeclarationsData) {
val noOwnImplementations = data.signatureOrigins.all { it.originKind in EXTERNAL_SOURCES_KINDS }
val noOwnImplementations = data.signatureOrigins!!.all { it.originKind in EXTERNAL_SOURCES_KINDS }
val elements = LinkedHashSet<PsiElement>()
if (noOwnImplementations) {
elements.addIfNotNull(data.classOrigin.element)
elements.addIfNotNull(data.classOrigin!!.element)
} else {
for (origin in data.signatureOrigins) {
for (origin in data.signatureOrigins!!) {
var element = origin.element
if (element == null || origin.originKind in EXTERNAL_SOURCES_KINDS) {
element = data.classOrigin.element
element = data.classOrigin!!.element
}
elements.addIfNotNull(element)
@@ -186,7 +186,9 @@ class BuilderFactoryForDuplicateSignatureDiagnostics(
}
}
val data = ConflictingJvmDeclarationsData(classInternalName, classOrigin, rawSignature, origins)
val data = ConflictingJvmDeclarationsData(
classInternalName, classOrigin, rawSignature, origins, origins.mapNotNull(JvmDeclarationOrigin::descriptor),
)
if (memberElement != null) {
return ConflictingDeclarationError.AccidentalOverride(memberElement, data)
}