diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AbstractDiagnostic.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AbstractDiagnostic.java index 22f5a8fbb94..ab26aa0d0ea 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AbstractDiagnostic.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/AbstractDiagnostic.java @@ -71,20 +71,7 @@ public abstract class AbstractDiagnostic implements Parame @Override public boolean isValid() { if (!getFactory().isValid(this)) return false; - if (hasSyntaxErrors(psiElement)) return false; if (psiElement.getNode().findChildByType(JetNodeTypes.IDE_TEMPLATE_EXPRESSION) != null) return false; return true; } - - private static boolean hasSyntaxErrors(@NotNull PsiElement psiElement) { - if (psiElement instanceof PsiErrorElement) return true; - - PsiElement lastChild = psiElement.getLastChild(); - if (lastChild != null && hasSyntaxErrors(lastChild)) return true; - - PsiElement[] children = psiElement.getChildren(); - if (children.length > 0 && hasSyntaxErrors(children[children.length - 1])) return true; - - return false; - } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategies.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategies.java index d49d8a2daad..d7abf9cf9cb 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategies.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategies.java @@ -139,7 +139,7 @@ public class PositioningStrategies { } @Override public boolean isValid(@NotNull PsiNameIdentifierOwner element) { - return element.getNameIdentifier() != null; + return element.getNameIdentifier() != null && super.isValid(element); } }; @@ -299,6 +299,8 @@ public class PositioningStrategies { @Override public boolean isValid(@NotNull JetDeclarationWithBody element) { + if (!super.isValid(element)) return false; + JetExpression bodyExpression = element.getBodyExpression(); if (!(bodyExpression instanceof JetBlockExpression)) return false; if (((JetBlockExpression) bodyExpression).getLastBracketRange() == null) return false; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategy.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategy.java index f2dcf999f6b..4e54884790a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategy.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/PositioningStrategy.java @@ -32,7 +32,7 @@ public class PositioningStrategy { } public boolean isValid(@NotNull E element) { - return true; + return !hasSyntaxErrors(element); } @NotNull @@ -49,4 +49,16 @@ public class PositioningStrategy { protected static List markRange(@NotNull TextRange range) { return Collections.singletonList(range); } + + protected static boolean hasSyntaxErrors(@NotNull PsiElement psiElement) { + if (psiElement instanceof PsiErrorElement) return true; + + PsiElement lastChild = psiElement.getLastChild(); + if (lastChild != null && hasSyntaxErrors(lastChild)) return true; + + PsiElement[] children = psiElement.getChildren(); + if (children.length > 0 && hasSyntaxErrors(children[children.length - 1])) return true; + + return false; + } }