disable "create switch" intention on red code

which otherwise would lead to exceptions in the intention
This commit is contained in:
peter
2017-07-20 09:48:31 +02:00
parent cef42c6e97
commit 7dd802ccd2
3 changed files with 13 additions and 3 deletions

View File

@@ -50,6 +50,7 @@ public class CreateSwitchIntention extends BaseElementAtCaretIntentionAction {
PsiExpressionStatement expressionStatement = PsiTreeUtil.getParentOfType(element, PsiExpressionStatement.class, false);
return expressionStatement != null &&
expressionStatement.getParent() instanceof PsiCodeBlock &&
PsiTreeUtil.findChildOfType(expressionStatement.getExpression(), PsiErrorElement.class) == null &&
isValidTypeForSwitch(expressionStatement.getExpression().getType(), expressionStatement);
}

View File

@@ -0,0 +1,5 @@
class Test {
void m() {
toS<caret>tring(foo() (String) o);
}
}

View File

@@ -40,7 +40,7 @@ public class CreateSwitchTest extends JavaCodeInsightFixtureTestCase {
}
public void testString() {
doTestString();
withJava7(this::doTest);
}
public void testPrimitive() {
@@ -58,13 +58,17 @@ public class CreateSwitchTest extends JavaCodeInsightFixtureTestCase {
public void testNotAvailableInForUpdate() {
doTestNotAvailable();
}
public void testNotAvailableOnRedCode() {
withJava7(this::doTestNotAvailable);
}
private void doTestString() {
private void withJava7(Runnable runnable) {
final LanguageLevelProjectExtension languageLevelProjectExtension = LanguageLevelProjectExtension.getInstance(getProject());
final LanguageLevel oldLanguageLevel = languageLevelProjectExtension.getLanguageLevel();
languageLevelProjectExtension.setLanguageLevel(LanguageLevel.JDK_1_7);
try {
doTest();
runnable.run();
}
finally {
languageLevelProjectExtension.setLanguageLevel(oldLanguageLevel);