Removed tooltip for variable as function(-like) call.

This commit is contained in:
Evgeny Gerashchenko
2013-04-04 16:22:51 +04:00
parent 73d44fb18b
commit 50b2f79b2e
4 changed files with 14 additions and 49 deletions
@@ -66,11 +66,13 @@ public class FunctionsHighlightingVisitor extends AfterAnalysisHighlightingVisit
ResolvedCall<? extends CallableDescriptor> resolvedCall =
bindingContext.get(BindingContext.RESOLVED_CALL, (JetReferenceExpression) callee);
if (resolvedCall != null) {
DeclarationDescriptor calleeDescriptor = resolvedCall.getResultingDescriptor();
if (resolvedCall instanceof VariableAsFunctionResolvedCall) {
highlightVariableAsFunctionCall(callee, (VariableAsFunctionResolvedCall) resolvedCall);
JetPsiChecker.highlightName(holder, callee, containedInFunctionClassOrSubclass(calleeDescriptor)
? JetHighlightingColors.VARIABLE_AS_FUNCTION_CALL
: JetHighlightingColors.VARIABLE_AS_FUNCTION_LIKE_CALL);
}
else {
DeclarationDescriptor calleeDescriptor = resolvedCall.getResultingDescriptor();
if (calleeDescriptor instanceof ConstructorDescriptor) {
JetPsiChecker.highlightName(holder, callee, JetHighlightingColors.CONSTRUCTOR_CALL);
}
@@ -91,25 +93,6 @@ public class FunctionsHighlightingVisitor extends AfterAnalysisHighlightingVisit
super.visitCallExpression(expression);
}
private void highlightVariableAsFunctionCall(JetExpression callee, VariableAsFunctionResolvedCall resolvedCall) {
VariableDescriptor variableDescriptor = resolvedCall.getVariableCall().getResultingDescriptor();
String kind = variableDescriptor instanceof ValueParameterDescriptor
? "parameter"
: variableDescriptor instanceof PropertyDescriptor
? "property"
: "variable";
if (containedInFunctionClassOrSubclass(resolvedCall.getFunctionCall().getResultingDescriptor())) {
holder.createInfoAnnotation(callee, "Calling " + kind + " as function").setTextAttributes(
JetHighlightingColors.VARIABLE_AS_FUNCTION_CALL);
}
else {
holder.createInfoAnnotation(callee, "Calling " + kind + " as function-like").setTextAttributes(
JetHighlightingColors.VARIABLE_AS_FUNCTION_LIKE_CALL);
}
}
private static boolean containedInFunctionClassOrSubclass(DeclarationDescriptor calleeDescriptor) {
DeclarationDescriptor parent = calleeDescriptor.getContainingDeclaration();
if (!(parent instanceof ClassDescriptor)) {
@@ -1,21 +0,0 @@
class FunctionLike {
fun invoke() {
}
}
val <info>property</info> = {}
fun foo(param: (Int) -> Int, functionLike: FunctionLike) {
<info descr="Calling parameter as function">param</info>(1)
<info descr="Calling parameter as function-like">functionLike</info>()
val v1 = param
var v2 = param
<info descr="Calling variable as function">v1</info>(1)
<info descr="Calling variable as function">v2</info>(1)
<info descr="Calling property as function">property</info>();
{}() //should not be highlighted as "calling variable as function"
}
@@ -1,3 +1,8 @@
trait <info textAttributesKey="KOTLIN_TRAIT">FunctionLike</info> {
fun <info textAttributesKey="KOTLIN_FUNCTION_DECLARATION">invoke</info>() {
}
}
var <info textAttributesKey="KOTLIN_NAMESPACE_PROPERTY"><info textAttributesKey="KOTLIN_PROPERTY_WITH_BACKING_FIELD"><info textAttributesKey="KOTLIN_MUTABLE_VARIABLE">global</info></info></info> : () -> <info textAttributesKey="KOTLIN_CLASS">Unit</info> = {}
val <info textAttributesKey="KOTLIN_CLASS">Int</info>.<info textAttributesKey="KOTLIN_EXTENSION_PROPERTY"><info textAttributesKey="KOTLIN_NAMESPACE_PROPERTY">ext</info></info> : () -> <info textAttributesKey="KOTLIN_CLASS">Unit</info>
@@ -5,8 +10,11 @@ val <info textAttributesKey="KOTLIN_CLASS">Int</info>.<info textAttributesKey="K
return {}
}
fun <info textAttributesKey="KOTLIN_FUNCTION_DECLARATION">foo</info>(<info textAttributesKey="KOTLIN_PARAMETER">a</info> : () -> <info textAttributesKey="KOTLIN_CLASS">Unit</info>) {
fun <info textAttributesKey="KOTLIN_FUNCTION_DECLARATION">foo</info>(<info textAttributesKey="KOTLIN_PARAMETER">a</info> : () -> <info textAttributesKey="KOTLIN_CLASS">Unit</info>, <info textAttributesKey="KOTLIN_PARAMETER">functionLike</info>: <info textAttributesKey="KOTLIN_TRAIT">FunctionLike</info>) {
<info textAttributesKey="KOTLIN_PARAMETER"><info textAttributesKey="KOTLIN_VARIABLE_AS_FUNCTION">a</info></info>()
<info textAttributesKey="KOTLIN_PARAMETER"><info textAttributesKey="KOTLIN_VARIABLE_AS_FUNCTION_LIKE">functionLike</info></info>()
<info textAttributesKey="KOTLIN_NAMESPACE_PROPERTY"><info textAttributesKey="KOTLIN_MUTABLE_VARIABLE"><info textAttributesKey="KOTLIN_VARIABLE_AS_FUNCTION">global</info></info></info>()
1.<info textAttributesKey="KOTLIN_EXTENSION_PROPERTY"><info textAttributesKey="KOTLIN_NAMESPACE_PROPERTY"><info textAttributesKey="KOTLIN_VARIABLE_AS_FUNCTION">ext</info></info></info>()
1.<info textAttributesKey="KOTLIN_EXTENSION_PROPERTY"><info textAttributesKey="KOTLIN_NAMESPACE_PROPERTY"><info textAttributesKey="KOTLIN_VARIABLE_AS_FUNCTION">ext</info></info></info>();
{}() //should not be highlighted as "calling variable as function"!
}
@@ -422,11 +422,6 @@ public class JetPsiCheckerTestGenerated extends AbstractJetPsiCheckerTest {
doTestWithInfos("idea/testData/checker/infos/PropertiesWithBackingFields.kt");
}
@TestMetadata("VariableAsFunction.kt")
public void testVariableAsFunction() throws Exception {
doTestWithInfos("idea/testData/checker/infos/VariableAsFunction.kt");
}
@TestMetadata("WrapIntoRef.kt")
public void testWrapIntoRef() throws Exception {
doTestWithInfos("idea/testData/checker/infos/WrapIntoRef.kt");