diff --git a/idea/src/org/jetbrains/jet/lang/ErrorHandler.java b/idea/src/org/jetbrains/jet/lang/ErrorHandler.java index 6bddbc45a4e..b14ce13cc5f 100644 --- a/idea/src/org/jetbrains/jet/lang/ErrorHandler.java +++ b/idea/src/org/jetbrains/jet/lang/ErrorHandler.java @@ -1,6 +1,9 @@ package org.jetbrains.jet.lang; import com.intellij.lang.ASTNode; +import com.intellij.openapi.editor.Document; +import com.intellij.psi.PsiDocumentManager; +import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.psi.JetExpression; @@ -16,7 +19,7 @@ public class ErrorHandler { @Override public void unresolvedReference(@NotNull JetReferenceExpression referenceExpression) { throw new IllegalStateException("Unresolved reference: " + referenceExpression.getText() + - " at offset " + referenceExpression.getTextRange().getStartOffset()); + atLocation(referenceExpression)); } @Override @@ -26,7 +29,7 @@ public class ErrorHandler { @Override public void typeMismatch(@NotNull JetExpression expression, @NotNull JetType expectedType, @NotNull JetType actualType) { - throw new IllegalStateException("Type mismatch at " + expression.getTextRange().getStartOffset() + ": inferred type is " + actualType + " but " + expectedType + " was expected"); + throw new IllegalStateException("Type mismatch " + atLocation(expression) + ": inferred type is " + actualType + " but " + expectedType + " was expected"); } @Override @@ -49,4 +52,14 @@ public class ErrorHandler { public void genericWarning(@NotNull ASTNode node, @NotNull String message) { } + + public static String atLocation(PsiElement element) { + Document document = PsiDocumentManager.getInstance(element.getProject()).getDocument(element.getContainingFile()); + int offset = element.getTextRange().getStartOffset(); + int lineNumber = document.getLineNumber(offset); + int lineStartOffset = document.getLineStartOffset(lineNumber); + int column = offset - lineStartOffset; + + return "' at line " + (lineNumber+1) + ":" + column; + } } diff --git a/idea/src/org/jetbrains/jet/lang/resolve/AnalyzingUtils.java b/idea/src/org/jetbrains/jet/lang/resolve/AnalyzingUtils.java index d8c850c488c..81ab818390d 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/AnalyzingUtils.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/AnalyzingUtils.java @@ -137,14 +137,8 @@ public class AnalyzingUtils { @Override public void visitErrorElement(PsiErrorElement element) { - Document document = PsiDocumentManager.getInstance(element.getProject()).getDocument(element.getContainingFile()); - int offset = element.getTextRange().getStartOffset(); - int lineNumber = document.getLineNumber(offset)+1; - int lineStartOffset = document.getLineStartOffset(lineNumber); - int column = offset - lineStartOffset; - - throw new IllegalArgumentException(element.getErrorDescription() + "; looking at " + element.getNode().getElementType() + " '" + element.getText() + "' at line " + lineNumber + ":" + column); + throw new IllegalArgumentException(element.getErrorDescription() + "; looking at " + element.getNode().getElementType() + " '" + element.getText() + ErrorHandler.atLocation(element)); } }); } -} \ No newline at end of file +}