diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java index 78d73295c387..86d61df0968d 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java @@ -602,12 +602,17 @@ public class JavaCompletionData extends JavaAwareCompletionData{ LookupElement br = createKeyword(position, PsiKeyword.BREAK); LookupElement cont = createKeyword(position, PsiKeyword.CONTINUE); - if (!psiElement().insideSequence(true, psiElement(PsiLabeledStatement.class), - or(psiElement(PsiFile.class), psiElement(PsiMethod.class), - psiElement(PsiClassInitializer.class))).accepts(position)) { - br = TailTypeDecorator.withTail(br, TailType.SEMICOLON); - cont = TailTypeDecorator.withTail(cont, TailType.SEMICOLON); + TailType tailType; + if (psiElement().insideSequence(true, psiElement(PsiLabeledStatement.class), + or(psiElement(PsiFile.class), psiElement(PsiMethod.class), + psiElement(PsiClassInitializer.class))).accepts(position)) { + tailType = TailType.HUMBLE_SPACE; } + else { + tailType = TailType.SEMICOLON; + } + br = TailTypeDecorator.withTail(br, tailType); + cont = TailTypeDecorator.withTail(cont, tailType); if (loop != null && new InsideElementFilter(new ClassFilter(PsiStatement.class)).isAcceptable(position, loop)) { result.addElement(br); diff --git a/java/java-tests/testData/codeInsight/completion/normal/ContinueLabel.java b/java/java-tests/testData/codeInsight/completion/normal/ContinueLabel.java new file mode 100644 index 000000000000..27341ba94f2f --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/ContinueLabel.java @@ -0,0 +1,7 @@ +public class Util { + void foo(int a, int b) { + Outer: for (int i = 0; i < 239; i++) { + conti + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/normal/ContinueLabel_after.java b/java/java-tests/testData/codeInsight/completion/normal/ContinueLabel_after.java new file mode 100644 index 000000000000..c1b9a66e71bb --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/ContinueLabel_after.java @@ -0,0 +1,7 @@ +public class Util { + void foo(int a, int b) { + Outer: for (int i = 0; i < 239; i++) { + continue + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy index 10782dea9313..dc148649b4f3 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy @@ -520,6 +520,8 @@ public class NormalCompletionTest extends LightFixtureCompletionTestCase { checkResult() } + public void testContinueLabel() throws Throwable { doTest(); } + public void testAnonymousProcess() { myFixture.addClass 'package java.lang; public class Process {}' myFixture.addClass ''' diff --git a/platform/platform-api/src/com/intellij/patterns/TreeElementPattern.java b/platform/platform-api/src/com/intellij/patterns/TreeElementPattern.java index 050c8c049e34..9f843d7cb88c 100644 --- a/platform/platform-api/src/com/intellij/patterns/TreeElementPattern.java +++ b/platform/platform-api/src/com/intellij/patterns/TreeElementPattern.java @@ -171,13 +171,13 @@ public abstract class TreeElementPattern... patterns) { - return with(new PatternCondition("condInside") { + return with(new PatternCondition("insideSequence") { public boolean accepts(@NotNull final T t, final ProcessingContext context) { int i = 0; ParentType element = strict ? getParent(t) : t; - while (element != null && i >= patterns.length) { + while (element != null && i < patterns.length) { for (int j = i; j < patterns.length; j++) { - if (patterns[j].getCondition().accepts(t, context)) { + if (patterns[j].accepts(element, context)) { if (i != j) return false; i++; break; @@ -185,7 +185,7 @@ public abstract class TreeElementPattern