diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetArrayAccessExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetArrayAccessExpression.java index a1f51082abd..25c9c4c41d5 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetArrayAccessExpression.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetArrayAccessExpression.java @@ -75,8 +75,11 @@ public class JetArrayAccessExpression extends JetReferenceExpression { } public List 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()); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java index ca4ce83dad5..cc14ac19b04 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java @@ -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(); } } diff --git a/compiler/testData/diagnostics/tests/incompleteCode/arrayBracketsRange.jet b/compiler/testData/diagnostics/tests/incompleteCode/arrayBracketsRange.jet new file mode 100644 index 00000000000..363bd2d7842 --- /dev/null +++ b/compiler/testData/diagnostics/tests/incompleteCode/arrayBracketsRange.jet @@ -0,0 +1,9 @@ +package b + +fun main(args : Array) { + var ints : Array = arrayOfNulls(31) + + ints[0] = 4; ints[11] = 5; ints[2] =7 + for(i in 0..ints.size) + ints[i +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/incompleteCode/pseudocodeTraverseNextInstructions.jet b/compiler/testData/diagnostics/tests/incompleteCode/pseudocodeTraverseNextInstructions.jet new file mode 100644 index 00000000000..52db12e29b4 --- /dev/null +++ b/compiler/testData/diagnostics/tests/incompleteCode/pseudocodeTraverseNextInstructions.jet @@ -0,0 +1,8 @@ +package b + +fun foo() { + for (i in collection) { + { + break + } +} \ No newline at end of file diff --git a/idea/src/org/jetbrains/jet/plugin/references/JetArrayAccessReference.java b/idea/src/org/jetbrains/jet/plugin/references/JetArrayAccessReference.java index c529ba7bf4d..f74ce837a3c 100644 --- a/idea/src/org/jetbrains/jet/plugin/references/JetArrayAccessReference.java +++ b/idea/src/org/jetbrains/jet/plugin/references/JetArrayAccessReference.java @@ -72,11 +72,15 @@ class JetArrayAccessReference extends JetPsiReference implements MultiRangeRefer BindingContext bindingContext = WholeProjectAnalyzerFacade.analyzeProjectWithCacheOnAFile((JetFile) getElement().getContainingFile()) .getBindingContext(); ResolvedCall getFunction = bindingContext.get(INDEXED_LVALUE_GET, expression); - PsiElement getFunctionElement = bindingContext.get(DESCRIPTOR_TO_DECLARATION, getFunction.getResultingDescriptor()); ResolvedCall 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