diff --git a/platform/lang-impl/src/com/intellij/codeInsight/actions/LayoutCodeDialog.java b/platform/lang-impl/src/com/intellij/codeInsight/actions/LayoutCodeDialog.java
index 4e1f6f7deccb..6a57062c709d 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/actions/LayoutCodeDialog.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/actions/LayoutCodeDialog.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2011 JetBrains s.r.o.
+ * Copyright 2000-2012 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -222,7 +222,7 @@ public class LayoutCodeDialog extends DialogWrapper {
}
boolean isDoNotAskMe() {
- return myDoNotAskMeCheckBox.isSelected();
+ return myDoNotAskMeCheckBox.isEnabled() && myDoNotAskMeCheckBox.isSelected();
}
protected void doOKAction() {
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/actions/ReformatCodeAction.java b/platform/lang-impl/src/com/intellij/codeInsight/actions/ReformatCodeAction.java
index 67b59e13e440..96bbb27cdef5 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/actions/ReformatCodeAction.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/actions/ReformatCodeAction.java
@@ -1,294 +1,294 @@
-/*
- * Copyright 2000-2012 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.intellij.codeInsight.actions;
-
-import com.intellij.application.options.editor.EditorOptions;
-import com.intellij.codeInsight.CodeInsightBundle;
-import com.intellij.formatting.FormattingModelBuilder;
-import com.intellij.lang.LanguageFormatting;
-import com.intellij.notification.Notification;
-import com.intellij.notification.NotificationListener;
-import com.intellij.notification.NotificationType;
-import com.intellij.notification.Notifications;
-import com.intellij.openapi.actionSystem.*;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.editor.ex.EditorSettingsExternalizable;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.options.ShowSettingsUtil;
-import com.intellij.openapi.project.DumbAware;
-import com.intellij.openapi.project.DumbService;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.TextRange;
-import com.intellij.openapi.vfs.ReadonlyStatusHandler;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.openapi.wm.IdeFrame;
-import com.intellij.openapi.wm.ex.WindowManagerEx;
-import com.intellij.psi.*;
-import com.intellij.psi.util.PsiUtilCore;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-
-import javax.swing.*;
-import javax.swing.event.HyperlinkEvent;
-import java.util.ArrayList;
-
-public class ReformatCodeAction extends AnAction implements DumbAware {
- private static final @NonNls String HELP_ID = "editing.codeReformatting";
-
- public void actionPerformed(AnActionEvent event) {
- DataContext dataContext = event.getDataContext();
- final Project project = PlatformDataKeys.PROJECT.getData(dataContext);
- if (project == null) {
- return;
- }
- PsiDocumentManager.getInstance(project).commitAllDocuments();
- final Editor editor = PlatformDataKeys.EDITOR.getData(dataContext);
- final VirtualFile[] files = PlatformDataKeys.VIRTUAL_FILE_ARRAY.getData(dataContext);
- if (files == null) {
- return;
- }
-
- PsiFile file = null;
- final PsiDirectory dir;
- boolean hasSelection = false;
-
- if (editor != null){
- file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument());
- if (file == null) return;
- dir = file.getContainingDirectory();
- hasSelection = editor.getSelectionModel().hasSelection();
- }
- else if (areFiles(files)) {
- final ReadonlyStatusHandler.OperationStatus operationStatus = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(files);
- if (!operationStatus.hasReadonlyFiles()) {
- final ReformatFilesDialog reformatFilesDialog = new ReformatFilesDialog(project, files);
- reformatFilesDialog.show();
- if (!reformatFilesDialog.isOK()) return;
- if (reformatFilesDialog.optimizeImports() && !DumbService.getInstance(project).isDumb()) {
- new ReformatAndOptimizeImportsProcessor(
- project, convertToPsiFiles(files, project), reformatFilesDialog.isProcessOnlyChangedText()
- ).run();
- }
- else {
- new ReformatCodeProcessor(project, convertToPsiFiles(files, project), null, reformatFilesDialog.isProcessOnlyChangedText()).run();
- }
- }
-
- return;
- }
- else {
- Project projectContext = PlatformDataKeys.PROJECT_CONTEXT.getData(dataContext);
- Module moduleContext = LangDataKeys.MODULE_CONTEXT.getData(dataContext);
-
- if (projectContext != null || moduleContext != null) {
- final String text;
- if (moduleContext != null) {
- text = CodeInsightBundle.message("process.scope.module", moduleContext.getModuleFilePath());
- }
- else {
- text = CodeInsightBundle.message("process.scope.project", project.getPresentableUrl());
- }
-
- LayoutProjectCodeDialog dialog
- = new LayoutProjectCodeDialog(project, moduleContext, CodeInsightBundle.message("process.reformat.code"), text, true);
- dialog.show();
- if (!dialog.isOK()) return;
- if (dialog.isOptimizeImports() && !DumbService.getInstance(project).isDumb()) {
- if (moduleContext != null) {
- new ReformatAndOptimizeImportsProcessor(project, moduleContext, dialog.isProcessOnlyChangedText()).run();
- }
- else {
- new ReformatAndOptimizeImportsProcessor(project, dialog.isProcessOnlyChangedText()).run();
- }
- }
- else {
- if (moduleContext != null) {
- new ReformatCodeProcessor(project, moduleContext, dialog.isProcessOnlyChangedText()).run();
- }
- else {
- new ReformatCodeProcessor(project, dialog.isProcessOnlyChangedText()).run();
- }
- }
- return;
- }
-
- PsiElement element = LangDataKeys.PSI_ELEMENT.getData(dataContext);
- if (element == null) return;
- if (element instanceof PsiDirectoryContainer) {
- dir = ((PsiDirectoryContainer)element).getDirectories()[0];
- }
- else if (element instanceof PsiDirectory) {
- dir = (PsiDirectory)element;
- }
- else {
- file = element.getContainingFile();
- if (file == null) return;
- dir = file.getContainingDirectory();
- }
- }
-
- boolean optimizeImports = ReformatFilesDialog.isOptmizeImportsOptionOn();
- boolean processWholeFile = false;
- boolean processChangedTextOnly = false;
- final boolean showDialog = EditorSettingsExternalizable.getInstance().getOptions().SHOW_REFORMAT_DIALOG;
- if (showDialog || (file == null && dir != null)) {
- final LayoutCodeDialog dialog = new LayoutCodeDialog(project, CodeInsightBundle.message("process.reformat.code"), file, dir,
- hasSelection ? Boolean.TRUE : Boolean.FALSE, HELP_ID);
- dialog.show();
- if (!dialog.isOK()) return;
- final boolean showDialogAtFuture = dir == null ? !dialog.isDoNotAskMe() : processChangedTextOnly;
- EditorSettingsExternalizable.getInstance().getOptions().SHOW_REFORMAT_DIALOG = showDialogAtFuture;
- updateShowDialogSetting(dialog, "\"Reformat Code\" dialog disabled");
- optimizeImports = dialog.isOptimizeImports();
- processWholeFile = dialog.isProcessWholeFile();
- processChangedTextOnly = dialog.isProcessOnlyChangedText();
-
- if (dialog.isProcessDirectory()){
- if (optimizeImports) {
- new ReformatAndOptimizeImportsProcessor(project, dir, dialog.isIncludeSubdirectories(), processChangedTextOnly).run();
- }
- else {
- new ReformatCodeProcessor(project, dir, dialog.isIncludeSubdirectories(), processChangedTextOnly).run();
- }
- return;
- }
- }
-
- final TextRange range;
- if (!processWholeFile && editor != null && editor.getSelectionModel().hasSelection()){
- range = new TextRange(editor.getSelectionModel().getSelectionStart(), editor.getSelectionModel().getSelectionEnd());
- }
- else{
- range = null;
- }
-
- if (optimizeImports && range == null) {
- if (file != null || dir == null) {
- new ReformatAndOptimizeImportsProcessor(project, file, processChangedTextOnly).run();
- }
- else {
- new ReformatAndOptimizeImportsProcessor(project, dir, true, processChangedTextOnly).run();
- }
- }
- else {
- new ReformatCodeProcessor(project, file, range, processChangedTextOnly).run();
- }
- }
-
- public static void updateShowDialogSetting(LayoutCodeDialog dialog, String title) {
- if (dialog.isDoNotAskMe()) {
- Notifications.Bus.notify(new Notification("Reformat Code", title,
- "You can re-enable the dialog on the IDE Settings -> Editor pane",
- NotificationType.INFORMATION, new NotificationListener() {
- public void hyperlinkUpdate(@NotNull Notification notification, @NotNull HyperlinkEvent e) {
- if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
- final ShowSettingsUtil util = ShowSettingsUtil.getInstance();
- IdeFrame ideFrame = WindowManagerEx.getInstanceEx().findFrameFor(null);
- util.editConfigurable((JFrame)ideFrame, new EditorOptions());
- }
- }
- }));
- }
- }
-
- public static PsiFile[] convertToPsiFiles(final VirtualFile[] files,Project project) {
- final PsiManager manager = PsiManager.getInstance(project);
- final ArrayList result = new ArrayList();
- for (VirtualFile virtualFile : files) {
- final PsiFile psiFile = manager.findFile(virtualFile);
- if (psiFile != null) result.add(psiFile);
- }
- return PsiUtilCore.toPsiFileArray(result);
- }
-
- public void update(AnActionEvent event){
- Presentation presentation = event.getPresentation();
- DataContext dataContext = event.getDataContext();
- Project project = PlatformDataKeys.PROJECT.getData(dataContext);
- if (project == null){
- presentation.setEnabled(false);
- return;
- }
-
- Editor editor = PlatformDataKeys.EDITOR.getData(dataContext);
-
- final VirtualFile[] files = PlatformDataKeys.VIRTUAL_FILE_ARRAY.getData(dataContext);
-
- if (editor != null){
- PsiFile file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument());
- if (file == null || file.getVirtualFile() == null) {
- presentation.setEnabled(false);
- return;
- }
-
- if (LanguageFormatting.INSTANCE.forContext(file) != null) {
- presentation.setEnabled(true);
- return;
- }
- }
- else if (files!= null && areFiles(files)) {
- boolean anyFormatters = false;
- for (VirtualFile virtualFile : files) {
- if (virtualFile.isDirectory()) {
- presentation.setEnabled(false);
- return;
- }
- final PsiFile psiFile = PsiManager.getInstance(project).findFile(virtualFile);
- if (psiFile == null) {
- presentation.setEnabled(false);
- return;
- }
- final FormattingModelBuilder builder = LanguageFormatting.INSTANCE.forContext(psiFile);
- if (builder != null) {
- anyFormatters = true;
- }
- }
- if (!anyFormatters) {
- presentation.setEnabled(false);
- return;
- }
- }
- else if (files != null && files.length == 1) {
- // skip. Both directories and single files are supported.
- }
- else if (LangDataKeys.MODULE_CONTEXT.getData(dataContext) == null &&
- PlatformDataKeys.PROJECT_CONTEXT.getData(dataContext) == null) {
- PsiElement element = LangDataKeys.PSI_ELEMENT.getData(dataContext);
- if (element == null) {
- presentation.setEnabled(false);
- return;
- }
- if (!(element instanceof PsiDirectory)) {
- PsiFile file = element.getContainingFile();
- if (file == null || LanguageFormatting.INSTANCE.forContext(file) == null) {
- presentation.setEnabled(false);
- return;
- }
- }
- }
- presentation.setEnabled(true);
- }
-
- public static boolean areFiles(final VirtualFile[] files) {
- if (files == null) return false;
- if (files.length < 2) return false;
- for (VirtualFile virtualFile : files) {
- if (virtualFile.isDirectory()) return false;
- }
- return true;
- }
-}
+/*
+ * Copyright 2000-2012 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.intellij.codeInsight.actions;
+
+import com.intellij.application.options.editor.EditorOptions;
+import com.intellij.codeInsight.CodeInsightBundle;
+import com.intellij.formatting.FormattingModelBuilder;
+import com.intellij.lang.LanguageFormatting;
+import com.intellij.notification.Notification;
+import com.intellij.notification.NotificationListener;
+import com.intellij.notification.NotificationType;
+import com.intellij.notification.Notifications;
+import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.editor.Editor;
+import com.intellij.openapi.editor.ex.EditorSettingsExternalizable;
+import com.intellij.openapi.module.Module;
+import com.intellij.openapi.options.ShowSettingsUtil;
+import com.intellij.openapi.project.DumbAware;
+import com.intellij.openapi.project.DumbService;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.TextRange;
+import com.intellij.openapi.vfs.ReadonlyStatusHandler;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.openapi.wm.IdeFrame;
+import com.intellij.openapi.wm.ex.WindowManagerEx;
+import com.intellij.psi.*;
+import com.intellij.psi.util.PsiUtilCore;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+
+import javax.swing.*;
+import javax.swing.event.HyperlinkEvent;
+import java.util.ArrayList;
+
+public class ReformatCodeAction extends AnAction implements DumbAware {
+ private static final @NonNls String HELP_ID = "editing.codeReformatting";
+
+ public void actionPerformed(AnActionEvent event) {
+ DataContext dataContext = event.getDataContext();
+ final Project project = PlatformDataKeys.PROJECT.getData(dataContext);
+ if (project == null) {
+ return;
+ }
+ PsiDocumentManager.getInstance(project).commitAllDocuments();
+ final Editor editor = PlatformDataKeys.EDITOR.getData(dataContext);
+ final VirtualFile[] files = PlatformDataKeys.VIRTUAL_FILE_ARRAY.getData(dataContext);
+ if (files == null) {
+ return;
+ }
+
+ PsiFile file = null;
+ final PsiDirectory dir;
+ boolean hasSelection = false;
+
+ if (editor != null){
+ file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument());
+ if (file == null) return;
+ dir = file.getContainingDirectory();
+ hasSelection = editor.getSelectionModel().hasSelection();
+ }
+ else if (areFiles(files)) {
+ final ReadonlyStatusHandler.OperationStatus operationStatus = ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(files);
+ if (!operationStatus.hasReadonlyFiles()) {
+ final ReformatFilesDialog reformatFilesDialog = new ReformatFilesDialog(project, files);
+ reformatFilesDialog.show();
+ if (!reformatFilesDialog.isOK()) return;
+ if (reformatFilesDialog.optimizeImports() && !DumbService.getInstance(project).isDumb()) {
+ new ReformatAndOptimizeImportsProcessor(
+ project, convertToPsiFiles(files, project), reformatFilesDialog.isProcessOnlyChangedText()
+ ).run();
+ }
+ else {
+ new ReformatCodeProcessor(project, convertToPsiFiles(files, project), null, reformatFilesDialog.isProcessOnlyChangedText()).run();
+ }
+ }
+
+ return;
+ }
+ else {
+ Project projectContext = PlatformDataKeys.PROJECT_CONTEXT.getData(dataContext);
+ Module moduleContext = LangDataKeys.MODULE_CONTEXT.getData(dataContext);
+
+ if (projectContext != null || moduleContext != null) {
+ final String text;
+ if (moduleContext != null) {
+ text = CodeInsightBundle.message("process.scope.module", moduleContext.getModuleFilePath());
+ }
+ else {
+ text = CodeInsightBundle.message("process.scope.project", project.getPresentableUrl());
+ }
+
+ LayoutProjectCodeDialog dialog
+ = new LayoutProjectCodeDialog(project, moduleContext, CodeInsightBundle.message("process.reformat.code"), text, true);
+ dialog.show();
+ if (!dialog.isOK()) return;
+ if (dialog.isOptimizeImports() && !DumbService.getInstance(project).isDumb()) {
+ if (moduleContext != null) {
+ new ReformatAndOptimizeImportsProcessor(project, moduleContext, dialog.isProcessOnlyChangedText()).run();
+ }
+ else {
+ new ReformatAndOptimizeImportsProcessor(project, dialog.isProcessOnlyChangedText()).run();
+ }
+ }
+ else {
+ if (moduleContext != null) {
+ new ReformatCodeProcessor(project, moduleContext, dialog.isProcessOnlyChangedText()).run();
+ }
+ else {
+ new ReformatCodeProcessor(project, dialog.isProcessOnlyChangedText()).run();
+ }
+ }
+ return;
+ }
+
+ PsiElement element = LangDataKeys.PSI_ELEMENT.getData(dataContext);
+ if (element == null) return;
+ if (element instanceof PsiDirectoryContainer) {
+ dir = ((PsiDirectoryContainer)element).getDirectories()[0];
+ }
+ else if (element instanceof PsiDirectory) {
+ dir = (PsiDirectory)element;
+ }
+ else {
+ file = element.getContainingFile();
+ if (file == null) return;
+ dir = file.getContainingDirectory();
+ }
+ }
+
+ boolean optimizeImports = ReformatFilesDialog.isOptmizeImportsOptionOn();
+ boolean processWholeFile = false;
+ boolean processChangedTextOnly = false;
+ final boolean showDialog = EditorSettingsExternalizable.getInstance().getOptions().SHOW_REFORMAT_DIALOG;
+ if (showDialog || (file == null && dir != null)) {
+ final LayoutCodeDialog dialog = new LayoutCodeDialog(project, CodeInsightBundle.message("process.reformat.code"), file, dir,
+ hasSelection ? Boolean.TRUE : Boolean.FALSE, HELP_ID);
+ dialog.show();
+ if (!dialog.isOK()) return;
+ final boolean showDialogAtFuture = !dialog.isDoNotAskMe();
+ EditorSettingsExternalizable.getInstance().getOptions().SHOW_REFORMAT_DIALOG = showDialogAtFuture;
+ updateShowDialogSetting(dialog, "\"Reformat Code\" dialog disabled");
+ optimizeImports = dialog.isOptimizeImports();
+ processWholeFile = dialog.isProcessWholeFile();
+ processChangedTextOnly = dialog.isProcessOnlyChangedText();
+
+ if (dialog.isProcessDirectory()){
+ if (optimizeImports) {
+ new ReformatAndOptimizeImportsProcessor(project, dir, dialog.isIncludeSubdirectories(), processChangedTextOnly).run();
+ }
+ else {
+ new ReformatCodeProcessor(project, dir, dialog.isIncludeSubdirectories(), processChangedTextOnly).run();
+ }
+ return;
+ }
+ }
+
+ final TextRange range;
+ if (!processWholeFile && editor != null && editor.getSelectionModel().hasSelection()){
+ range = new TextRange(editor.getSelectionModel().getSelectionStart(), editor.getSelectionModel().getSelectionEnd());
+ }
+ else{
+ range = null;
+ }
+
+ if (optimizeImports && range == null) {
+ if (file != null || dir == null) {
+ new ReformatAndOptimizeImportsProcessor(project, file, processChangedTextOnly).run();
+ }
+ else {
+ new ReformatAndOptimizeImportsProcessor(project, dir, true, processChangedTextOnly).run();
+ }
+ }
+ else {
+ new ReformatCodeProcessor(project, file, range, processChangedTextOnly).run();
+ }
+ }
+
+ public static void updateShowDialogSetting(LayoutCodeDialog dialog, String title) {
+ if (dialog.isDoNotAskMe()) {
+ Notifications.Bus.notify(new Notification("Reformat Code", title,
+ "You can re-enable the dialog on the IDE Settings -> Editor pane",
+ NotificationType.INFORMATION, new NotificationListener() {
+ public void hyperlinkUpdate(@NotNull Notification notification, @NotNull HyperlinkEvent e) {
+ if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
+ final ShowSettingsUtil util = ShowSettingsUtil.getInstance();
+ IdeFrame ideFrame = WindowManagerEx.getInstanceEx().findFrameFor(null);
+ util.editConfigurable((JFrame)ideFrame, new EditorOptions());
+ }
+ }
+ }));
+ }
+ }
+
+ public static PsiFile[] convertToPsiFiles(final VirtualFile[] files,Project project) {
+ final PsiManager manager = PsiManager.getInstance(project);
+ final ArrayList result = new ArrayList();
+ for (VirtualFile virtualFile : files) {
+ final PsiFile psiFile = manager.findFile(virtualFile);
+ if (psiFile != null) result.add(psiFile);
+ }
+ return PsiUtilCore.toPsiFileArray(result);
+ }
+
+ public void update(AnActionEvent event){
+ Presentation presentation = event.getPresentation();
+ DataContext dataContext = event.getDataContext();
+ Project project = PlatformDataKeys.PROJECT.getData(dataContext);
+ if (project == null){
+ presentation.setEnabled(false);
+ return;
+ }
+
+ Editor editor = PlatformDataKeys.EDITOR.getData(dataContext);
+
+ final VirtualFile[] files = PlatformDataKeys.VIRTUAL_FILE_ARRAY.getData(dataContext);
+
+ if (editor != null){
+ PsiFile file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument());
+ if (file == null || file.getVirtualFile() == null) {
+ presentation.setEnabled(false);
+ return;
+ }
+
+ if (LanguageFormatting.INSTANCE.forContext(file) != null) {
+ presentation.setEnabled(true);
+ return;
+ }
+ }
+ else if (files!= null && areFiles(files)) {
+ boolean anyFormatters = false;
+ for (VirtualFile virtualFile : files) {
+ if (virtualFile.isDirectory()) {
+ presentation.setEnabled(false);
+ return;
+ }
+ final PsiFile psiFile = PsiManager.getInstance(project).findFile(virtualFile);
+ if (psiFile == null) {
+ presentation.setEnabled(false);
+ return;
+ }
+ final FormattingModelBuilder builder = LanguageFormatting.INSTANCE.forContext(psiFile);
+ if (builder != null) {
+ anyFormatters = true;
+ }
+ }
+ if (!anyFormatters) {
+ presentation.setEnabled(false);
+ return;
+ }
+ }
+ else if (files != null && files.length == 1) {
+ // skip. Both directories and single files are supported.
+ }
+ else if (LangDataKeys.MODULE_CONTEXT.getData(dataContext) == null &&
+ PlatformDataKeys.PROJECT_CONTEXT.getData(dataContext) == null) {
+ PsiElement element = LangDataKeys.PSI_ELEMENT.getData(dataContext);
+ if (element == null) {
+ presentation.setEnabled(false);
+ return;
+ }
+ if (!(element instanceof PsiDirectory)) {
+ PsiFile file = element.getContainingFile();
+ if (file == null || LanguageFormatting.INSTANCE.forContext(file) == null) {
+ presentation.setEnabled(false);
+ return;
+ }
+ }
+ }
+ presentation.setEnabled(true);
+ }
+
+ public static boolean areFiles(final VirtualFile[] files) {
+ if (files == null) return false;
+ if (files.length < 2) return false;
+ for (VirtualFile virtualFile : files) {
+ if (virtualFile.isDirectory()) return false;
+ }
+ return true;
+ }
+}