From 51e7e1c65687d99a8f1d56ebd17648bb4f7f4a13 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 6 May 2014 14:57:16 +0400 Subject: [PATCH] compiler configuration: distinguish compilable resources (IDEA-124599) --- .../compiler/CompilerConfigurationImpl.java | 12 +++++++++- .../compiler/actions/CompileAction.java | 22 +++++-------------- .../compiler/CompilerConfiguration.java | 2 ++ .../execution/junit/TestClassFilter.java | 3 ++- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java b/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java index f7ed9c255bf8..8369bb136d1a 100644 --- a/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java +++ b/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java @@ -53,6 +53,8 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.packaging.artifacts.Artifact; +import com.intellij.packaging.impl.artifacts.ArtifactBySourceFileFinder; import com.intellij.util.ArrayUtil; import com.intellij.util.messages.MessageBusConnection; import org.apache.oro.text.regex.*; @@ -978,7 +980,15 @@ public class CompilerConfigurationImpl extends CompilerConfiguration implements } return extensionsString.toString(); } - + + public boolean isCompilableResourceFile(final Project project, final VirtualFile file) { + if (!isResourceFile(file)) { + return false; + } + final Collection artifacts = ArtifactBySourceFileFinder.getInstance(project).findArtifacts(file); + return artifacts.isEmpty(); + } + private static class CompiledPattern { @NotNull final Pattern fileName; @Nullable final Pattern dir; diff --git a/java/compiler/impl/src/com/intellij/compiler/actions/CompileAction.java b/java/compiler/impl/src/com/intellij/compiler/actions/CompileAction.java index 800adaa1b5f6..38f230f92997 100644 --- a/java/compiler/impl/src/com/intellij/compiler/actions/CompileAction.java +++ b/java/compiler/impl/src/com/intellij/compiler/actions/CompileAction.java @@ -26,14 +26,11 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vfs.VfsUtil; +import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.packaging.artifacts.Artifact; -import com.intellij.packaging.impl.artifacts.ArtifactBySourceFileFinder; import com.intellij.psi.*; import java.util.ArrayList; -import java.util.Collection; import java.util.List; public class CompileAction extends CompileActionBase { @@ -108,7 +105,8 @@ public class CompileAction extends CompileActionBase { else if (files.length == 1) { final VirtualFile file = files[0]; FileType fileType = file.getFileType(); - if (CompilerManager.getInstance(project).isCompilableFileType(fileType) || isCompilableResourceFile(project, compilerConfiguration, file)) { + if (CompilerManager.getInstance(project).isCompilableFileType(fileType) || compilerConfiguration + .isCompilableResourceFile(project, file)) { elementDescription = "'" + file.getName() + "'"; } else { @@ -135,7 +133,7 @@ public class CompileAction extends CompileActionBase { } private static String createPresentationText(String elementDescription) { - StringBuffer buffer = new StringBuffer(40); + StringBuilder buffer = new StringBuilder(40); buffer.append(ActionsBundle.actionText(IdeActions.ACTION_COMPILE)).append(" "); int length = elementDescription.length(); if (length > 23) { @@ -175,20 +173,12 @@ public class CompileAction extends CompileActionBase { } else { FileType fileType = file.getFileType(); - if (!(compilerManager.isCompilableFileType(fileType) || isCompilableResourceFile(project, compilerConfiguration, file))) { + if (!(compilerManager.isCompilableFileType(fileType) || compilerConfiguration.isCompilableResourceFile(project, file))) { continue; } } filesToCompile.add(file); } - return VfsUtil.toVirtualFileArray(filesToCompile); - } - - private static boolean isCompilableResourceFile(final Project project, final CompilerConfiguration compilerConfiguration, final VirtualFile file) { - if (!compilerConfiguration.isResourceFile(file)) { - return false; - } - final Collection artifacts = ArtifactBySourceFileFinder.getInstance(project).findArtifacts(file); - return artifacts.isEmpty(); + return VfsUtilCore.toVirtualFileArray(filesToCompile); } } \ No newline at end of file diff --git a/java/compiler/openapi/src/com/intellij/compiler/CompilerConfiguration.java b/java/compiler/openapi/src/com/intellij/compiler/CompilerConfiguration.java index 9aa97cf0e089..364379490852 100644 --- a/java/compiler/openapi/src/com/intellij/compiler/CompilerConfiguration.java +++ b/java/compiler/openapi/src/com/intellij/compiler/CompilerConfiguration.java @@ -54,6 +54,8 @@ public abstract class CompilerConfiguration { public abstract boolean isResourceFile(String path); + public abstract boolean isCompilableResourceFile(Project project, VirtualFile file); + public abstract void addResourceFilePattern(String namePattern) throws MalformedPatternException; public abstract boolean isAddNotNullAssertions(); diff --git a/plugins/junit/src/com/intellij/execution/junit/TestClassFilter.java b/plugins/junit/src/com/intellij/execution/junit/TestClassFilter.java index 9f9fb7bd054e..d8f78b4d6b6b 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestClassFilter.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestClassFilter.java @@ -59,7 +59,8 @@ public class TestClassFilter implements ClassFilter.ClassFilterWithScope { (aClass.isInheritor(myBase, true) || JUnitUtil.isTestClass(aClass))) { final CompilerConfiguration compilerConfiguration = CompilerConfiguration.getInstance(getProject()); final VirtualFile virtualFile = PsiUtilCore.getVirtualFile(aClass); - return !compilerConfiguration.isExcludedFromCompilation(virtualFile) && !compilerConfiguration.isResourceFile(virtualFile); + return !compilerConfiguration.isExcludedFromCompilation(virtualFile) && + (!compilerConfiguration.isResourceFile(virtualFile) || compilerConfiguration.isCompilableResourceFile(myProject, virtualFile)); } return false; }