From 58120ca05c504c8162c2725ae784e899972358b5 Mon Sep 17 00:00:00 2001 From: Gregory Shrago Date: Fri, 20 Nov 2009 16:10:03 +0300 Subject: [PATCH] action fix --- .../compiler/actions/ProcessAnnotationsAction.java | 32 ++++++++++++++-------- .../compiler/impl/FileSetCompileScope.java | 4 +++ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/compiler/actions/ProcessAnnotationsAction.java b/java/compiler/impl/src/com/intellij/compiler/actions/ProcessAnnotationsAction.java index 019c7c8579..fb848205fd 100644 --- a/java/compiler/impl/src/com/intellij/compiler/actions/ProcessAnnotationsAction.java +++ b/java/compiler/impl/src/com/intellij/compiler/actions/ProcessAnnotationsAction.java @@ -33,10 +33,13 @@ import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; +import com.intellij.util.containers.ContainerUtil; +import org.jetbrains.annotations.Nullable; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; public class ProcessAnnotationsAction extends CompileActionBase { @@ -52,9 +55,9 @@ public class ProcessAnnotationsAction extends CompileActionBase { CompilerManager.getInstance(project).make(new ModuleCompileScope(module, false), filter, null); } else { - VirtualFile[] files = getCompilableFiles(project, PlatformDataKeys.VIRTUAL_FILE_ARRAY.getData(dataContext)); - if (files.length > 0) { - CompilerManager.getInstance(project).make(new FileSetCompileScope(Arrays.asList(files), Module.EMPTY_ARRAY), filter, null); + final FileSetCompileScope scope = getCompilableFiles(project, PlatformDataKeys.VIRTUAL_FILE_ARRAY.getData(dataContext)); + if (scope != null) { + CompilerManager.getInstance(project).make(scope, filter, null); } } } @@ -87,8 +90,8 @@ public class ProcessAnnotationsAction extends CompileActionBase { presentation.setVisible(true); presentation.setText(createPresentationText(""), true); - final VirtualFile[] files = getCompilableFiles(project, PlatformDataKeys.VIRTUAL_FILE_ARRAY.getData(dataContext)); - if (moduleContext == null && files.length == 0) { + final FileSetCompileScope scope = getCompilableFiles(project, PlatformDataKeys.VIRTUAL_FILE_ARRAY.getData(dataContext)); + if (moduleContext == null && scope == null) { presentation.setEnabled(false); return; } @@ -99,8 +102,9 @@ public class ProcessAnnotationsAction extends CompileActionBase { } else { PsiPackage aPackage = null; - if (files.length == 1) { - final PsiDirectory directory = PsiManager.getInstance(project).findDirectory(files[0]); + final Collection files = scope.getRootFiles(); + if (files.size() == 1) { + final PsiDirectory directory = PsiManager.getInstance(project).findDirectory(files.iterator().next()); if (directory != null) { aPackage = JavaDirectoryService.getInstance().getPackage(directory); } @@ -120,8 +124,8 @@ public class ProcessAnnotationsAction extends CompileActionBase { } elementDescription = "'" + name + "'"; } - else if (files.length == 1) { - final VirtualFile file = files[0]; + else if (files.size() == 1) { + final VirtualFile file = files.iterator().next(); FileType fileType = FileTypeManager.getInstance().getFileTypeByFile(file); if (CompilerManager.getInstance(project).isCompilableFileType(fileType)) { elementDescription = "'" + file.getName() + "'"; @@ -155,15 +159,17 @@ public class ProcessAnnotationsAction extends CompileActionBase { return MessageFormat.format(ActionsBundle.actionText("RunAPT"), target); } - private static VirtualFile[] getCompilableFiles(Project project, VirtualFile[] files) { + @Nullable + private static FileSetCompileScope getCompilableFiles(Project project, VirtualFile[] files) { if (files == null || files.length == 0) { - return VirtualFile.EMPTY_ARRAY; + return null; } final PsiManager psiManager = PsiManager.getInstance(project); final FileTypeManager typeManager = FileTypeManager.getInstance(); final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex(); final CompilerManager compilerManager = CompilerManager.getInstance(project); final List filesToCompile = new ArrayList(); + final List affectedModules = new ArrayList(); for (final VirtualFile file : files) { if (!fileIndex.isInSourceContent(file)) { continue; @@ -184,7 +190,9 @@ public class ProcessAnnotationsAction extends CompileActionBase { } } filesToCompile.add(file); + ContainerUtil.addIfNotNull(fileIndex.getModuleForFile(file), affectedModules); } - return filesToCompile.size() > 0 ? filesToCompile.toArray(new VirtualFile[filesToCompile.size()]) : VirtualFile.EMPTY_ARRAY; + if (filesToCompile.isEmpty()) return null; + return new FileSetCompileScope(filesToCompile, affectedModules.toArray(new Module[affectedModules.size()])); } } \ No newline at end of file diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/FileSetCompileScope.java b/java/compiler/impl/src/com/intellij/compiler/impl/FileSetCompileScope.java index c29bf5ec1f..9d4ba6a720 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/FileSetCompileScope.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/FileSetCompileScope.java @@ -59,6 +59,10 @@ public class FileSetCompileScope extends UserDataHolderBase implements CompileSc return myAffectedModules; } + public Collection getRootFiles() { + return Collections.unmodifiableCollection(myRootFiles); + } + @NotNull public VirtualFile[] getFiles(final FileType fileType, boolean inSourceOnly) { final List files = new ArrayList(); -- 2.11.4.GIT