Add html escaping for declaration names in calls (KT-10763)

#KT-10763 Fixed
This commit is contained in:
Nikolay Krasko
2016-02-10 01:19:12 +03:00
parent 45f21bc7fd
commit 3f5f892e1b
5 changed files with 31 additions and 4 deletions
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.resolve.calls.inference.InferenceErrorData
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ConflictingJvmDeclarationsData
import org.jetbrains.kotlin.types.KotlinType
import kotlin.comparisons.*
import kotlin.comparisons.compareBy
object IdeRenderers {
@@ -35,7 +35,7 @@ object IdeRenderers {
calls
.map { it.resultingDescriptor }
.sortedWith(MemberComparator.INSTANCE)
.joinToString("") { "<li>" + DescriptorRenderer.HTML.render(it) + "</li>" }
.joinToString("") { "<li>${DescriptorRenderer.HTML.render(it)}</li>" }
}
@JvmField val HTML_RENDER_TYPE: Renderer<KotlinType> = Renderer {
@@ -47,7 +47,7 @@ object IdeRenderers {
val comparator = compareBy(MemberComparator.INSTANCE) { c: ResolvedCall<*> -> c.resultingDescriptor }
calls
.sortedWith(comparator)
.joinToString("") { "<li>" + renderResolvedCall(it) + "</li>" }
.joinToString("") { "<li>${renderResolvedCall(it)}</li>" }
}
@JvmField val HTML_TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS_RENDERER: Renderer<InferenceErrorData> = Renderer {
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.idea.highlighter.renderersUtil
import com.google.common.html.HtmlEscapers
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
@@ -98,7 +99,7 @@ fun <D : CallableDescriptor> renderResolvedCall(resolvedCall: ResolvedCall<D>):
if (receiverParameter != null) {
append(htmlRenderer.renderType(receiverParameter.type)).append(".")
}
append(resultingDescriptor.name).append("(")
append(HtmlEscapers.htmlEscaper().escape(resultingDescriptor.name.asString())).append("(")
append(resultingDescriptor.valueParameters.map { parameter -> renderParameter(parameter) }.joinToString())
append(if (resolvedCall.hasUnmappedArguments()) renderError(")") else ")")
@@ -0,0 +1,12 @@
// !DIAGNOSTICS_NUMBER: 1
// !DIAGNOSTICS: NONE_APPLICABLE
// !MESSAGE_TYPE: HTML
class A(a: Int) {
}
fun A(a: String) {}
fun main(args: Array<String>) {
A()
}
@@ -0,0 +1,8 @@
<!-- noneApplicableConstructor1 -->
<html>
None of the following functions can be called with the arguments supplied.
<ul>
<li><`init>(<font color=red><b>Int</b></font>) <i>defined in</i> A</li>
<li>A(<font color=red><b>String</b></font>) <i>defined in</i> root package</li>
</ul>
</html>
@@ -155,6 +155,12 @@ public class DiagnosticMessageTestGenerated extends AbstractDiagnosticMessageTes
doTest(fileName);
}
@TestMetadata("noneApplicableConstructor.kt")
public void testNoneApplicableConstructor() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/diagnosticMessage/noneApplicableConstructor.kt");
doTest(fileName);
}
@TestMetadata("noneApplicableGeneric.kt")
public void testNoneApplicableGeneric() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/diagnosticMessage/noneApplicableGeneric.kt");