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.psi.ValueArgument;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||||
import org.jetbrains.jet.lang.types.CallMaker;
|
import org.jetbrains.jet.lang.types.CallMaker;
|
||||||
|
import org.jetbrains.jet.resolve.DescriptorRenderer;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -88,12 +89,12 @@ import static org.jetbrains.jet.lang.resolve.BindingContext.REFERENCE_TARGET;
|
|||||||
usedParameters.add(valueParameterDescriptor);
|
usedParameters.add(valueParameterDescriptor);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
temporaryTrace.getErrorHandler().genericError(valueArgument.asElement().getNode(), "Too many arguments");
|
temporaryTrace.getErrorHandler().genericError(valueArgument.asElement().getNode(), getTooManyArgumentsMessage(candidate));
|
||||||
error = true;
|
error = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
temporaryTrace.getErrorHandler().genericError(valueArgument.asElement().getNode(), "Too many arguments");
|
temporaryTrace.getErrorHandler().genericError(valueArgument.asElement().getNode(), getTooManyArgumentsMessage(candidate));
|
||||||
error = true;
|
error = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -105,7 +106,7 @@ import static org.jetbrains.jet.lang.resolve.BindingContext.REFERENCE_TARGET;
|
|||||||
JetExpression possiblyLabeledFunctionLiteral = functionLiteralArguments.get(0);
|
JetExpression possiblyLabeledFunctionLiteral = functionLiteralArguments.get(0);
|
||||||
|
|
||||||
if (valueParameters.isEmpty()) {
|
if (valueParameters.isEmpty()) {
|
||||||
temporaryTrace.getErrorHandler().genericError(possiblyLabeledFunctionLiteral.getNode(), "Too many arguments");
|
temporaryTrace.getErrorHandler().genericError(possiblyLabeledFunctionLiteral.getNode(), getTooManyArgumentsMessage(candidate));
|
||||||
error = true;
|
error = true;
|
||||||
} else {
|
} else {
|
||||||
JetFunctionLiteralExpression functionLiteral;
|
JetFunctionLiteralExpression functionLiteral;
|
||||||
@@ -124,7 +125,7 @@ import static org.jetbrains.jet.lang.resolve.BindingContext.REFERENCE_TARGET;
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!usedParameters.add(parameterDescriptor)) {
|
if (!usedParameters.add(parameterDescriptor)) {
|
||||||
temporaryTrace.getErrorHandler().genericError(possiblyLabeledFunctionLiteral.getNode(), "Too many arguments");
|
temporaryTrace.getErrorHandler().genericError(possiblyLabeledFunctionLiteral.getNode(), getTooManyArgumentsMessage(candidate));
|
||||||
error = true;
|
error = true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -151,4 +152,8 @@ import static org.jetbrains.jet.lang.resolve.BindingContext.REFERENCE_TARGET;
|
|||||||
}
|
}
|
||||||
return error;
|
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 {
|
else {
|
||||||
String errorMessage = "For-loop range must have an iterator() method";
|
String errorMessage = "For-loop range must have an iterator() method";
|
||||||
if (iteratorResolutionResult.isAmbiguity()) {
|
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);
|
context.trace.getErrorHandler().genericError(reportErrorsOn, errorMessage);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ class Inv<T>() {
|
|||||||
fun testInOut() {
|
fun testInOut() {
|
||||||
In<String>().`In.f:T->Unit`f("1");
|
In<String>().`In.f:T->Unit`f("1");
|
||||||
(return : In<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<out String>).`In.f:Int->Int`f("1")
|
||||||
(return : In<*>).`!`f("1");
|
(return : In<*>).`In.f:Int->Int`f("1");
|
||||||
|
|
||||||
In<String>().`In.f:Int->Int`f(1);
|
In<String>().`In.f:Int->Int`f(1);
|
||||||
(return : In<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
|
val x : List<Int> = 0
|
||||||
x`java::java.util.List.get()`[1]
|
x`java::java.util.List.get()`[1]
|
||||||
val foo = `Bar()`Bar()
|
val foo = `Bar()`Bar()
|
||||||
foo`!`[null, 1]
|
foo`!!`[null, 1]
|
||||||
foo`get2`[1, 1]
|
foo`get2`[1, 1]
|
||||||
foo`get1`[1]
|
foo`get1`[1]
|
||||||
foo`set1`[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`java::java.util.List.set()`[1]) = null
|
(x`java::java.util.List.set()`[1]) = null
|
||||||
x`!`[null] = null
|
x`java::java.util.List.set()`[null] = null
|
||||||
(x`!`[null, 2]) = null
|
(x`java::java.util.List.set()`[null, 2]) = null
|
||||||
(`not`!foo)[1]`:std::Char`
|
(`not`!foo)[1]`:std::Char`
|
||||||
val y = Bar()
|
val y = Bar()
|
||||||
y`inc`++
|
y`inc`++
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ import java.util.regex.Matcher;
|
|||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import static junit.framework.Assert.*;
|
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
|
* @author abreslav
|
||||||
@@ -124,16 +126,24 @@ public class ExpectedResolveData {
|
|||||||
assertTrue(
|
assertTrue(
|
||||||
"Must have been unresolved: " +
|
"Must have been unresolved: " +
|
||||||
renderReferenceInContext(referenceExpression) +
|
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));
|
unresolvedReferences.contains(referenceExpression));
|
||||||
continue;
|
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)) {
|
else if ("!null".equals(name)) {
|
||||||
assertTrue(
|
assertTrue(
|
||||||
"Must have been resolved to null: " +
|
"Must have been resolved to null: " +
|
||||||
renderReferenceInContext(referenceExpression) +
|
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)),
|
||||||
bindingContext.get(BindingContext.REFERENCE_TARGET, referenceExpression) == null
|
bindingContext.get(REFERENCE_TARGET, referenceExpression) == null
|
||||||
);
|
);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -141,8 +151,8 @@ public class ExpectedResolveData {
|
|||||||
assertTrue(
|
assertTrue(
|
||||||
"Must have been resolved to error: " +
|
"Must have been resolved to error: " +
|
||||||
renderReferenceInContext(referenceExpression) +
|
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)),
|
||||||
ErrorUtils.isError(bindingContext.get(BindingContext.REFERENCE_TARGET, referenceExpression))
|
ErrorUtils.isError(bindingContext.get(REFERENCE_TARGET, referenceExpression))
|
||||||
);
|
);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -160,7 +170,7 @@ public class ExpectedResolveData {
|
|||||||
DeclarationDescriptor expectedDescriptor = nameToDescriptor.get(name);
|
DeclarationDescriptor expectedDescriptor = nameToDescriptor.get(name);
|
||||||
JetTypeReference typeReference = getAncestorOfType(JetTypeReference.class, element);
|
JetTypeReference typeReference = getAncestorOfType(JetTypeReference.class, element);
|
||||||
if (expectedDescriptor != null) {
|
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());
|
assertSame("Expected: " + name, expectedDescriptor.getOriginal(), actual == null ? null : actual.getOriginal());
|
||||||
continue;
|
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) {
|
if (actualDescriptor instanceof VariableAsFunctionDescriptor) {
|
||||||
VariableAsFunctionDescriptor descriptor = (VariableAsFunctionDescriptor) actualDescriptor;
|
VariableAsFunctionDescriptor descriptor = (VariableAsFunctionDescriptor) actualDescriptor;
|
||||||
actualDescriptor = descriptor.getVariableDescriptor();
|
actualDescriptor = descriptor.getVariableDescriptor();
|
||||||
|
|||||||
Reference in New Issue
Block a user