From a0a8beee8252ad1918673d7ace3e47a9238e024b Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Mon, 13 Mar 2017 11:58:22 +0300 Subject: [PATCH] Handle TypeAliasDescriptor in AdaptiveClassifierNamePolicy (as ClassDescriptor) --- .../rendering/adaptiveClassifierNamePolicy.kt | 19 +++++++++++-------- ...eMismatchWithTypeParametersAndTypeAlias.kt | 18 ++++++++++++++++++ ...smatchWithTypeParametersAndTypeAlias1.html | 14 ++++++++++++++ .../DiagnosticMessageTestGenerated.java | 6 ++++++ 4 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 idea/testData/diagnosticMessage/complexTypeMismatchWithTypeParametersAndTypeAlias.kt create mode 100644 idea/testData/diagnosticMessage/complexTypeMismatchWithTypeParametersAndTypeAlias1.html diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/adaptiveClassifierNamePolicy.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/adaptiveClassifierNamePolicy.kt index 5d04f00e960..046e8ebeda7 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/adaptiveClassifierNamePolicy.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/adaptiveClassifierNamePolicy.kt @@ -16,18 +16,14 @@ package org.jetbrains.kotlin.diagnostics.rendering -import org.jetbrains.kotlin.descriptors.CallableDescriptor -import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.ClassifierDescriptor -import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor -import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.name.FqNameUnsafe import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.renderer.ClassifierNamePolicy import org.jetbrains.kotlin.renderer.DescriptorRenderer -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe import org.jetbrains.kotlin.types.KotlinType +import org.jetbrains.kotlin.types.getAbbreviation import org.jetbrains.kotlin.types.typeUtil.contains import java.util.* @@ -40,7 +36,9 @@ private class AdaptiveClassifierNamePolicy(private val ambiguousNames: List ClassifierNamePolicy.SHORT.renderClassifier(classifier, renderer) - classifier is ClassDescriptor -> ClassifierNamePolicy.FULLY_QUALIFIED.renderClassifier(classifier, renderer) + classifier is ClassDescriptor || + classifier is TypeAliasDescriptor -> + ClassifierNamePolicy.FULLY_QUALIFIED.renderClassifier(classifier, renderer) classifier is TypeParameterDescriptor -> { val name = classifier.name val typeParametersWithSameName = renderedParameters.getOrPut(name) { LinkedHashSet() } @@ -80,10 +78,15 @@ private fun collectClassifiersFqNames(objectsToRender: Collection): Set, result: MutableSet) { + fun KotlinType.addMentionedTypeConstructor() { + constructor.declarationDescriptor?.let { result.add(it.fqNameUnsafe) } + } + contextObjects.filterIsInstance().forEach { diagnosticType -> diagnosticType.contains { innerType -> - innerType.constructor.declarationDescriptor?.let { result.add(it.fqNameUnsafe) } + innerType.addMentionedTypeConstructor() + innerType.getAbbreviation()?.addMentionedTypeConstructor() false } } diff --git a/idea/testData/diagnosticMessage/complexTypeMismatchWithTypeParametersAndTypeAlias.kt b/idea/testData/diagnosticMessage/complexTypeMismatchWithTypeParametersAndTypeAlias.kt new file mode 100644 index 00000000000..aad55d842f5 --- /dev/null +++ b/idea/testData/diagnosticMessage/complexTypeMismatchWithTypeParametersAndTypeAlias.kt @@ -0,0 +1,18 @@ +// !DIAGNOSTICS_NUMBER: 1 +// !DIAGNOSTICS: TYPE_MISMATCH +// !MESSAGE_TYPE: HTML + +package a.b.c + +class G + +typealias A = G + +class D { + fun g(t: Map) { + } + + fun g(t1: Map, t2: Int) { + g(t1) + } +} \ No newline at end of file diff --git a/idea/testData/diagnosticMessage/complexTypeMismatchWithTypeParametersAndTypeAlias1.html b/idea/testData/diagnosticMessage/complexTypeMismatchWithTypeParametersAndTypeAlias1.html new file mode 100644 index 00000000000..ee316c27af8 --- /dev/null +++ b/idea/testData/diagnosticMessage/complexTypeMismatchWithTypeParametersAndTypeAlias1.html @@ -0,0 +1,14 @@ + + +Type mismatch. + + + + + + + + + +
Required:Map<`T#1 (type parameter of a.b.c.D), a.b.c.A /* = G */>
Found:Map<`T#2 (type parameter of a.b.c.D.g), A#1 (type parameter of a.b.c.D)>
+ \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/highlighter/DiagnosticMessageTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/highlighter/DiagnosticMessageTestGenerated.java index 39fa5214fe2..b35547b2821 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/highlighter/DiagnosticMessageTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/highlighter/DiagnosticMessageTestGenerated.java @@ -72,6 +72,12 @@ public class DiagnosticMessageTestGenerated extends AbstractDiagnosticMessageTes doTest(fileName); } + @TestMetadata("complexTypeMismatchWithTypeParametersAndTypeAlias.kt") + public void testComplexTypeMismatchWithTypeParametersAndTypeAlias() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/diagnosticMessage/complexTypeMismatchWithTypeParametersAndTypeAlias.kt"); + doTest(fileName); + } + @TestMetadata("conflictingOverloadsClass.kt") public void testConflictingOverloadsClass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/diagnosticMessage/conflictingOverloadsClass.kt");