mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 13:02:30 +07:00
[java-intentions] InitializeFinalFieldInConstructorFix: preview-friendly
GitOrigin-RevId: 9ccb207c593ca448f9f79da94876ac87c2cac5ae
This commit is contained in:
committed by
intellij-monorepo-bot
parent
11130867f8
commit
0695b6ae8a
@@ -4,6 +4,7 @@ package com.intellij.codeInsight.daemon.impl.quickfix;
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle;
|
||||
import com.intellij.codeInsight.generation.PsiMethodMember;
|
||||
import com.intellij.codeInsight.intention.impl.BaseIntentionAction;
|
||||
import com.intellij.codeInsight.intention.preview.IntentionPreviewInfo;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement;
|
||||
import com.intellij.ide.util.MemberChooser;
|
||||
@@ -14,6 +15,7 @@ import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -82,6 +84,24 @@ public class InitializeFinalFieldInConstructorFix extends LocalQuickFixAndIntent
|
||||
ApplicationManager.getApplication().runWriteAction(() -> addFieldInitialization(constructors, field, project, editor));
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull IntentionPreviewInfo generatePreview(@NotNull Project project, @NotNull Editor editor, @NotNull PsiFile file) {
|
||||
PsiField field = PsiTreeUtil.findSameElementInCopy(ObjectUtils.tryCast(getStartElement(), PsiField.class), file);
|
||||
if (field == null) return IntentionPreviewInfo.EMPTY;
|
||||
final PsiClass myClass = field.getContainingClass();
|
||||
if (myClass == null) return IntentionPreviewInfo.EMPTY;
|
||||
if (myClass.getConstructors().length == 0) {
|
||||
new AddDefaultConstructorFix(myClass).invoke(project, editor, file);
|
||||
}
|
||||
|
||||
PsiMethod[] ctors = CreateConstructorParameterFromFieldFix.filterConstructorsIfFieldAlreadyAssigned(myClass.getConstructors(), field)
|
||||
.toArray(PsiMethod.EMPTY_ARRAY);
|
||||
final List<PsiMethod> constructors = Arrays.asList(ctors);
|
||||
|
||||
addFieldInitialization(constructors, field, project, editor);
|
||||
return IntentionPreviewInfo.DIFF;
|
||||
}
|
||||
|
||||
private static void addFieldInitialization(@NotNull List<? extends PsiMethod> constructors,
|
||||
@NotNull PsiField field,
|
||||
@NotNull Project project,
|
||||
@@ -95,7 +115,7 @@ public class InitializeFinalFieldInConstructorFix extends LocalQuickFixAndIntent
|
||||
PsiExpression initializer = addFieldInitialization(constructor, suggestedInitializers, field, project);
|
||||
rExprPointers.add(SmartPointerManager.getInstance(project).createSmartPsiElementPointer(initializer));
|
||||
}
|
||||
Document doc = Objects.requireNonNull(PsiDocumentManager.getInstance(project).getDocument(field.getContainingFile()));
|
||||
Document doc = Objects.requireNonNull(field.getContainingFile().getViewProvider().getDocument());
|
||||
PsiDocumentManager.getInstance(project).doPostponedOperationsAndUnblockDocument(doc);
|
||||
List<PsiExpression> rExpressions = ContainerUtil.mapNotNull(rExprPointers, SmartPsiElementPointer::getElement);
|
||||
AddVariableInitializerFix.runAssignmentTemplate(rExpressions, suggestedInitializers, editor);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Initialize in constructor" "true"
|
||||
// "Initialize in constructor" "true-preview"
|
||||
class Main {
|
||||
private final int var;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Initialize in constructor" "true"
|
||||
// "Initialize in constructor" "true-preview"
|
||||
class Main {
|
||||
private final int var;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Initialize in constructor" "true"
|
||||
// "Initialize in constructor" "true-preview"
|
||||
class Main {
|
||||
private final int var;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Initialize in constructor" "true"
|
||||
// "Initialize in constructor" "true-preview"
|
||||
class Main {
|
||||
private final int var;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Initialize in constructor" "true"
|
||||
// "Initialize in constructor" "true-preview"
|
||||
class Main {
|
||||
private final int v<caret>ar;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Initialize in constructor" "true"
|
||||
// "Initialize in constructor" "true-preview"
|
||||
class Main {
|
||||
private final int v<caret>ar;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Initialize in constructor" "true"
|
||||
// "Initialize in constructor" "true-preview"
|
||||
class Main {
|
||||
private final int v<caret>ar;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// "Initialize in constructor" "true"
|
||||
// "Initialize in constructor" "true-preview"
|
||||
class Main {
|
||||
private final int v<caret>ar;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user