Don't highlight entire complex callee expression as call
If an expression returns something that has invoke() defined on it, this entire expression can act as a callee. If we highlight it, this will suppress more useful highlighting such as string literals. #KT-16159 Fixed
This commit is contained in:
+1
-1
@@ -63,7 +63,7 @@ internal class FunctionsHighlightingVisitor(holder: AnnotationHolder, bindingCon
|
|||||||
override fun visitCallExpression(expression: KtCallExpression) {
|
override fun visitCallExpression(expression: KtCallExpression) {
|
||||||
val callee = expression.calleeExpression
|
val callee = expression.calleeExpression
|
||||||
val resolvedCall = expression.getResolvedCall(bindingContext)
|
val resolvedCall = expression.getResolvedCall(bindingContext)
|
||||||
if (callee is KtReferenceExpression && resolvedCall != null) {
|
if (callee is KtReferenceExpression && callee !is KtCallExpression && resolvedCall != null) {
|
||||||
highlightCall(callee, resolvedCall)
|
highlightCall(callee, resolvedCall)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
fun <info textAttributesKey="KOTLIN_FUNCTION_DECLARATION">test</info>() {
|
||||||
|
<info textAttributesKey="KOTLIN_CONSTRUCTOR">Test</info>("text", "text")() // BUG
|
||||||
|
}
|
||||||
|
|
||||||
|
class <info textAttributesKey="KOTLIN_CLASS">Test</info>(val <info textAttributesKey="KOTLIN_INSTANCE_PROPERTY">x</info>: <info textAttributesKey="KOTLIN_CLASS">String</info>, val <info textAttributesKey="KOTLIN_INSTANCE_PROPERTY">y</info>: <info textAttributesKey="KOTLIN_CLASS">String</info>) {
|
||||||
|
<info textAttributesKey="KOTLIN_BUILTIN_ANNOTATION">operator</info> fun <info textAttributesKey="KOTLIN_FUNCTION_DECLARATION">invoke</info>() {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -66,6 +66,12 @@ public class HighlightingTestGenerated extends AbstractHighlightingTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("InvokeCall.kt")
|
||||||
|
public void testInvokeCall() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/highlighter/InvokeCall.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("JavaTypes.kt")
|
@TestMetadata("JavaTypes.kt")
|
||||||
public void testJavaTypes() throws Exception {
|
public void testJavaTypes() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/highlighter/JavaTypes.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/highlighter/JavaTypes.kt");
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ public class TagsTestDataUtil {
|
|||||||
highlightInfo.getDescription());
|
highlightInfo.getDescription());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return String.format("textAttributesKey=\"%s\"", getName());
|
return String.format("textAttributesKey=\"%s\"", highlightInfo.forcedTextAttributesKey);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
Reference in New Issue
Block a user