diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 5666f2c8e28..8275e6b9dfa 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -9,7 +9,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.codegen.intrinsics.IntrinsicMethod; import org.jetbrains.jet.codegen.intrinsics.IntrinsicMethods; import org.jetbrains.jet.lang.descriptors.*; -import org.jetbrains.jet.lang.diagnostics.ErrorHandlerUtils; +import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContextUtils; @@ -237,11 +237,11 @@ public class ExpressionCodegen extends JetVisitor { DeclarationDescriptor hasNextDescriptor = bindingContext.get(BindingContext.LOOP_RANGE_HAS_NEXT, loopRange); if(iteratorDescriptor == null) - throw new IllegalStateException("No iterator() method " + ErrorHandlerUtils.atLocation(loopRange)); + throw new IllegalStateException("No iterator() method " + DiagnosticUtils.atLocation(loopRange)); if(nextDescriptor == null) - throw new IllegalStateException("No next() method " + ErrorHandlerUtils.atLocation(loopRange)); + throw new IllegalStateException("No next() method " + DiagnosticUtils.atLocation(loopRange)); if(hasNextDescriptor == null) - throw new IllegalStateException("No iterator() method " + ErrorHandlerUtils.atLocation(loopRange)); + throw new IllegalStateException("No iterator() method " + DiagnosticUtils.atLocation(loopRange)); final JetParameter loopParameter = expression.getLoopParameter(); final VariableDescriptor parameterDescriptor = bindingContext.get(BindingContext.VALUE_PARAMETER, loopParameter); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AbstractDiagnosticFactory.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AbstractDiagnosticFactory.java index 93deb0fd0f7..d6e4605feee 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AbstractDiagnosticFactory.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AbstractDiagnosticFactory.java @@ -1,25 +1,23 @@ package org.jetbrains.jet.lang.diagnostics; import com.intellij.openapi.util.TextRange; +import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; -import java.text.MessageFormat; - /** -* @author abreslav -*/ + * @author abreslav + */ public class AbstractDiagnosticFactory implements DiagnosticFactory { - protected final MessageFormat messageFormat; - protected final Severity severity; - - public AbstractDiagnosticFactory(Severity severity, String message) { - this.severity = severity; - this.messageFormat = new MessageFormat(message); + @NotNull + @Override + public TextRange getTextRange(@NotNull Diagnostic diagnostic) { + return ((DiagnosticWithTextRange) diagnostic).getTextRange(); } @NotNull @Override - public TextRange getMarkerPosition(@NotNull Diagnostic diagnostic) { - return ((DiagnosticWithTextRange) diagnostic).getTextRange(); + public PsiFile getPsiFile(@NotNull Diagnostic diagnostic) { + return ((DiagnosticWithTextRange) diagnostic).getPsiFile(); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory.java index ddf0e14d23e..98d7ced7aed 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactory.java @@ -1,6 +1,7 @@ package org.jetbrains.jet.lang.diagnostics; import com.intellij.openapi.util.TextRange; +import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; /** @@ -8,5 +9,8 @@ import org.jetbrains.annotations.NotNull; */ public interface DiagnosticFactory { @NotNull - TextRange getMarkerPosition(@NotNull Diagnostic diagnostic); + TextRange getTextRange(@NotNull Diagnostic diagnostic); + + @NotNull + PsiFile getPsiFile(@NotNull Diagnostic diagnostic); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactoryWithMessageFormat.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactoryWithMessageFormat.java new file mode 100644 index 00000000000..574117501a8 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactoryWithMessageFormat.java @@ -0,0 +1,16 @@ +package org.jetbrains.jet.lang.diagnostics; + +import java.text.MessageFormat; + +/** +* @author abreslav +*/ +public class DiagnosticFactoryWithMessageFormat extends DiagnosticFactoryWithSeverity { + protected final MessageFormat messageFormat; + + public DiagnosticFactoryWithMessageFormat(Severity severity, String message) { + super(severity); + this.messageFormat = new MessageFormat(message); + } + +} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactoryWithSeverity.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactoryWithSeverity.java new file mode 100644 index 00000000000..5ff19dea923 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticFactoryWithSeverity.java @@ -0,0 +1,13 @@ +package org.jetbrains.jet.lang.diagnostics; + +/** + * @author abreslav + */ +public class DiagnosticFactoryWithSeverity extends AbstractDiagnosticFactory { + protected final Severity severity; + + public DiagnosticFactoryWithSeverity(Severity severity) { + this.severity = severity; + } + +} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticHolder.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticHolder.java index 54b901f59dd..fbbbc1ea72f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticHolder.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticHolder.java @@ -1,5 +1,7 @@ package org.jetbrains.jet.lang.diagnostics; +import com.intellij.openapi.util.TextRange; +import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; /** @@ -15,7 +17,9 @@ public interface DiagnosticHolder { @Override public void report(@NotNull Diagnostic diagnostic) { if (diagnostic.getSeverity() == Severity.ERROR) { - throw new IllegalStateException(diagnostic.getMessage()); + PsiFile psiFile = diagnostic.getFactory().getPsiFile(diagnostic); + TextRange textRange = diagnostic.getFactory().getTextRange(diagnostic); + throw new IllegalStateException(diagnostic.getMessage() + DiagnosticUtils.atLocation(psiFile, textRange)); } } }; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticUtils.java new file mode 100644 index 00000000000..07e72ee6000 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticUtils.java @@ -0,0 +1,61 @@ +package org.jetbrains.jet.lang.diagnostics; + +import com.intellij.lang.ASTNode; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiDocumentManager; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * @author abreslav + */ +public class DiagnosticUtils { + public static String atLocation(@NotNull PsiElement element) { + return atLocation(element.getNode()); + } + + public static String atLocation(@NotNull ASTNode node) { + int startOffset = node.getStartOffset(); + PsiElement element = getClosestPsiElement(node); + if (element != null) { + return atLocation(element.getContainingFile(), element.getTextRange()); + } + return "' at offset " + startOffset + " (line and file unknown)"; + } + + @Nullable + public static PsiElement getClosestPsiElement(@NotNull ASTNode node) { + while (node != null && node.getPsi() == null) { + node = node.getTreeParent(); + } + return node == null ? null : node.getPsi(); + } + + @NotNull + public static PsiFile getContainingFile(@NotNull ASTNode node) { + PsiElement closestPsiElement = getClosestPsiElement(node); + assert closestPsiElement != null : "This node is not contained by a file"; + return closestPsiElement.getContainingFile(); + } + + public static String atLocation(@NotNull PsiFile file, @NotNull TextRange textRange) { + Document document = PsiDocumentManager.getInstance(file.getProject()).getDocument(file); + int offset = textRange.getStartOffset(); + VirtualFile virtualFile = file.getVirtualFile(); + String pathSuffix = virtualFile == null ? "" : " in " + virtualFile.getPath(); + if (document != null) { + int lineNumber = document.getLineNumber(offset); + int lineStartOffset = document.getLineStartOffset(lineNumber); + int column = offset - lineStartOffset; + + return "' at line " + (lineNumber + 1) + ":" + column + pathSuffix; + } + else { + return "' at offset " + offset + " (line unknown)" + pathSuffix; + } + } +} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithPsiElement.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithPsiElement.java index 7cbc96161af..3c046115de9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithPsiElement.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithPsiElement.java @@ -1,6 +1,5 @@ package org.jetbrains.jet.lang.diagnostics; -import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; @@ -11,7 +10,7 @@ public class DiagnosticWithPsiElement extends GenericDiagn private final T psiElement; public DiagnosticWithPsiElement(DiagnosticFactory factory, Severity severity, String message, T psiElement) { - super(factory, severity, message, psiElement.getTextRange()); + super(factory, severity, message, psiElement.getContainingFile(), psiElement.getTextRange()); this.psiElement = psiElement; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithTextRange.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithTextRange.java index 8bce93377ef..dba4b6f85ea 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithTextRange.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/DiagnosticWithTextRange.java @@ -1,6 +1,7 @@ package org.jetbrains.jet.lang.diagnostics; import com.intellij.openapi.util.TextRange; +import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; /** @@ -10,4 +11,7 @@ public interface DiagnosticWithTextRange extends Diagnostic { @NotNull TextRange getTextRange(); + @NotNull + PsiFile getPsiFile(); + } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/ErrorHandlerUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/ErrorHandlerUtils.java deleted file mode 100644 index b4afac05f37..00000000000 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/ErrorHandlerUtils.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.jetbrains.jet.lang.diagnostics; - -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; - -/** - * @author abreslav - */ -public class ErrorHandlerUtils { - public static String atLocation(@NotNull PsiElement element) { - return atLocation(element.getNode()); - } - - public static String atLocation(@NotNull ASTNode node) { - while (node.getPsi() == null) { - node = node.getTreeParent(); - } - PsiElement element = node.getPsi(); - Document document = PsiDocumentManager.getInstance(element.getProject()).getDocument(element.getContainingFile()); - int offset = element.getTextRange().getStartOffset(); - if (document != null) { - int lineNumber = document.getLineNumber(offset); - int lineStartOffset = document.getLineStartOffset(lineNumber); - int column = offset - lineStartOffset; - - return "' at line " + (lineNumber+1) + ":" + column; - } - else { - return "' at offset " + offset + " (line unknown)"; - } - } -} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/GenericDiagnostic.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/GenericDiagnostic.java index 914a33ef4dd..db13595aeb8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/GenericDiagnostic.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/GenericDiagnostic.java @@ -1,6 +1,7 @@ package org.jetbrains.jet.lang.diagnostics; import com.intellij.openapi.util.TextRange; +import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; /** @@ -12,12 +13,14 @@ public class GenericDiagnostic implements DiagnosticWithTextRange { private final String message; private final DiagnosticFactory factory; private final Severity severity; + private final PsiFile psiFile; - public GenericDiagnostic(DiagnosticFactory factory, Severity severity, String message, TextRange textRange) { + public GenericDiagnostic(DiagnosticFactory factory, Severity severity, String message, @NotNull PsiFile psiFile, @NotNull TextRange textRange) { this.factory = factory; this.textRange = textRange; this.severity = severity; this.message = message; + this.psiFile = psiFile; } @NotNull @@ -31,6 +34,12 @@ public class GenericDiagnostic implements DiagnosticWithTextRange { return textRange; } + @NotNull + @Override + public PsiFile getPsiFile() { + return psiFile; + } + @NotNull @Override public String getMessage() { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/ParameterizedDiagnosticFactory1.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/ParameterizedDiagnosticFactory1.java index 748d4fc5b24..311829a67d0 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/ParameterizedDiagnosticFactory1.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/ParameterizedDiagnosticFactory1.java @@ -3,12 +3,13 @@ package org.jetbrains.jet.lang.diagnostics; import com.intellij.lang.ASTNode; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; /** * @author abreslav */ -public class ParameterizedDiagnosticFactory1 extends AbstractDiagnosticFactory { +public class ParameterizedDiagnosticFactory1 extends DiagnosticFactoryWithMessageFormat { public static ParameterizedDiagnosticFactory1 create(Severity severity, String messageStub) { return new ParameterizedDiagnosticFactory1(severity, messageStub); } @@ -26,13 +27,13 @@ public class ParameterizedDiagnosticFactory1 extends AbstractDiagnosticFactor } @NotNull - public Diagnostic on(@NotNull TextRange range, @NotNull T argument) { - return new GenericDiagnostic(this, severity, makeMessage(argument), range); + public Diagnostic on(@NotNull PsiFile psiFile, @NotNull TextRange range, @NotNull T argument) { + return new GenericDiagnostic(this, severity, makeMessage(argument), psiFile, range); } @NotNull public Diagnostic on(@NotNull ASTNode node, @NotNull T argument) { - return on(node.getTextRange(), argument); + return on(DiagnosticUtils.getContainingFile(node), node.getTextRange(), argument); } @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/ParameterizedDiagnosticFactory2.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/ParameterizedDiagnosticFactory2.java index d62a90d6a49..cae1d16b420 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/ParameterizedDiagnosticFactory2.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/ParameterizedDiagnosticFactory2.java @@ -2,6 +2,7 @@ package org.jetbrains.jet.lang.diagnostics; import com.intellij.lang.ASTNode; import com.intellij.openapi.util.TextRange; +import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; /** @@ -17,13 +18,13 @@ public class ParameterizedDiagnosticFactory2 extends PsiElementOnlyDiagnos } @NotNull - public Diagnostic on(@NotNull TextRange range, @NotNull A a, @NotNull B b) { - return new GenericDiagnostic(this, severity, makeMessage(a, b), range); + public Diagnostic on(@NotNull PsiFile psiFile, @NotNull TextRange range, @NotNull A a, @NotNull B b) { + return new GenericDiagnostic(this, severity, makeMessage(a, b), psiFile, range); } @NotNull public Diagnostic on(@NotNull ASTNode node, @NotNull A a, @NotNull B b) { - return on(node.getTextRange(), a, b); + return on(DiagnosticUtils.getContainingFile(node), node.getTextRange(), a, b); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/ParameterizedDiagnosticFactory3.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/ParameterizedDiagnosticFactory3.java index 6df20171802..dd80fb14dc5 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/ParameterizedDiagnosticFactory3.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/ParameterizedDiagnosticFactory3.java @@ -3,12 +3,13 @@ package org.jetbrains.jet.lang.diagnostics; import com.intellij.lang.ASTNode; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; /** * @author abreslav */ -public class ParameterizedDiagnosticFactory3 extends AbstractDiagnosticFactory { +public class ParameterizedDiagnosticFactory3 extends DiagnosticFactoryWithMessageFormat { public static ParameterizedDiagnosticFactory3 create(Severity severity, String messageStub) { return new ParameterizedDiagnosticFactory3(severity, messageStub); } @@ -34,13 +35,13 @@ public class ParameterizedDiagnosticFactory3 extends AbstractDiagnostic } @NotNull - public Diagnostic on(@NotNull TextRange range, @NotNull A a, @NotNull B b, @NotNull C c) { - return new GenericDiagnostic(this, severity, makeMessage(a, b, c), range); + public Diagnostic on(@NotNull PsiFile psiFile, @NotNull TextRange range, @NotNull A a, @NotNull B b, @NotNull C c) { + return new GenericDiagnostic(this, severity, makeMessage(a, b, c), psiFile, range); } @NotNull public Diagnostic on(@NotNull ASTNode node, @NotNull A a, @NotNull B b, @NotNull C c) { - return on(node.getTextRange(), a, b, c); + return on(DiagnosticUtils.getContainingFile(node), node.getTextRange(), a, b, c); } @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PsiElementOnlyDiagnosticFactory2.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PsiElementOnlyDiagnosticFactory2.java index 2e1cd9e90c5..15afd5f517b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PsiElementOnlyDiagnosticFactory2.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PsiElementOnlyDiagnosticFactory2.java @@ -6,7 +6,7 @@ import org.jetbrains.annotations.NotNull; /** * @author abreslav */ -public class PsiElementOnlyDiagnosticFactory2 extends AbstractDiagnosticFactory { +public class PsiElementOnlyDiagnosticFactory2 extends DiagnosticFactoryWithMessageFormat { public static PsiElementOnlyDiagnosticFactory2 create(Severity severity, String message) { return new PsiElementOnlyDiagnosticFactory2(severity, message); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/RedeclarationDiagnosticFactory.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/RedeclarationDiagnosticFactory.java index a4a790b62ed..b17bdbc43bf 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/RedeclarationDiagnosticFactory.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/RedeclarationDiagnosticFactory.java @@ -1,6 +1,7 @@ package org.jetbrains.jet.lang.diagnostics; import com.intellij.openapi.util.TextRange; +import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; @@ -19,7 +20,13 @@ public class RedeclarationDiagnosticFactory implements DiagnosticFactory { @NotNull @Override - public TextRange getMarkerPosition(@NotNull Diagnostic diagnostic) { + public TextRange getTextRange(@NotNull Diagnostic diagnostic) { + throw new UnsupportedOperationException(); // TODO + } + + @NotNull + @Override + public PsiFile getPsiFile(@NotNull Diagnostic diagnostic) { throw new UnsupportedOperationException(); // TODO } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/SimpleDiagnosticFactory.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/SimpleDiagnosticFactory.java index a1a37fb1e8c..e91b2349939 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/SimpleDiagnosticFactory.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/SimpleDiagnosticFactory.java @@ -3,43 +3,37 @@ package org.jetbrains.jet.lang.diagnostics; import com.intellij.lang.ASTNode; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; /** * @author abreslav */ -public class SimpleDiagnosticFactory implements DiagnosticFactory { +public class SimpleDiagnosticFactory extends DiagnosticFactoryWithSeverity { public static SimpleDiagnosticFactory create(Severity severity, String message) { return new SimpleDiagnosticFactory(severity, message); } protected final String message; - protected final Severity severity; public SimpleDiagnosticFactory(Severity severity, String message) { + super(severity); this.message = message; - this.severity = severity; } @NotNull - public Diagnostic on(@NotNull TextRange range) { - return new GenericDiagnostic(this, severity, message, range); + public Diagnostic on(@NotNull PsiFile psiFile, @NotNull TextRange range) { + return new GenericDiagnostic(this, severity, message, psiFile, range); } @NotNull public Diagnostic on(@NotNull ASTNode node) { - return on(node.getTextRange()); + return on(DiagnosticUtils.getContainingFile(node), node.getTextRange()); } @NotNull public Diagnostic on(@NotNull PsiElement element) { return new DiagnosticWithPsiElement(this, severity, message, element); } - - @NotNull - @Override - public TextRange getMarkerPosition(@NotNull Diagnostic diagnostic) { - return ((DiagnosticWithTextRange) diagnostic).getTextRange(); - } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/UnresolvedReferenceDiagnostic.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/UnresolvedReferenceDiagnostic.java index eb9ba46de5c..ebe70e62ed3 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/UnresolvedReferenceDiagnostic.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/UnresolvedReferenceDiagnostic.java @@ -1,5 +1,6 @@ package org.jetbrains.jet.lang.diagnostics; +import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.psi.JetReferenceExpression; import static org.jetbrains.jet.lang.diagnostics.Severity.ERROR; @@ -13,4 +14,9 @@ public class UnresolvedReferenceDiagnostic extends DiagnosticWithPsiElement