Fix rendering of local anonymous object types for quick doc

#KT-8893 fixed
This commit is contained in:
Simon Ogorodnik
2017-06-27 21:42:42 +03:00
parent 25109671b1
commit ab919886ae
3 changed files with 34 additions and 0 deletions
@@ -60,6 +60,25 @@ import org.jetbrains.kotlin.utils.addToStdlib.constant
class HtmlClassifierNamePolicy(val base: ClassifierNamePolicy) : ClassifierNamePolicy {
override fun renderClassifier(classifier: ClassifierDescriptor, renderer: DescriptorRenderer): String {
if (DescriptorUtils.isAnonymousObject(classifier)) {
val supertypes = classifier.typeConstructor.supertypes
return buildString {
append("<anonymous object")
if (supertypes.isNotEmpty()) {
append(" : ")
supertypes.joinTo(this) {
val ref = it.constructor.declarationDescriptor
if (ref != null)
renderClassifier(ref, renderer)
else
"<ERROR CLASS>"
}
}
append(">")
}
}
val name = base.renderClassifier(classifier, renderer)
if (classifier.isBoringBuiltinClass())
return name
@@ -0,0 +1,9 @@
interface OurFace
open class OurClass
fun context() {
val v = object : OurClass(), OurFace {}
v<caret>
}
//INFO: <pre><b>val</b> v: &lt;anonymous object : <a href="psi_element://OurClass">OurClass</a>, <a href="psi_element://OurFace">OurFace</a>&gt;</pre>
@@ -36,6 +36,12 @@ public class QuickDocProviderTestGenerated extends AbstractQuickDocProviderTest
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/editor/quickDoc"), Pattern.compile("^([^_]+)\\.[^\\.]*$"), TargetBackend.ANY, true);
}
@TestMetadata("AnonymousObjectLocalVariable.kt")
public void testAnonymousObjectLocalVariable() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/editor/quickDoc/AnonymousObjectLocalVariable.kt");
doTest(fileName);
}
@TestMetadata("AtConstantWithUnderscore.kt")
public void testAtConstantWithUnderscore() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/editor/quickDoc/AtConstantWithUnderscore.kt");