From 53fd00348db48ea6c687f1ab7a046fcb3af0d02a Mon Sep 17 00:00:00 2001 From: Maxim Medvedev Date: Mon, 23 Nov 2009 15:59:21 +0300 Subject: [PATCH] groovy break, continue highlighting fix --- .../groovy/annotator/GroovyAnnotator.java | 16 +++++++--------- .../plugins/groovy/lang/resolve/ResolveUtil.java | 5 +++-- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java index 42f6fe361e85..e743e6052466 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java @@ -218,7 +218,7 @@ public class GroovyAnnotator implements Annotator { private static void checkLabeledStatement(GrLabeledStatement statement, AnnotationHolder holder) { final String name = statement.getLabelName(); if (ResolveUtil.resolveLabeledStatement(name, statement, true) != null) { - holder.createErrorAnnotation(statement.getLabel(), GroovyBundle.message("label.already.used", name)); + holder.createWarningAnnotation(statement.getLabel(), GroovyBundle.message("label.already.used", name)); } } @@ -232,20 +232,18 @@ public class GroovyAnnotator implements Annotator { } } - final PsiElement targetStatement = statement.findTargetStatement(); + final GrStatement targetStatement = statement.findTargetStatement(); if (targetStatement == null) { if (statement instanceof GrContinueStatement && label == null) { holder.createErrorAnnotation(statement, GroovyBundle.message("continue.outside.loop")); } - else if (statement instanceof GrBreakStatement) { - if (label == null) { - holder.createErrorAnnotation(statement, GroovyBundle.message("break.outside.loop.or.switch")); - } - else if (findFirstLoop(statement) == null) { - holder.createErrorAnnotation(statement, GroovyBundle.message("break.outside.loop")); - } + else if (statement instanceof GrBreakStatement && label == null) { + holder.createErrorAnnotation(statement, GroovyBundle.message("break.outside.loop.or.switch")); } } + if (statement instanceof GrBreakStatement && label != null && findFirstLoop(statement) == null) { + holder.createErrorAnnotation(statement, GroovyBundle.message("break.outside.loop")); + } } @Nullable diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java index c0e3be47076a..a0af3e28198a 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java @@ -241,8 +241,8 @@ public class ResolveUtil { do { PsiElement last = element; element = element.getParent(); - if (element == null || element instanceof GrMember || element instanceof GrClosableBlock || element instanceof GroovyFile) break; - if (element instanceof GrStatement) { + if (element == null || element instanceof GrMember || element instanceof GroovyFile) break; + if (element instanceof GrStatement && !(element instanceof GrClosableBlock)) { statement = (GrStatement)element; } PsiElement sibling = element; @@ -253,6 +253,7 @@ public class ResolveUtil { } sibling = sibling.getPrevSibling(); } + if (element instanceof GrClosableBlock) break; } while (true); return new Pair(null, null);