groovy break, continue highlighting fix

This commit is contained in:
Maxim Medvedev
2009-11-23 15:59:21 +03:00
parent 7a43b9481e
commit 53fd00348d
2 changed files with 10 additions and 11 deletions
@@ -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
@@ -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<GrStatement, GrLabeledStatement>(null, null);