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
@@ -16,9 +16,12 @@
package org.jetbrains.kotlin.resolve.jvm.diagnostics
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
class ConflictingJvmDeclarationsData(
val classInternalName: String,
val classOrigin: JvmDeclarationOrigin,
val signature: RawSignature,
val signatureOrigins: Collection<JvmDeclarationOrigin>
val classInternalName: String,
val classOrigin: JvmDeclarationOrigin?,
val signature: RawSignature,
val signatureOrigins: Collection<JvmDeclarationOrigin>?,
val signatureDescriptors: Collection<DeclarationDescriptor>,
)
@@ -12,8 +12,9 @@ import org.jetbrains.kotlin.resolve.MemberComparator;
import org.jetbrains.kotlin.utils.StringsKt;
import java.util.List;
import java.util.stream.Collectors;
import static kotlin.collections.CollectionsKt.*;
import static kotlin.collections.CollectionsKt.map;
import static org.jetbrains.kotlin.diagnostics.rendering.CommonRenderers.STRING;
import static org.jetbrains.kotlin.diagnostics.rendering.Renderers.*;
import static org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm.*;
@@ -22,10 +23,8 @@ public class DefaultErrorMessagesJvm implements DefaultErrorMessages.Extension {
private static final DiagnosticParameterRenderer<ConflictingJvmDeclarationsData> CONFLICTING_JVM_DECLARATIONS_DATA =
(data, context) -> {
List<DeclarationDescriptor> renderedDescriptors = sortedWith(
mapNotNull(data.getSignatureOrigins(), JvmDeclarationOrigin::getDescriptor),
MemberComparator.INSTANCE
);
List<DeclarationDescriptor> renderedDescriptors =
data.getSignatureDescriptors().stream().sorted(MemberComparator.INSTANCE).collect(Collectors.toList());
RenderingContext renderingContext = new RenderingContext.Impl(renderedDescriptors);
return "The following declarations have the same JVM signature " +
"(" + data.getSignature().getName() + data.getSignature().getDesc() + "):\n" +
@@ -43,20 +43,14 @@ object KtDefaultJvmErrorMessages : BaseDiagnosticRendererFactory() {
@JvmField
val CONFLICTING_JVM_DECLARATIONS_DATA = Renderer<ConflictingJvmDeclarationsData> {
val renderedDescriptors: List<DeclarationDescriptor?> =
it.signatureOrigins.mapNotNull(
JvmDeclarationOrigin::descriptor
).sortedWith(MemberComparator.INSTANCE)
val renderingContext: RenderingContext =
RenderingContext.Impl(renderedDescriptors)
val renderedDescriptors = it.signatureDescriptors.sortedWith(MemberComparator.INSTANCE)
val renderingContext = RenderingContext.Impl(renderedDescriptors)
"""
The following declarations have the same JVM signature (${it.signature.name}${it.signature.desc}):
""".trimIndent() +
join(renderedDescriptors.map { descriptor: DeclarationDescriptor? ->
" " + Renderers.WITHOUT_MODIFIERS.render(
descriptor!!, renderingContext
)
join(renderedDescriptors.map { descriptor ->
" " + Renderers.WITHOUT_MODIFIERS.render(descriptor, renderingContext)
}, "\n")
}