mark last parenthesis instead of value argument list

This commit is contained in:
Svetlana Isakova
2012-10-16 18:24:06 +04:00
parent 0d4d576fed
commit e7cbff14ef
9 changed files with 40 additions and 16 deletions
@@ -352,7 +352,7 @@ public interface Errors {
AmbiguousDescriptorDiagnosticFactory OVERLOAD_RESOLUTION_AMBIGUITY = new AmbiguousDescriptorDiagnosticFactory(); AmbiguousDescriptorDiagnosticFactory OVERLOAD_RESOLUTION_AMBIGUITY = new AmbiguousDescriptorDiagnosticFactory();
AmbiguousDescriptorDiagnosticFactory NONE_APPLICABLE = new AmbiguousDescriptorDiagnosticFactory(); AmbiguousDescriptorDiagnosticFactory NONE_APPLICABLE = new AmbiguousDescriptorDiagnosticFactory();
DiagnosticFactory1<PsiElement, ValueParameterDescriptor> NO_VALUE_FOR_PARAMETER = DiagnosticFactory1.create(ERROR); DiagnosticFactory1<JetElement, ValueParameterDescriptor> NO_VALUE_FOR_PARAMETER = DiagnosticFactory1.create(ERROR, VALUE_ARGUMENTS);
DiagnosticFactory1<JetReferenceExpression, JetType> MISSING_RECEIVER = DiagnosticFactory1.create(ERROR); DiagnosticFactory1<JetReferenceExpression, JetType> MISSING_RECEIVER = DiagnosticFactory1.create(ERROR);
SimpleDiagnosticFactory<JetReferenceExpression> NO_RECEIVER_ADMITTED = SimpleDiagnosticFactory.create(ERROR); SimpleDiagnosticFactory<JetReferenceExpression> NO_RECEIVER_ADMITTED = SimpleDiagnosticFactory.create(ERROR);
@@ -322,4 +322,19 @@ public class PositioningStrategies {
return super.mark(element); return super.mark(element);
} }
}; };
public static PositioningStrategy<JetElement> VALUE_ARGUMENTS = new PositioningStrategy<JetElement>() {
@NotNull
@Override
public List<TextRange> mark(@NotNull JetElement element) {
if (element instanceof JetValueArgumentList) {
PsiElement rightParenthesis = ((JetValueArgumentList) element).getRightParenthesis();
if (rightParenthesis != null) {
return markElement(rightParenthesis);
}
}
return super.mark(element);
}
};
} }
@@ -17,8 +17,11 @@
package org.jetbrains.jet.lang.psi; package org.jetbrains.jet.lang.psi;
import com.intellij.lang.ASTNode; import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.JetNodeTypes; import org.jetbrains.jet.JetNodeTypes;
import org.jetbrains.jet.lexer.JetTokens;
import java.util.List; import java.util.List;
@@ -43,4 +46,10 @@ public class JetValueArgumentList extends JetElementImpl {
public List<JetValueArgument> getArguments() { public List<JetValueArgument> getArguments() {
return findChildrenByType(JetNodeTypes.VALUE_ARGUMENT); return findChildrenByType(JetNodeTypes.VALUE_ARGUMENT);
} }
@Nullable
public PsiElement getRightParenthesis() {
return findChildByType(JetTokens.RPAR);
}
} }
@@ -133,7 +133,7 @@ public class ResolutionTask<D extends CallableDescriptor, F extends D> extends R
@Override @Override
public void noValueForParameter(@NotNull BindingTrace trace, @NotNull ValueParameterDescriptor valueParameter) { public void noValueForParameter(@NotNull BindingTrace trace, @NotNull ValueParameterDescriptor valueParameter) {
PsiElement reportOn; JetElement reportOn;
JetValueArgumentList valueArgumentList = call.getValueArgumentList(); JetValueArgumentList valueArgumentList = call.getValueArgumentList();
if (valueArgumentList != null) { if (valueArgumentList != null) {
reportOn = valueArgumentList; reportOn = valueArgumentList;
@@ -22,7 +22,7 @@ fun fooT2<T>() : (t : T) -> T {
fun main(args : Array<String>) { fun main(args : Array<String>) {
args.foo()() args.foo()()
args.foo1()<!NO_VALUE_FOR_PARAMETER!>()<!> args.foo1()(<!NO_VALUE_FOR_PARAMETER!>)<!>
<!UNRESOLVED_REFERENCE!>a<!>.foo1()() <!UNRESOLVED_REFERENCE!>a<!>.foo1()()
<!UNRESOLVED_REFERENCE!>a<!>.foo1()(<!UNRESOLVED_REFERENCE!>a<!>) <!UNRESOLVED_REFERENCE!>a<!>.foo1()(<!UNRESOLVED_REFERENCE!>a<!>)
@@ -71,7 +71,7 @@ fun main1() {
} }
fun test() { fun test() {
{(x : Int) -> 1}<!NO_VALUE_FOR_PARAMETER!>()<!>; {(x : Int) -> 1}(<!NO_VALUE_FOR_PARAMETER!>)<!>;
<!MISSING_RECEIVER!>{Int.() -> 1}<!>() <!MISSING_RECEIVER!>{Int.() -> 1}<!>()
<!TYPE_MISMATCH!>"sd"<!>.{Int.() -> 1}() <!TYPE_MISMATCH!>"sd"<!>.{Int.() -> 1}()
val i : Int? = null val i : Int? = null
@@ -14,10 +14,10 @@ fun test() {
foo(1, "", <!TOO_MANY_ARGUMENTS!>""<!>) foo(1, "", <!TOO_MANY_ARGUMENTS!>""<!>)
bar(z = "") bar(z = "")
bar<!NO_VALUE_FOR_PARAMETER!>()<!> bar(<!NO_VALUE_FOR_PARAMETER!>)<!>
bar<!NO_VALUE_FOR_PARAMETER!>("")<!> bar(""<!NO_VALUE_FOR_PARAMETER!>)<!>
bar(1, 1, "") bar(1, 1, "")
bar(1, 1, "") bar(1, 1, "")
bar(1, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>z<!> = "") bar(1, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>z<!> = "")
bar<!NO_VALUE_FOR_PARAMETER!>(1, <!NAMED_PARAMETER_NOT_FOUND, MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>zz<!> = "", <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!><!UNRESOLVED_REFERENCE!>zz<!>.foo<!>)<!> bar(1, <!NAMED_PARAMETER_NOT_FOUND, MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>zz<!> = "", <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!><!UNRESOLVED_REFERENCE!>zz<!>.foo<!><!NO_VALUE_FOR_PARAMETER!>)<!>
} }
@@ -16,6 +16,6 @@ class C : T {
super.foo() // OK super.foo() // OK
<!SUPER_IS_NOT_AN_EXPRESSION!>super<!>.bar() // Error <!SUPER_IS_NOT_AN_EXPRESSION!>super<!>.bar() // Error
super.buzz() // OK, resolved to a member super.buzz() // OK, resolved to a member
super.buzz1<!NO_VALUE_FOR_PARAMETER!>()<!> // Resolved to a member, but error: no parameter passed where required super.buzz1(<!NO_VALUE_FOR_PARAMETER!>)<!> // Resolved to a member, but error: no parameter passed where required
} }
} }
@@ -6,13 +6,13 @@ fun <T : Any> T?.sure() : T = this!!
fun testArrays(val ci: List<Int?>, val cii: List<Int?>?) { fun testArrays(val ci: List<Int?>, val cii: List<Int?>?) {
val c1: Array<Int?> = cii.sure().toArray(<!FUNCTION_CALL_EXPECTED!><!NO_VALUE_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>Array<!><Int?><!>) val c1: Array<Int?> = cii.sure().toArray(<!FUNCTION_CALL_EXPECTED!><!NO_VALUE_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>Array<!><Int?><!>)
val c2: Array<Int?> = ci.toArray(Array<Int?><!NO_VALUE_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>()<!>) val c2: Array<Int?> = ci.toArray(Array<Int?>(<!NO_VALUE_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>)<!>)
val c3 = Array<Int?><!NO_VALUE_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>()<!> val c3 = Array<Int?>(<!NO_VALUE_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>)<!>
val c4 = ci.toArray<Int?>(Array<Int?><!NO_VALUE_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>()<!>) val c4 = ci.toArray<Int?>(Array<Int?>(<!NO_VALUE_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>)<!>)
val c5 = ci.toArray(Array<Int?><!NO_VALUE_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>()<!>) val c5 = ci.toArray(Array<Int?>(<!NO_VALUE_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>)<!>)
c1 : Array<Int?> c1 : Array<Int?>
c2 : Array<Int?> c2 : Array<Int?>
@@ -2,7 +2,7 @@ fun <K, V> testMutableMapEntry(<warning>map</warning>: MutableMap<K, V>, <warnin
} }
fun foo() { fun foo() {
<error>testMutableMapEntry</error><error>(hashMap(1 to 'a'), 'b')</error> <error>testMutableMapEntry</error>(hashMap(1 to 'a'), 'b'<error>)</error>
} }
//extract from library //extract from library