create switch intention cleanup

This commit is contained in:
Dmitry Batkovich
2017-06-05 20:06:31 +03:00
parent db26e06168
commit 4f2dafb7ce
@@ -33,40 +33,40 @@ public class CreateSwitchIntention extends BaseElementAtCaretIntentionAction {
public static final String TEXT = "Create switch statement";
@Override
public void invoke(@NotNull final Project project, final Editor editor, @NotNull final PsiElement element) throws IncorrectOperationException {
final PsiExpressionStatement expressionStatement = resolveExpressionStatement(element);
final PsiElementFactory elementFactory = JavaPsiFacade.getInstance(project).getElementFactory();
PsiSwitchStatement switchStatement = (PsiSwitchStatement)elementFactory
.createStatementFromText(String.format("switch (%s) {}", expressionStatement.getExpression().getText()), null);
public void invoke(@NotNull Project project, Editor editor, @NotNull PsiElement element) throws IncorrectOperationException {
PsiExpressionStatement expressionStatement = resolveExpressionStatement(element);
PsiElementFactory elementFactory = JavaPsiFacade.getInstance(project).getElementFactory();
String valueToSwitch = expressionStatement.getExpression().getText();
PsiSwitchStatement switchStatement = (PsiSwitchStatement)elementFactory.createStatementFromText("switch (" + valueToSwitch + ") {}", null);
switchStatement = (PsiSwitchStatement)expressionStatement.replace(switchStatement);
CodeStyleManager.getInstance(project).reformat(switchStatement);
final PsiJavaToken lBrace = switchStatement.getBody().getLBrace();
PsiJavaToken lBrace = switchStatement.getBody().getLBrace();
editor.getCaretModel().moveToOffset(lBrace.getTextOffset() + lBrace.getTextLength());
}
@Override
public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement element) {
final PsiExpressionStatement expressionStatement = resolveExpressionStatement(element);
public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) {
PsiExpressionStatement expressionStatement = resolveExpressionStatement(element);
return expressionStatement != null && isValidTypeForSwitch(expressionStatement.getExpression().getType(), expressionStatement);
}
private static PsiExpressionStatement resolveExpressionStatement(final PsiElement element) {
private static PsiExpressionStatement resolveExpressionStatement(PsiElement element) {
if (element instanceof PsiExpressionStatement) {
return (PsiExpressionStatement)element;
} else {
final PsiStatement psiStatement = PsiTreeUtil.getParentOfType(element, PsiStatement.class);
PsiStatement psiStatement = PsiTreeUtil.getParentOfType(element, PsiStatement.class);
return psiStatement instanceof PsiExpressionStatement ? (PsiExpressionStatement)psiStatement : null;
}
}
private static boolean isValidTypeForSwitch(@Nullable final PsiType type, final PsiElement context) {
private static boolean isValidTypeForSwitch(@Nullable PsiType type, PsiElement context) {
if (type == null) {
return false;
}
if (type instanceof PsiClassType) {
final PsiClass resolvedClass = ((PsiClassType)type).resolve();
PsiClass resolvedClass = ((PsiClassType)type).resolve();
if (resolvedClass == null) {
return false;
}