From 09c3edcbc7b12c62280eeba8bb3dea0f06775367 Mon Sep 17 00:00:00 2001 From: Wojciech Lopata Date: Tue, 5 Mar 2013 18:51:57 +0100 Subject: [PATCH] 'hasSyntaxErrors' check moved from Diagnostic to PositioningStrategy This makes possible to mark diagnostic errors when syntax error are present (by overriding isValid in PositioningStrategy subclasses). --- .../jet/lang/diagnostics/AbstractDiagnostic.java | 13 ------------- .../lang/diagnostics/PositioningStrategies.java | 4 +++- .../jet/lang/diagnostics/PositioningStrategy.java | 14 +++++++++++++- 3 files changed, 16 insertions(+), 15 deletions(-) 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; + } }