diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java index a9e376209cd..a8ca16f4c42 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java @@ -793,11 +793,13 @@ public class JetExpressionParsing extends AbstractJetParsing { * : whenCondition{","} "=>" element SEMI */ private void parseWhenEntryNotElse() { - while (true) { - while (at(COMMA)) errorAndAdvance("Expecting a when-condition"); - parseWhenCondition(); - if (!at(COMMA)) break; - advance(); // COMMA + if (!myJetParsing.parseIdeTemplate()) { + while (true) { + while (at(COMMA)) errorAndAdvance("Expecting a when-condition"); + parseWhenCondition(); + if (!at(COMMA)) break; + advance(); // COMMA + } } expect(ARROW, "Expecting '->' or 'when'", WHEN_CONDITION_RECOVERY_SET); if (atSet(WHEN_CONDITION_RECOVERY_SET)) { diff --git a/idea/src/org/jetbrains/jet/plugin/completion/JetKeywordCompletionContributor.java b/idea/src/org/jetbrains/jet/plugin/completion/JetKeywordCompletionContributor.java index f417cfc4c8e..e455b557f06 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/JetKeywordCompletionContributor.java +++ b/idea/src/org/jetbrains/jet/plugin/completion/JetKeywordCompletionContributor.java @@ -65,6 +65,9 @@ public class JetKeywordCompletionContributor extends CompletionContributor { private static final String OBJECT_NAMED_TEMPLATE = "object <##> {\n<##>\n}"; private static final String CLASS_OBJECT_TEMPLATE = "class object {\n<##>\n}"; private static final String FOR_TEMPLATE = "for (<##> in <##>) {\n<##>\n}"; + private static final String WHEN_TEMPLATE = "when (<##>) {\n<##> -> <##>\n" + + "else -> <##>\n}"; + private static final String WHEN_ENTRY_TEMPLATE = "<##> -> <##>"; private static class CommentFilter implements ElementFilter { @Override @@ -162,6 +165,18 @@ public class JetKeywordCompletionContributor extends CompletionContributor { } } + private static class InWhenFilter implements ElementFilter { + @Override + public boolean isAcceptable(Object element, PsiElement context) { + return PsiTreeUtil.getParentOfType(context, JetWhenExpression.class, false) != null; + } + + @Override + public boolean isClassAcceptable(Class hintClass) { + return true; + } + } + public static class KeywordsCompletionProvider extends CompletionProvider { private final Collection elements; @@ -224,7 +239,7 @@ public class JetKeywordCompletionContributor extends CompletionContributor { CAPITALIZED_THIS_KEYWORD, THIS_KEYWORD, THROW_KEYWORD, TRUE_KEYWORD, TRY_KEYWORD, TYPE_KEYWORD, - VARARG_KEYWORD, WHEN_KEYWORD, WHERE_KEYWORD, + VARARG_KEYWORD, WHERE_KEYWORD, WHILE_KEYWORD); registerScopeKeywordsCompletion(new InPropertyFilter(), @@ -234,6 +249,8 @@ public class JetKeywordCompletionContributor extends CompletionContributor { registerScopeKeywordsCompletion(new InParametersFilter(), OUT_KEYWORD); // templates + registerScopeKeywordsCompletion(new InWhenFilter(), + WHEN_ENTRY_TEMPLATE); registerScopeKeywordsCompletion(new InTopFilter(), FUN_TEMPLATE, VAL_WITH_TYPE_TEMPLATE, VAL_WITH_GETTER_TEMPLATE, VAR_WITH_TYPE_TEMPLATE, VAR_WITH_GETTER_AND_SETTER_TEMPLATE, @@ -245,9 +262,9 @@ public class JetKeywordCompletionContributor extends CompletionContributor { registerScopeKeywordsCompletion(new InNonClassBlockFilter(), IF_TEMPLATE, IF_ELSE_TEMPLATE, IF_ELSE_ONELINE_TEMPLATE, FUN_TEMPLATE, VAL_SIMPLE_TEMPLATE, VAR_SIMPLE_TEMPLATE, - TRAIT_TEMPLATE, CLASS_TEMPLATE, OBJECT_NAMED_TEMPLATE, FOR_TEMPLATE); + TRAIT_TEMPLATE, CLASS_TEMPLATE, OBJECT_NAMED_TEMPLATE, FOR_TEMPLATE, WHEN_TEMPLATE); registerScopeKeywordsCompletion(new InPropertyFilter(), - IF_ELSE_ONELINE_TEMPLATE); + IF_ELSE_ONELINE_TEMPLATE, WHEN_TEMPLATE); } private void registerScopeKeywordsCompletion(final ElementFilter placeFilter, String... keywords) {