From: Roman Ivanov Date: Thu, 13 Aug 2020 00:21:25 +0000 (+0200) Subject: IncreaseLanguageLevelFix: suggest to accept level if not yet X-Git-Tag: idea/203.3645.34~2277^2~690 X-Git-Url: https://git.jetbrains.org/?p=idea%2Fcommunity.git;a=commitdiff_plain;h=5726727a46d31456e9a94f4928e303fb7eb38f6f IncreaseLanguageLevelFix: suggest to accept level if not yet GitOrigin-RevId: bf75af630d5877474f327365bb52ae6458feb732 --- diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/IncreaseLanguageLevelFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/IncreaseLanguageLevelFix.java index 4c1033d68420..d1c39304b441 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/IncreaseLanguageLevelFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/IncreaseLanguageLevelFix.java @@ -6,6 +6,7 @@ import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.java.JavaBundle; +import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.command.undo.BasicUndoableAction; import com.intellij.openapi.command.undo.UndoManager; import com.intellij.openapi.editor.Editor; @@ -54,6 +55,7 @@ public class IncreaseLanguageLevelFix implements IntentionAction, LocalQuickFix, @Override public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { PsiElement element = descriptor.getPsiElement(); + if (!isAvailable(project, null, element.getContainingFile())) return; invoke(project, null, element.getContainingFile()); } @@ -61,31 +63,39 @@ public class IncreaseLanguageLevelFix implements IntentionAction, LocalQuickFix, public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) { Module module = ModuleUtilCore.findModuleForFile(file); return module != null && - JavaSdkUtil.isLanguageLevelAcceptable(project, module, myLevel) && - AcceptedLanguageLevelsSettings.isLanguageLevelAccepted(myLevel); + JavaSdkUtil.isLanguageLevelAcceptable(project, module, myLevel) + && (editor != null || AcceptedLanguageLevelsSettings.isLanguageLevelAccepted(myLevel)); } @Override public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException { - Module module = ModuleUtilCore.findModuleForPsiElement(file); - LanguageLevel oldLevel = LanguageLevelModuleExtensionImpl.getInstance(module).getLanguageLevel(); - if (module != null) { - JavaProjectModelModificationService.getInstance(project).changeLanguageLevel(module, myLevel); - VirtualFile vFile = file.getVirtualFile(); - if (oldLevel != null) { - UndoManager.getInstance(project).undoableActionPerformed(new BasicUndoableAction(vFile) { - @Override - public void undo() { - JavaProjectModelModificationService.getInstance(project).changeLanguageLevel(module, oldLevel); - } - - @Override - public void redo() { - JavaProjectModelModificationService.getInstance(project).changeLanguageLevel(module, myLevel); - } - }); + if (!AcceptedLanguageLevelsSettings.isLanguageLevelAccepted(myLevel)) { + assert editor != null; + if (AcceptedLanguageLevelsSettings.checkAccepted(editor.getComponent(), myLevel) == null) { + return; } } + WriteAction.run(() -> { + Module module = ModuleUtilCore.findModuleForPsiElement(file); + LanguageLevel oldLevel = LanguageLevelModuleExtensionImpl.getInstance(module).getLanguageLevel(); + if (module != null) { + JavaProjectModelModificationService.getInstance(project).changeLanguageLevel(module, myLevel); + VirtualFile vFile = file.getVirtualFile(); + if (oldLevel != null) { + UndoManager.getInstance(project).undoableActionPerformed(new BasicUndoableAction(vFile) { + @Override + public void undo() { + JavaProjectModelModificationService.getInstance(project).changeLanguageLevel(module, oldLevel); + } + + @Override + public void redo() { + JavaProjectModelModificationService.getInstance(project).changeLanguageLevel(module, myLevel); + } + }); + } + } + }); } @Nullable @@ -96,6 +106,6 @@ public class IncreaseLanguageLevelFix implements IntentionAction, LocalQuickFix, @Override public boolean startInWriteAction() { - return true; + return false; } } \ No newline at end of file