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;
@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());
}
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
@Override
public boolean startInWriteAction() {
- return true;
+ return false;
}
}
\ No newline at end of file