diff --git a/platform/analysis-api/src/com/intellij/openapi/roots/GeneratedSourcesFilter.java b/platform/analysis-api/src/com/intellij/openapi/roots/GeneratedSourcesFilter.java index ce15635a0d8e..670598463428 100644 --- a/platform/analysis-api/src/com/intellij/openapi/roots/GeneratedSourcesFilter.java +++ b/platform/analysis-api/src/com/intellij/openapi/roots/GeneratedSourcesFilter.java @@ -27,4 +27,14 @@ public abstract class GeneratedSourcesFilter { public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.generatedSourcesFilter"); public abstract boolean isGeneratedSource(@NotNull VirtualFile file, @NotNull Project project); + + public static boolean isGeneratedSourceByAnyFilter(@NotNull VirtualFile file, + @NotNull Project project) { + for (GeneratedSourcesFilter filter : EP_NAME.getExtensions()) { + if (filter.isGeneratedSource(file, project)) { + return true; + } + } + return false; + } } diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/DirectoryAsPackageRenameHandlerBase.java b/platform/lang-impl/src/com/intellij/refactoring/rename/DirectoryAsPackageRenameHandlerBase.java index 23cf8be4ec15..ea5547f5f761 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/DirectoryAsPackageRenameHandlerBase.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/DirectoryAsPackageRenameHandlerBase.java @@ -26,6 +26,7 @@ import com.intellij.openapi.editor.ScrollType; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.GeneratedSourcesFilter; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.ui.Messages; @@ -40,9 +41,17 @@ import com.intellij.psi.impl.file.PsiPackageBase; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.refactoring.BaseRefactoringProcessor; import com.intellij.refactoring.RefactoringBundle; +import com.intellij.util.ArrayUtil; +import com.intellij.util.Function; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; + /** * @author yole */ @@ -213,12 +222,27 @@ public abstract class DirectoryAsPackageRenameHandlerBase 0) { - message.append("\n"); + final List generated = new ArrayList(); + final List source = new ArrayList(); + for (PsiDirectory directory : directories) { + final VirtualFile virtualFile = directory.getVirtualFile(); + if (GeneratedSourcesFilter.isGeneratedSourceByAnyFilter(virtualFile, directory.getProject())) { + generated.add(directory); + } else { + source.add(directory); } - message.append(directory.getVirtualFile().getPresentableUrl()); + } + final Function directoryPresentation = new Function() { + @Override + public String fun(PsiDirectory directory) { + return directory.getVirtualFile().getPresentableUrl(); + } + }; + message.append(StringUtil.join(source, directoryPresentation, "\n")); + if (!generated.isEmpty()) { + message.append("\n\nalso generated:\n"); + message.append(StringUtil.join(generated, directoryPresentation, "\n")); + } }