Tests fixed, and error messages a little
This commit is contained in:
@@ -12,6 +12,7 @@ import org.jetbrains.jet.lang.psi.JetLabelQualifiedExpression;
|
||||
import org.jetbrains.jet.lang.psi.ValueArgument;
|
||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||
import org.jetbrains.jet.lang.types.CallMaker;
|
||||
import org.jetbrains.jet.resolve.DescriptorRenderer;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -88,12 +89,12 @@ import static org.jetbrains.jet.lang.resolve.BindingContext.REFERENCE_TARGET;
|
||||
usedParameters.add(valueParameterDescriptor);
|
||||
}
|
||||
else {
|
||||
temporaryTrace.getErrorHandler().genericError(valueArgument.asElement().getNode(), "Too many arguments");
|
||||
temporaryTrace.getErrorHandler().genericError(valueArgument.asElement().getNode(), getTooManyArgumentsMessage(candidate));
|
||||
error = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
temporaryTrace.getErrorHandler().genericError(valueArgument.asElement().getNode(), "Too many arguments");
|
||||
temporaryTrace.getErrorHandler().genericError(valueArgument.asElement().getNode(), getTooManyArgumentsMessage(candidate));
|
||||
error = true;
|
||||
}
|
||||
}
|
||||
@@ -105,7 +106,7 @@ import static org.jetbrains.jet.lang.resolve.BindingContext.REFERENCE_TARGET;
|
||||
JetExpression possiblyLabeledFunctionLiteral = functionLiteralArguments.get(0);
|
||||
|
||||
if (valueParameters.isEmpty()) {
|
||||
temporaryTrace.getErrorHandler().genericError(possiblyLabeledFunctionLiteral.getNode(), "Too many arguments");
|
||||
temporaryTrace.getErrorHandler().genericError(possiblyLabeledFunctionLiteral.getNode(), getTooManyArgumentsMessage(candidate));
|
||||
error = true;
|
||||
} else {
|
||||
JetFunctionLiteralExpression functionLiteral;
|
||||
@@ -124,7 +125,7 @@ import static org.jetbrains.jet.lang.resolve.BindingContext.REFERENCE_TARGET;
|
||||
}
|
||||
else {
|
||||
if (!usedParameters.add(parameterDescriptor)) {
|
||||
temporaryTrace.getErrorHandler().genericError(possiblyLabeledFunctionLiteral.getNode(), "Too many arguments");
|
||||
temporaryTrace.getErrorHandler().genericError(possiblyLabeledFunctionLiteral.getNode(), getTooManyArgumentsMessage(candidate));
|
||||
error = true;
|
||||
}
|
||||
else {
|
||||
@@ -151,4 +152,8 @@ import static org.jetbrains.jet.lang.resolve.BindingContext.REFERENCE_TARGET;
|
||||
}
|
||||
return error;
|
||||
}
|
||||
|
||||
private static <Descriptor extends CallableDescriptor> String getTooManyArgumentsMessage(Descriptor candidate) {
|
||||
return "Too many arguments for " + DescriptorRenderer.TEXT.render(candidate);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1857,7 +1857,11 @@ public class JetTypeInferrer {
|
||||
else {
|
||||
String errorMessage = "For-loop range must have an iterator() method";
|
||||
if (iteratorResolutionResult.isAmbiguity()) {
|
||||
errorMessage = "Method 'iterator()' is ambiguous for this expression: " + iteratorResolutionResult.getDescriptors();
|
||||
StringBuffer stringBuffer = new StringBuffer("Method 'iterator()' is ambiguous for this expression: ");
|
||||
for (FunctionDescriptor functionDescriptor : iteratorResolutionResult.getDescriptors()) {
|
||||
stringBuffer.append(DescriptorRenderer.TEXT.render(functionDescriptor)).append(" ");
|
||||
}
|
||||
errorMessage = "Method 'iterator()' is ambiguous for this expression: " + stringBuffer;
|
||||
}
|
||||
context.trace.getErrorHandler().genericError(reportErrorsOn, errorMessage);
|
||||
}
|
||||
|
||||
@@ -18,8 +18,8 @@ class Inv<T>() {
|
||||
fun testInOut() {
|
||||
In<String>().`In.f:T->Unit`f("1");
|
||||
(return : In<in String>).`In.f:T->Unit`f("1");
|
||||
(return : In<out String>).`!`f("1")
|
||||
(return : In<*>).`!`f("1");
|
||||
(return : In<out String>).`In.f:Int->Int`f("1")
|
||||
(return : In<*>).`In.f:Int->Int`f("1");
|
||||
|
||||
In<String>().`In.f:Int->Int`f(1);
|
||||
(return : In<in String>).`In.f:Int->Int`f(1);
|
||||
|
||||
@@ -62,15 +62,15 @@ fun <T> tt(t : T) : T {
|
||||
val x : List<Int> = 0
|
||||
x`java::java.util.List.get()`[1]
|
||||
val foo = `Bar()`Bar()
|
||||
foo`!`[null, 1]
|
||||
foo`!!`[null, 1]
|
||||
foo`get2`[1, 1]
|
||||
foo`get1`[1]
|
||||
foo`set1`[1] = ""
|
||||
foo`!`[1, 2] = ""
|
||||
foo`set1`[1, 2] = ""
|
||||
x`java::java.util.List.set()`[1] = null
|
||||
(x`java::java.util.List.set()`[1]) = null
|
||||
x`!`[null] = null
|
||||
(x`!`[null, 2]) = null
|
||||
x`java::java.util.List.set()`[null] = null
|
||||
(x`java::java.util.List.set()`[null, 2]) = null
|
||||
(`not`!foo)[1]`:std::Char`
|
||||
val y = Bar()
|
||||
y`inc`++
|
||||
|
||||
@@ -26,6 +26,8 @@ import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import static junit.framework.Assert.*;
|
||||
import static org.jetbrains.jet.lang.resolve.BindingContext.AMBIGUOUS_REFERENCE_TARGET;
|
||||
import static org.jetbrains.jet.lang.resolve.BindingContext.REFERENCE_TARGET;
|
||||
|
||||
/**
|
||||
* @author abreslav
|
||||
@@ -124,16 +126,24 @@ public class ExpectedResolveData {
|
||||
assertTrue(
|
||||
"Must have been unresolved: " +
|
||||
renderReferenceInContext(referenceExpression) +
|
||||
" but was resolved to " + DescriptorRenderer.TEXT.render(bindingContext.get(BindingContext.REFERENCE_TARGET, referenceExpression)),
|
||||
" but was resolved to " + DescriptorRenderer.TEXT.render(bindingContext.get(REFERENCE_TARGET, referenceExpression)),
|
||||
unresolvedReferences.contains(referenceExpression));
|
||||
continue;
|
||||
}
|
||||
if ("!!".equals(name)) {
|
||||
assertTrue(
|
||||
"Must have been resolved to multiple descriptors: " +
|
||||
renderReferenceInContext(referenceExpression) +
|
||||
" but was resolved to " + DescriptorRenderer.TEXT.render(bindingContext.get(REFERENCE_TARGET, referenceExpression)),
|
||||
bindingContext.get(AMBIGUOUS_REFERENCE_TARGET, referenceExpression) != null);
|
||||
continue;
|
||||
}
|
||||
else if ("!null".equals(name)) {
|
||||
assertTrue(
|
||||
"Must have been resolved to null: " +
|
||||
renderReferenceInContext(referenceExpression) +
|
||||
" but was resolved to " + DescriptorRenderer.TEXT.render(bindingContext.get(BindingContext.REFERENCE_TARGET, referenceExpression)),
|
||||
bindingContext.get(BindingContext.REFERENCE_TARGET, referenceExpression) == null
|
||||
" but was resolved to " + DescriptorRenderer.TEXT.render(bindingContext.get(REFERENCE_TARGET, referenceExpression)),
|
||||
bindingContext.get(REFERENCE_TARGET, referenceExpression) == null
|
||||
);
|
||||
continue;
|
||||
}
|
||||
@@ -141,8 +151,8 @@ public class ExpectedResolveData {
|
||||
assertTrue(
|
||||
"Must have been resolved to error: " +
|
||||
renderReferenceInContext(referenceExpression) +
|
||||
" but was resolved to " + DescriptorRenderer.TEXT.render(bindingContext.get(BindingContext.REFERENCE_TARGET, referenceExpression)),
|
||||
ErrorUtils.isError(bindingContext.get(BindingContext.REFERENCE_TARGET, referenceExpression))
|
||||
" but was resolved to " + DescriptorRenderer.TEXT.render(bindingContext.get(REFERENCE_TARGET, referenceExpression)),
|
||||
ErrorUtils.isError(bindingContext.get(REFERENCE_TARGET, referenceExpression))
|
||||
);
|
||||
continue;
|
||||
}
|
||||
@@ -160,7 +170,7 @@ public class ExpectedResolveData {
|
||||
DeclarationDescriptor expectedDescriptor = nameToDescriptor.get(name);
|
||||
JetTypeReference typeReference = getAncestorOfType(JetTypeReference.class, element);
|
||||
if (expectedDescriptor != null) {
|
||||
DeclarationDescriptor actual = bindingContext.get(BindingContext.REFERENCE_TARGET, reference);
|
||||
DeclarationDescriptor actual = bindingContext.get(REFERENCE_TARGET, reference);
|
||||
assertSame("Expected: " + name, expectedDescriptor.getOriginal(), actual == null ? null : actual.getOriginal());
|
||||
continue;
|
||||
}
|
||||
@@ -198,7 +208,7 @@ public class ExpectedResolveData {
|
||||
}
|
||||
|
||||
|
||||
DeclarationDescriptor actualDescriptor = bindingContext.get(BindingContext.REFERENCE_TARGET, reference);
|
||||
DeclarationDescriptor actualDescriptor = bindingContext.get(REFERENCE_TARGET, reference);
|
||||
if (actualDescriptor instanceof VariableAsFunctionDescriptor) {
|
||||
VariableAsFunctionDescriptor descriptor = (VariableAsFunctionDescriptor) actualDescriptor;
|
||||
actualDescriptor = descriptor.getVariableDescriptor();
|
||||
|
||||
Reference in New Issue
Block a user