create switch intention: disable in for update IDEA-173690

This commit is contained in:
Dmitry Batkovich
2017-06-05 20:06:00 +03:00
parent 4f2dafb7ce
commit fbd082f075
3 changed files with 14 additions and 12 deletions

View File

@@ -34,7 +34,7 @@ public class CreateSwitchIntention extends BaseElementAtCaretIntentionAction {
@Override
public void invoke(@NotNull Project project, Editor editor, @NotNull PsiElement element) throws IncorrectOperationException {
PsiExpressionStatement expressionStatement = resolveExpressionStatement(element);
PsiExpressionStatement expressionStatement = PsiTreeUtil.getParentOfType(element, PsiExpressionStatement.class, false);
PsiElementFactory elementFactory = JavaPsiFacade.getInstance(project).getElementFactory();
String valueToSwitch = expressionStatement.getExpression().getText();
PsiSwitchStatement switchStatement = (PsiSwitchStatement)elementFactory.createStatementFromText("switch (" + valueToSwitch + ") {}", null);
@@ -47,17 +47,10 @@ public class CreateSwitchIntention extends BaseElementAtCaretIntentionAction {
@Override
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(PsiElement element) {
if (element instanceof PsiExpressionStatement) {
return (PsiExpressionStatement)element;
} else {
PsiStatement psiStatement = PsiTreeUtil.getParentOfType(element, PsiStatement.class);
return psiStatement instanceof PsiExpressionStatement ? (PsiExpressionStatement)psiStatement : null;
}
PsiExpressionStatement expressionStatement = PsiTreeUtil.getParentOfType(element, PsiExpressionStatement.class, false);
return expressionStatement != null &&
expressionStatement.getParent() instanceof PsiCodeBlock &&
isValidTypeForSwitch(expressionStatement.getExpression().getType(), expressionStatement);
}
private static boolean isValidTypeForSwitch(@Nullable PsiType type, PsiElement context) {

View File

@@ -0,0 +1,5 @@
class Test {
void m(int[] array) {
for (int i = 1; i < array.length; <caret>i++) { }
}
}

View File

@@ -55,6 +55,10 @@ public class CreateSwitchTest extends JavaCodeInsightFixtureTestCase {
doTestNotAvailable();
}
public void testNotAvailableInForUpdate() {
doTestNotAvailable();
}
private void doTestString() {
final LanguageLevelProjectExtension languageLevelProjectExtension = LanguageLevelProjectExtension.getInstance(getProject());
final LanguageLevel oldLanguageLevel = languageLevelProjectExtension.getLanguageLevel();