mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-06 06:21:16 +07:00
correct read-only file handling in more java intentions
This commit is contained in:
+5
-5
@@ -209,11 +209,6 @@ public class AddImportAction implements QuestionAction {
|
||||
}
|
||||
|
||||
private void addImport(final PsiReference ref, final PsiClass targetClass) {
|
||||
StatisticsManager.getInstance().incUseCount(JavaStatisticsManager.createInfo(null, targetClass));
|
||||
CommandProcessor.getInstance().executeCommand(myProject, () -> ApplicationManager.getApplication().runWriteAction(() -> DumbService.getInstance(myProject).withAlternativeResolveEnabled(() -> _addImport(ref, targetClass))), QuickFixBundle.message("add.import"), null);
|
||||
}
|
||||
|
||||
private void _addImport(PsiReference ref, PsiClass targetClass) {
|
||||
if (!ref.getElement().isValid() || !targetClass.isValid() || ref.resolve() == targetClass) {
|
||||
return;
|
||||
}
|
||||
@@ -221,6 +216,11 @@ public class AddImportAction implements QuestionAction {
|
||||
return;
|
||||
}
|
||||
|
||||
StatisticsManager.getInstance().incUseCount(JavaStatisticsManager.createInfo(null, targetClass));
|
||||
CommandProcessor.getInstance().executeCommand(myProject, () -> ApplicationManager.getApplication().runWriteAction(() -> DumbService.getInstance(myProject).withAlternativeResolveEnabled(() -> _addImport(ref, targetClass))), QuickFixBundle.message("add.import"), null);
|
||||
}
|
||||
|
||||
private void _addImport(PsiReference ref, PsiClass targetClass) {
|
||||
int caretOffset = myEditor.getCaretModel().getOffset();
|
||||
RangeMarker caretMarker = myEditor.getDocument().createRangeMarker(caretOffset, caretOffset);
|
||||
int colByOffset = myEditor.offsetToLogicalPosition(caretOffset).column;
|
||||
|
||||
+13
-20
@@ -20,6 +20,7 @@ import com.intellij.codeInsight.FileModificationService;
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle;
|
||||
import com.intellij.codeInsight.intention.impl.BaseIntentionAction;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.WriteAction;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -93,29 +94,21 @@ public class AddExceptionToThrowsFix extends BaseIntentionAction {
|
||||
processSuperMethods = false;
|
||||
}
|
||||
|
||||
ApplicationManager.getApplication().runWriteAction(
|
||||
() -> {
|
||||
if (!FileModificationService.getInstance().prepareFileForWrite(targetMethod.getContainingFile())) return;
|
||||
if (processSuperMethods) {
|
||||
for (PsiMethod superMethod : superMethods) {
|
||||
if (!FileModificationService.getInstance().prepareFileForWrite(superMethod.getContainingFile())) return;
|
||||
}
|
||||
}
|
||||
if (!FileModificationService.getInstance().prepareFileForWrite(targetMethod.getContainingFile())) return;
|
||||
if (processSuperMethods) {
|
||||
for (PsiMethod superMethod : superMethods) {
|
||||
if (!FileModificationService.getInstance().prepareFileForWrite(superMethod.getContainingFile())) return;
|
||||
}
|
||||
}
|
||||
WriteAction.run(() -> {
|
||||
processMethod(project, targetMethod, unhandledExceptions);
|
||||
|
||||
try {
|
||||
processMethod(project, targetMethod, unhandledExceptions);
|
||||
|
||||
if (processSuperMethods) {
|
||||
for (PsiMethod superMethod : superMethods) {
|
||||
processMethod(project, superMethod, unhandledExceptions);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (IncorrectOperationException e) {
|
||||
LOG.error(e);
|
||||
if (processSuperMethods) {
|
||||
for (PsiMethod superMethod : superMethods) {
|
||||
processMethod(project, superMethod, unhandledExceptions);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
private static PsiMethod[] getSuperMethods(@NotNull PsiMethod targetMethod) {
|
||||
|
||||
+7
-4
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package com.intellij.codeInsight.daemon.impl.quickfix;
|
||||
|
||||
import com.intellij.codeInsight.FileModificationService;
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle;
|
||||
import com.intellij.codeInsight.intention.IntentionAction;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
@@ -28,6 +27,7 @@ import com.intellij.psi.*;
|
||||
import com.intellij.ui.popup.list.ListPopupImpl;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.annotations.TestOnly;
|
||||
|
||||
import javax.swing.*;
|
||||
@@ -114,11 +114,14 @@ public class AddMethodQualifierFix implements IntentionAction {
|
||||
return getOrFindCandidates();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public PsiElement getElementToMakeWritable(@NotNull PsiFile currentFile) {
|
||||
return myMethodCall.getElement();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(@NotNull final Project project, final Editor editor, final PsiFile file) throws IncorrectOperationException {
|
||||
if (!FileModificationService.getInstance().preparePsiElementsForWrite(file)) {
|
||||
return;
|
||||
}
|
||||
if (getOrFindCandidates().size() == 1 || UNIT_TEST_MODE) {
|
||||
qualify(getOrFindCandidates().get(0), editor);
|
||||
}
|
||||
|
||||
+4
-11
@@ -423,17 +423,10 @@ public abstract class CreateFromUsageBaseFix extends BaseIntentionAction {
|
||||
@NotNull final Project project,
|
||||
final TemplateEditingListener listener,
|
||||
final String commandName) {
|
||||
Runnable runnable = () -> {
|
||||
if (project.isDisposed() || editor.isDisposed()) return;
|
||||
CommandProcessor.getInstance().executeCommand(project,
|
||||
() -> TemplateManager.getInstance(project).startTemplate(editor, template, listener), commandName, commandName);
|
||||
};
|
||||
if (ApplicationManager.getApplication().isUnitTestMode()) {
|
||||
runnable.run();
|
||||
}
|
||||
else {
|
||||
ApplicationManager.getApplication().invokeLater(runnable);
|
||||
}
|
||||
Runnable runnable = () -> TemplateManager.getInstance(project).startTemplate(editor, template, listener);
|
||||
ApplicationManager.getApplication().invokeLater(
|
||||
() -> CommandProcessor.getInstance().executeCommand(project, runnable, commandName, commandName),
|
||||
x -> project.isDisposed() || editor.isDisposed());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+13
-24
@@ -30,6 +30,7 @@ import com.intellij.ide.fileTemplates.FileTemplateUtil;
|
||||
import com.intellij.ide.fileTemplates.JavaTemplateUtil;
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.WriteAction;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.EditorModificationUtil;
|
||||
@@ -300,13 +301,9 @@ public class CreateFromUsageUtils {
|
||||
qualifierName = ((PsiJavaCodeReferenceElement)qualifier).getQualifiedName();
|
||||
qualifierElement = ((PsiJavaCodeReferenceElement)qualifier).resolve();
|
||||
if (qualifierElement instanceof PsiClass) {
|
||||
return ApplicationManager.getApplication().runWriteAction(
|
||||
new Computable<PsiClass>() {
|
||||
@Override
|
||||
public PsiClass compute() {
|
||||
return createClassInQualifier((PsiClass)qualifierElement, classKind, name, referenceElement);
|
||||
}
|
||||
});
|
||||
if (!FileModificationService.getInstance().preparePsiElementForWrite(qualifierElement)) return null;
|
||||
|
||||
return WriteAction.compute(() -> createClassInQualifier((PsiClass)qualifierElement, classKind, name, referenceElement));
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -369,23 +366,15 @@ public class CreateFromUsageUtils {
|
||||
CreateClassKind classKind,
|
||||
String name,
|
||||
PsiJavaCodeReferenceElement referenceElement) {
|
||||
try {
|
||||
if (!FileModificationService.getInstance().preparePsiElementForWrite(psiClass)) return null;
|
||||
|
||||
PsiManager manager = psiClass.getManager();
|
||||
PsiElementFactory elementFactory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory();
|
||||
PsiClass result = classKind == CreateClassKind.INTERFACE ? elementFactory.createInterface(name) :
|
||||
classKind == CreateClassKind.CLASS ? elementFactory.createClass(name) :
|
||||
classKind == CreateClassKind.ANNOTATION ? elementFactory.createAnnotationType(name) :
|
||||
elementFactory.createEnum(name);
|
||||
CreateFromUsageBaseFix.setupGenericParameters(result, referenceElement);
|
||||
result = (PsiClass)CodeStyleManager.getInstance(manager.getProject()).reformat(result);
|
||||
return (PsiClass) psiClass.add(result);
|
||||
}
|
||||
catch (IncorrectOperationException e) {
|
||||
LOG.error(e);
|
||||
return null;
|
||||
}
|
||||
PsiManager manager = psiClass.getManager();
|
||||
PsiElementFactory elementFactory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory();
|
||||
PsiClass result = classKind == CreateClassKind.INTERFACE ? elementFactory.createInterface(name) :
|
||||
classKind == CreateClassKind.CLASS ? elementFactory.createClass(name) :
|
||||
classKind == CreateClassKind.ANNOTATION ? elementFactory.createAnnotationType(name) :
|
||||
elementFactory.createEnum(name);
|
||||
CreateFromUsageBaseFix.setupGenericParameters(result, referenceElement);
|
||||
result = (PsiClass)CodeStyleManager.getInstance(manager.getProject()).reformat(result);
|
||||
return (PsiClass) psiClass.add(result);
|
||||
}
|
||||
|
||||
public static PsiClass createClass(final CreateClassKind classKind,
|
||||
|
||||
+7
-2
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package com.intellij.codeInsight.daemon.impl.quickfix;
|
||||
|
||||
import com.intellij.codeInsight.FileModificationService;
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle;
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.codeInsight.generation.GetterSetterPrototypeProvider;
|
||||
@@ -29,6 +28,7 @@ import com.intellij.psi.util.PropertyUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@@ -112,9 +112,14 @@ public class CreateGetterOrSetterFix implements IntentionAction, LowPriorityActi
|
||||
return isStatic(field) && isFinal(field);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public PsiElement getElementToMakeWritable(@NotNull PsiFile currentFile) {
|
||||
return myField;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
|
||||
if (!FileModificationService.getInstance().preparePsiElementForWrite(myField)) return;
|
||||
PsiClass aClass = myField.getContainingClass();
|
||||
final List<PsiMethod> methods = new ArrayList<>();
|
||||
if (myCreateGetter) {
|
||||
|
||||
+10
-13
@@ -19,8 +19,7 @@ import com.intellij.codeInsight.FileModificationService;
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle;
|
||||
import com.intellij.ide.util.PsiClassListCellRenderer;
|
||||
import com.intellij.ide.util.PsiElementListCellRenderer;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.command.CommandProcessor;
|
||||
import com.intellij.openapi.command.WriteCommandAction;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.popup.PopupChooserBuilder;
|
||||
@@ -49,6 +48,11 @@ public class CreateInnerClassFromUsageFix extends CreateClassFromUsageBaseFix {
|
||||
return QuickFixBundle.message("create.inner.class.from.usage.text", myKind.getDescription(), varName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean startInWriteAction() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
|
||||
PsiDocumentManager.getInstance(project).commitAllDocuments();
|
||||
@@ -113,15 +117,7 @@ public class CreateInnerClassFromUsageFix extends CreateClassFromUsageBaseFix {
|
||||
Runnable runnable = () -> {
|
||||
int index = list.getSelectedIndex();
|
||||
if (index < 0) return;
|
||||
final PsiClass aClass = (PsiClass)list.getSelectedValue();
|
||||
CommandProcessor.getInstance().executeCommand(project, () -> ApplicationManager.getApplication().runWriteAction(() -> {
|
||||
try {
|
||||
doInvoke(aClass, superClassName);
|
||||
}
|
||||
catch (IncorrectOperationException e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
}), getText(), null);
|
||||
doInvoke((PsiClass)list.getSelectedValue(), superClassName);
|
||||
};
|
||||
|
||||
builder.
|
||||
@@ -156,7 +152,8 @@ public class CreateInnerClassFromUsageFix extends CreateClassFromUsageBaseFix {
|
||||
}
|
||||
CreateFromUsageBaseFix.setupGenericParameters(created, ref);
|
||||
|
||||
created = (PsiClass)aClass.add(created);
|
||||
ref.bindToElement(created);
|
||||
WriteCommandAction.runWriteCommandAction(aClass.getProject(), getText(), null,
|
||||
() -> ref.bindToElement(aClass.add(created)),
|
||||
aClass.getContainingFile());
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -16,7 +16,6 @@
|
||||
|
||||
package com.intellij.codeInsight.daemon.impl.quickfix;
|
||||
|
||||
import com.intellij.codeInsight.FileModificationService;
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle;
|
||||
import com.intellij.codeInsight.intention.IntentionAction;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
@@ -29,6 +28,7 @@ import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -56,10 +56,14 @@ public class DeferFinalAssignmentFix implements IntentionAction {
|
||||
return QuickFixBundle.message("defer.final.assignment.with.temp.text", variable.getName());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public PsiElement getElementToMakeWritable(@NotNull PsiFile currentFile) {
|
||||
return variable;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
|
||||
if (!FileModificationService.getInstance().prepareFileForWrite(variable.getContainingFile())) return;
|
||||
|
||||
if (variable instanceof PsiField) {
|
||||
deferField((PsiField)variable);
|
||||
}
|
||||
|
||||
+2
-13
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package com.intellij.codeInsight.daemon.impl.quickfix;
|
||||
|
||||
import com.intellij.codeInsight.FileModificationService;
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle;
|
||||
import com.intellij.codeInsight.daemon.impl.actions.AddImportAction;
|
||||
import com.intellij.codeInsight.hint.QuestionAction;
|
||||
@@ -35,8 +34,6 @@ import com.intellij.psi.presentation.java.ClassPresentationUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.ui.popup.list.ListPopupImpl;
|
||||
import com.intellij.ui.popup.list.PopupListElementRenderer;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -94,16 +91,8 @@ public class StaticImportMethodQuestionAction<T extends PsiMember> implements Qu
|
||||
final Project project = toImport.getProject();
|
||||
final PsiElement element = myRef.getElement();
|
||||
if (element == null) return;
|
||||
if (!FileModificationService.getInstance().prepareFileForWrite(element.getContainingFile())) return;
|
||||
WriteCommandAction.runWriteCommandAction(project, QuickFixBundle.message("add.import"), null, () -> {
|
||||
try {
|
||||
AddSingleMemberStaticImportAction
|
||||
.bindAllClassRefs(element.getContainingFile(), toImport, toImport.getName(), toImport.getContainingClass());
|
||||
}
|
||||
catch (IncorrectOperationException e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
});
|
||||
WriteCommandAction.runWriteCommandAction(project, QuickFixBundle.message("add.import"), null, () ->
|
||||
AddSingleMemberStaticImportAction.bindAllClassRefs(element.getContainingFile(), toImport, toImport.getName(), toImport.getContainingClass()));
|
||||
}
|
||||
|
||||
private void chooseAndImport(final Editor editor, final Project project) {
|
||||
|
||||
-4
@@ -16,7 +16,6 @@
|
||||
package com.intellij.codeInsight.intention.impl;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightBundle;
|
||||
import com.intellij.codeInsight.FileModificationService;
|
||||
import com.intellij.codeInsight.highlighting.HighlightManager;
|
||||
import com.intellij.codeInsight.intention.BaseElementAtCaretIntentionAction;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
@@ -24,7 +23,6 @@ import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.colors.EditorColors;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
@@ -113,8 +111,6 @@ public class AddOnDemandStaticImportAction extends BaseElementAtCaretIntentionAc
|
||||
}
|
||||
|
||||
public static void invoke(final Project project, PsiFile file, final Editor editor, PsiElement element) {
|
||||
if (!FileModificationService.getInstance().prepareFileForWrite(file)) return;
|
||||
|
||||
final PsiJavaCodeReferenceElement refExpr = (PsiJavaCodeReferenceElement)element.getParent();
|
||||
final PsiClass aClass = (PsiClass)refExpr.resolve();
|
||||
if (aClass == null) {
|
||||
|
||||
-3
@@ -20,7 +20,6 @@
|
||||
package com.intellij.codeInsight.intention.impl;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightBundle;
|
||||
import com.intellij.codeInsight.FileModificationService;
|
||||
import com.intellij.codeInsight.intention.BaseElementAtCaretIntentionAction;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
@@ -180,8 +179,6 @@ public class AddSingleMemberStaticImportAction extends BaseElementAtCaretIntenti
|
||||
}
|
||||
|
||||
public static void invoke(PsiFile file, final PsiElement element) {
|
||||
if (!FileModificationService.getInstance().prepareFileForWrite(file)) return;
|
||||
|
||||
final PsiJavaCodeReferenceElement refExpr = (PsiJavaCodeReferenceElement)element.getParent();
|
||||
final String referenceName = refExpr.getReferenceName();
|
||||
final JavaResolveResult[] targets = refExpr.multiResolve(false);
|
||||
|
||||
+1
-1
@@ -141,11 +141,11 @@ public class CopyAbstractMethodImplementationHandler {
|
||||
}
|
||||
|
||||
private void copyImplementation(final PsiMethod sourceMethod) {
|
||||
if (!FileModificationService.getInstance().preparePsiElementForWrite(sourceMethod)) return;
|
||||
final List<PsiMethod> generatedMethods = new ArrayList<>();
|
||||
new WriteCommandAction(myProject, getTargetFiles()) {
|
||||
@Override
|
||||
protected void run(@NotNull final Result result) throws Throwable {
|
||||
if (!FileModificationService.getInstance().preparePsiElementForWrite(sourceMethod)) return;
|
||||
for (PsiEnumConstant enumConstant : myTargetEnumConstants) {
|
||||
PsiClass initializingClass = enumConstant.getOrCreateInitializingClass();
|
||||
myTargetClasses.add(initializingClass);
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package com.intellij.codeInspection;
|
||||
|
||||
import com.intellij.codeInsight.FileModificationService;
|
||||
import com.intellij.codeInsight.generation.surroundWith.JavaWithIfSurrounder;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
@@ -64,7 +63,7 @@ public class SurroundWithIfFix implements LocalQuickFix {
|
||||
PsiFile file = anchorStatement.getContainingFile();
|
||||
PsiDocumentManager documentManager = PsiDocumentManager.getInstance(project);
|
||||
Document document = documentManager.getDocument(file);
|
||||
if (document == null || !FileModificationService.getInstance().prepareFileForWrite(file)) return;
|
||||
if (document == null) return;
|
||||
PsiElement[] elements = {anchorStatement};
|
||||
PsiElement prev = PsiTreeUtil.skipSiblingsBackward(anchorStatement, PsiWhiteSpace.class);
|
||||
if (prev instanceof PsiComment && JavaSuppressionUtil.getSuppressedInspectionIdsIn(prev) != null) {
|
||||
|
||||
Reference in New Issue
Block a user