From e7cbff14efe48db0b0f9fc6015eecaf1e99c0c47 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Tue, 16 Oct 2012 18:24:06 +0400 Subject: [PATCH] mark last parenthesis instead of value argument list --- .../jetbrains/jet/lang/diagnostics/Errors.java | 2 +- .../lang/diagnostics/PositioningStrategies.java | 15 +++++++++++++++ .../jet/lang/psi/JetValueArgumentList.java | 9 +++++++++ .../jet/lang/resolve/calls/ResolutionTask.java | 2 +- .../tests/FunctionCalleeExpressions.kt | 4 ++-- .../tests/NamedArgumentsAndDefaultValues.kt | 8 ++++---- .../tests/extensions/ExtensionsCalledOnSuper.kt | 4 ++-- .../tests/inference/regressions/kt1558.kt | 10 +++++----- .../checker/rendering/TypeInferenceError.kt | 2 +- 9 files changed, 40 insertions(+), 16 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java index 5b3a531f97c..741515498a4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java @@ -352,7 +352,7 @@ public interface Errors { AmbiguousDescriptorDiagnosticFactory OVERLOAD_RESOLUTION_AMBIGUITY = new AmbiguousDescriptorDiagnosticFactory(); AmbiguousDescriptorDiagnosticFactory NONE_APPLICABLE = new AmbiguousDescriptorDiagnosticFactory(); - DiagnosticFactory1 NO_VALUE_FOR_PARAMETER = DiagnosticFactory1.create(ERROR); + DiagnosticFactory1 NO_VALUE_FOR_PARAMETER = DiagnosticFactory1.create(ERROR, VALUE_ARGUMENTS); DiagnosticFactory1 MISSING_RECEIVER = DiagnosticFactory1.create(ERROR); SimpleDiagnosticFactory NO_RECEIVER_ADMITTED = SimpleDiagnosticFactory.create(ERROR); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategies.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategies.java index 588b313be1c..846c525f2f7 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategies.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategies.java @@ -322,4 +322,19 @@ public class PositioningStrategies { return super.mark(element); } }; + + public static PositioningStrategy VALUE_ARGUMENTS = new PositioningStrategy() { + @NotNull + @Override + public List mark(@NotNull JetElement element) { + if (element instanceof JetValueArgumentList) { + PsiElement rightParenthesis = ((JetValueArgumentList) element).getRightParenthesis(); + if (rightParenthesis != null) { + return markElement(rightParenthesis); + } + + } + return super.mark(element); + } + }; } \ No newline at end of file diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetValueArgumentList.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetValueArgumentList.java index 92752d55b56..7adb7e03f40 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetValueArgumentList.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetValueArgumentList.java @@ -17,8 +17,11 @@ package org.jetbrains.jet.lang.psi; import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.JetNodeTypes; +import org.jetbrains.jet.lexer.JetTokens; import java.util.List; @@ -43,4 +46,10 @@ public class JetValueArgumentList extends JetElementImpl { public List getArguments() { return findChildrenByType(JetNodeTypes.VALUE_ARGUMENT); } + + @Nullable + public PsiElement getRightParenthesis() { + return findChildByType(JetTokens.RPAR); + } + } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ResolutionTask.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ResolutionTask.java index 07f59318d77..ef7bb1d4cc8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ResolutionTask.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ResolutionTask.java @@ -133,7 +133,7 @@ public class ResolutionTask extends R @Override public void noValueForParameter(@NotNull BindingTrace trace, @NotNull ValueParameterDescriptor valueParameter) { - PsiElement reportOn; + JetElement reportOn; JetValueArgumentList valueArgumentList = call.getValueArgumentList(); if (valueArgumentList != null) { reportOn = valueArgumentList; diff --git a/compiler/testData/diagnostics/tests/FunctionCalleeExpressions.kt b/compiler/testData/diagnostics/tests/FunctionCalleeExpressions.kt index 6254980df3e..dc9cdecaa18 100644 --- a/compiler/testData/diagnostics/tests/FunctionCalleeExpressions.kt +++ b/compiler/testData/diagnostics/tests/FunctionCalleeExpressions.kt @@ -22,7 +22,7 @@ fun fooT2() : (t : T) -> T { fun main(args : Array) { args.foo()() - args.foo1()() + args.foo1()() a.foo1()() a.foo1()(a) @@ -71,7 +71,7 @@ fun main1() { } fun test() { - {(x : Int) -> 1}(); + {(x : Int) -> 1}(); {Int.() -> 1}() "sd".{Int.() -> 1}() val i : Int? = null diff --git a/compiler/testData/diagnostics/tests/NamedArgumentsAndDefaultValues.kt b/compiler/testData/diagnostics/tests/NamedArgumentsAndDefaultValues.kt index 161e6f7f743..553da3390c2 100644 --- a/compiler/testData/diagnostics/tests/NamedArgumentsAndDefaultValues.kt +++ b/compiler/testData/diagnostics/tests/NamedArgumentsAndDefaultValues.kt @@ -14,10 +14,10 @@ fun test() { foo(1, "", "") bar(z = "") - bar() - bar("") + bar() + bar("") bar(1, 1, "") bar(1, 1, "") bar(1, z = "") - bar(1, zz = "", zz.foo) -} + bar(1, zz = "", zz.foo) +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/extensions/ExtensionsCalledOnSuper.kt b/compiler/testData/diagnostics/tests/extensions/ExtensionsCalledOnSuper.kt index af2045aa2b2..5dd144c7b1a 100644 --- a/compiler/testData/diagnostics/tests/extensions/ExtensionsCalledOnSuper.kt +++ b/compiler/testData/diagnostics/tests/extensions/ExtensionsCalledOnSuper.kt @@ -16,6 +16,6 @@ class C : T { super.foo() // OK super.bar() // Error super.buzz() // OK, resolved to a member - super.buzz1() // Resolved to a member, but error: no parameter passed where required + super.buzz1() // Resolved to a member, but error: no parameter passed where required } -} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inference/regressions/kt1558.kt b/compiler/testData/diagnostics/tests/inference/regressions/kt1558.kt index 2ec9436e4a2..e2e3b2c715b 100644 --- a/compiler/testData/diagnostics/tests/inference/regressions/kt1558.kt +++ b/compiler/testData/diagnostics/tests/inference/regressions/kt1558.kt @@ -6,17 +6,17 @@ fun T?.sure() : T = this!! fun testArrays(val ci: List, val cii: List?) { val c1: Array = cii.sure().toArray(Array) - val c2: Array = ci.toArray(Array()) + val c2: Array = ci.toArray(Array()) - val c3 = Array() + val c3 = Array() - val c4 = ci.toArray(Array()) + val c4 = ci.toArray(Array()) - val c5 = ci.toArray(Array()) + val c5 = ci.toArray(Array()) c1 : Array c2 : Array c3 : Array c4 : Array c5 : Array -} +} \ No newline at end of file diff --git a/idea/testData/checker/rendering/TypeInferenceError.kt b/idea/testData/checker/rendering/TypeInferenceError.kt index c2795de4653..378d8003bf1 100644 --- a/idea/testData/checker/rendering/TypeInferenceError.kt +++ b/idea/testData/checker/rendering/TypeInferenceError.kt @@ -2,7 +2,7 @@ fun testMutableMapEntry(map: MutableMap, testMutableMapEntry(hashMap(1 to 'a'), 'b') + testMutableMapEntry(hashMap(1 to 'a'), 'b') } //extract from library