Tests fixed, and error messages a little

This commit is contained in:
Andrey Breslav
2011-09-05 19:35:31 +04:00
parent 71a711a74d
commit b632fc31d9
5 changed files with 37 additions and 18 deletions
@@ -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);
}
+2 -2
View File
@@ -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();