package com.jetbrains.lang.dart.ide.surroundWith.statement; import com.intellij.psi.PsiElement; import com.intellij.psi.util.PsiTreeUtil; import com.jetbrains.lang.dart.psi.IDartBlock; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public abstract class DartBlockStatementSurrounderBase extends DartStatementSurrounder { @Override protected PsiElement findElementToAdd(@NotNull PsiElement surrounder) { final IDartBlock block = PsiTreeUtil.getChildOfType(surrounder, IDartBlock.class); return block == null ? null : block.getStatements(); } @Override protected int cleanUpAndGetPlaceForCaret(@NotNull PsiElement surrounder) { final PsiElement childToDelete = findElementToDelete(surrounder); //true final int result = childToDelete == null ? surrounder.getTextRange().getStartOffset() : childToDelete.getTextRange().getStartOffset(); if (childToDelete != null) { childToDelete.delete(); } return result; } @Nullable protected abstract PsiElement findElementToDelete(PsiElement surrounder); }