tests for incomplete code exceptions

This commit is contained in:
Svetlana Isakova
2012-04-06 11:56:37 +04:00
parent 8d5965649b
commit 1372d70466
5 changed files with 31 additions and 11 deletions
@@ -75,8 +75,11 @@ public class JetArrayAccessExpression extends JetReferenceExpression {
}
public List<TextRange> getBracketRanges() {
TextRange lBracket = getIndicesNode().findChildByType(JetTokens.LBRACKET).getTextRange();
TextRange rBracket = getIndicesNode().findChildByType(JetTokens.RBRACKET).getTextRange();
return Lists.newArrayList(lBracket, rBracket);
PsiElement lBracket = getIndicesNode().findChildByType(JetTokens.LBRACKET);
PsiElement rBracket = getIndicesNode().findChildByType(JetTokens.RBRACKET);
if (lBracket == null || rBracket == null) {
return Collections.emptyList();
}
return Lists.newArrayList(lBracket.getTextRange(), rBracket.getTextRange());
}
}
@@ -1084,14 +1084,10 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
arrayAccessExpression,
isGet ? "get" : "set");
if (!functionResults.isSuccess()) {
traceForResolveResult.report(isGet
? NO_GET_METHOD.on(arrayAccessExpression)
: NO_SET_METHOD.on(arrayAccessExpression));
traceForResolveResult.report(isGet ? NO_GET_METHOD.on(arrayAccessExpression) : NO_SET_METHOD.on(arrayAccessExpression));
return null;
}
traceForResolveResult.record(isGet
? INDEXED_LVALUE_GET
: INDEXED_LVALUE_SET, arrayAccessExpression, functionResults.getResultingCall());
traceForResolveResult.record(isGet ? INDEXED_LVALUE_GET : INDEXED_LVALUE_SET, arrayAccessExpression, functionResults.getResultingCall());
return functionResults.getResultingDescriptor().getReturnType();
}
}
@@ -0,0 +1,9 @@
package b
fun main(args : Array<String>) {
var ints : Array<Int?> = arrayOfNulls<Int>(31)
ints[0] = 4; ints[11] = 5; ints[2] =7
for(i in 0..ints.size)
ints[i<!SYNTAX!><!>
}
@@ -0,0 +1,8 @@
package b
fun foo() {
for (i in <!UNRESOLVED_REFERENCE!>collection<!>) {
<!UNUSED_FUNCTION_LITERAL!>{
break
}<!>
}<!SYNTAX!><!>
@@ -72,11 +72,15 @@ class JetArrayAccessReference extends JetPsiReference implements MultiRangeRefer
BindingContext bindingContext = WholeProjectAnalyzerFacade.analyzeProjectWithCacheOnAFile((JetFile) getElement().getContainingFile())
.getBindingContext();
ResolvedCall<FunctionDescriptor> getFunction = bindingContext.get(INDEXED_LVALUE_GET, expression);
PsiElement getFunctionElement = bindingContext.get(DESCRIPTOR_TO_DECLARATION, getFunction.getResultingDescriptor());
ResolvedCall<FunctionDescriptor> setFunction = bindingContext.get(INDEXED_LVALUE_SET, expression);
if (getFunction == null || setFunction == null) {
return new ResolveResult[0];
}
PsiElement getFunctionElement = bindingContext.get(DESCRIPTOR_TO_DECLARATION, getFunction.getResultingDescriptor());
assert getFunctionElement != null;
PsiElement setFunctionElement = bindingContext.get(DESCRIPTOR_TO_DECLARATION, setFunction.getResultingDescriptor());
assert setFunctionElement != null;
return new ResolveResult[] {new PsiElementResolveResult(getFunctionElement, true), new PsiElementResolveResult(setFunctionElement, true)};
// return super.doMultiResolve();
}
@Override