summaryrefslogtreecommitdiff
path: root/java/java-impl/src/com/intellij/codeInsight/template/postfix/templates/WhileStatementPostfixTemplate.java
blob: 03d91b2235afea76f2d5a8cc70bc1ac2dc4a26ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.intellij.codeInsight.template.postfix.templates;

import com.intellij.openapi.editor.Editor;
import com.intellij.psi.*;
import org.jetbrains.annotations.NotNull;

public class WhileStatementPostfixTemplate extends BooleanPostfixTemplate {
  public WhileStatementPostfixTemplate() {
    super("while", "Iterating while boolean statement is 'true'", "while (expr)");
  }

  @Override
  public void expand(@NotNull PsiElement context, @NotNull Editor editor) {
    PsiExpression expression = getTopmostExpression(context);
    assert expression != null;

    PsiElementFactory factory = JavaPsiFacade.getElementFactory(context.getProject());
    PsiWhileStatement whileStatement = (PsiWhileStatement)factory.createStatementFromText("while(expr)", context);
    PsiExpression condition = whileStatement.getCondition();
    assert condition != null;
    condition.replace(expression);
    PsiElement replacedWhileStatement = expression.replace(whileStatement);
    if (replacedWhileStatement instanceof PsiWhileStatement) {
      PsiJavaToken parenth = ((PsiWhileStatement)replacedWhileStatement).getRParenth();
      if (parenth != null) {
        editor.getCaretModel().moveToOffset(parenth.getTextRange().getEndOffset());
      }
    }
  }
}