mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
create array expression of correct type (and for empty array initializers)
This commit is contained in:
+14
-6
@@ -37,8 +37,7 @@ public class AddNewArrayExpressionFix implements IntentionAction {
|
||||
|
||||
@NotNull
|
||||
public String getText() {
|
||||
PsiExpression expr = myInitializer.getInitializers()[0];
|
||||
PsiType type = expr.getType();
|
||||
PsiType type = getType();
|
||||
return QuickFixBundle.message("add.new.array.text", type.getPresentableText());
|
||||
}
|
||||
|
||||
@@ -49,15 +48,13 @@ public class AddNewArrayExpressionFix implements IntentionAction {
|
||||
|
||||
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
|
||||
if (!myInitializer.isValid() || !myInitializer.getManager().isInProject(myInitializer)) return false;
|
||||
PsiExpression[] initializers = myInitializer.getInitializers();
|
||||
return initializers.length > 0 && initializers[0].getType() != null;
|
||||
return getType() != null;
|
||||
}
|
||||
|
||||
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
|
||||
if (!CodeInsightUtilBase.preparePsiElementsForWrite(myInitializer, file)) return;
|
||||
PsiManager manager = file.getManager();
|
||||
PsiExpression expr = myInitializer.getInitializers()[0];
|
||||
PsiType type = expr.getType();
|
||||
PsiType type = getType();
|
||||
PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory();
|
||||
@NonNls String text = "new " + type.getPresentableText() + "[]{}";
|
||||
PsiNewExpression newExpr = (PsiNewExpression) factory.createExpressionFromText(text, null);
|
||||
@@ -66,6 +63,17 @@ public class AddNewArrayExpressionFix implements IntentionAction {
|
||||
myInitializer.replace(newExpr);
|
||||
}
|
||||
|
||||
private PsiType getType() {
|
||||
final PsiExpression[] initializers = myInitializer.getInitializers();
|
||||
final PsiAssignmentExpression assignmentExpression = (PsiAssignmentExpression) myInitializer.getParent();
|
||||
final PsiType type = assignmentExpression.getType();
|
||||
if (!(type instanceof PsiArrayType)) {
|
||||
if (initializers.length <= 0) return null;
|
||||
return initializers[0].getType();
|
||||
}
|
||||
return ((PsiArrayType)type).getComponentType();
|
||||
}
|
||||
|
||||
public boolean startInWriteAction() {
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user