normalize array initializer in surround with try catch (IDEA-128218)

This commit is contained in:
Anna Kozlova
2014-08-14 16:04:52 +04:00
parent 92ee65b87a
commit d27529ff3b
5 changed files with 44 additions and 8 deletions

View File

@@ -28,6 +28,7 @@ import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.PsiTypesUtil;
import com.intellij.psi.util.PsiUtilBase;
import com.intellij.psi.util.PsiUtilCore;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -59,7 +60,7 @@ public class SurroundWithUtil {
PsiExpressionStatement assignment = (PsiExpressionStatement)factory.createStatementFromText(name + "=x;", null);
assignment = (PsiExpressionStatement)CodeStyleManager.getInstance(psiManager.getProject()).reformat(assignment);
PsiAssignmentExpression expr = (PsiAssignmentExpression)assignment.getExpression();
expr.getRExpression().replace(initializer);
expr.getRExpression().replace(RefactoringUtil.convertInitializerToNormalExpression(initializer, var.getType()));
assignment = (PsiExpressionStatement)block.addAfter(assignment, declaration);
array.add(assignment);
}

View File

@@ -25,6 +25,7 @@ import com.intellij.psi.*;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
@@ -119,12 +120,7 @@ public class SplitDeclarationAction extends PsiElementBaseIntentionAction {
statement = (PsiExpressionStatement)CodeStyleManager.getInstance(project).reformat(statement);
PsiAssignmentExpression assignment = (PsiAssignmentExpression)statement.getExpression();
PsiExpression initializer = var.getInitializer();
PsiExpression rExpression = initializer;
if (initializer instanceof PsiArrayInitializerExpression && var.getType() instanceof PsiArrayType) {
rExpression = JavaPsiFacade.getInstance(psiManager.getProject()).getElementFactory().createExpressionFromText(
"new " + var.getTypeElement().getText() + " " + initializer.getText(), null
);
}
PsiExpression rExpression = RefactoringUtil.convertInitializerToNormalExpression(initializer, var.getType());
assignment.getRExpression().replace(rExpression);
initializer.delete();

View File

@@ -677,7 +677,7 @@ public class RefactoringUtil {
public static PsiExpression convertInitializerToNormalExpression(PsiExpression expression, PsiType forcedReturnType)
throws IncorrectOperationException {
if (expression instanceof PsiArrayInitializerExpression) {
if (expression instanceof PsiArrayInitializerExpression && (forcedReturnType == null || forcedReturnType instanceof PsiArrayType)) {
return createNewExpressionFromArrayInitializer((PsiArrayInitializerExpression)expression, forcedReturnType);
}
return expression;

View File

@@ -0,0 +1,22 @@
// "Surround with try/catch" "true"
public class ExTest {
public static String maybeThrow(String data) throws Ex {
throw new Ex(data);
}
{
String[] a = new String[0];
try {
a = new String[]{maybeThrow("")};
} catch (Ex ex) {
ex.printStackTrace();
}
System.out.println(a);
}
private static class Ex extends Exception {
public Ex(String s) {
}
}
}

View File

@@ -0,0 +1,17 @@
// "Surround with try/catch" "true"
public class ExTest {
public static String maybeThrow(String data) throws Ex {
throw new Ex(data);
}
{
String[] a = {mayb<caret>eThrow("")};
System.out.println(a);
}
private static class Ex extends Exception {
public Ex(String s) {
}
}
}