root model: don't create synthetic entries for excluded output folders - 2

This commit is contained in:
nik
2013-10-30 11:08:28 +04:00
parent b8937b22b6
commit 6212b1dbae
19 changed files with 118 additions and 274 deletions
@@ -19,8 +19,6 @@ import com.intellij.openapi.roots.CompilerModuleExtension;
import com.intellij.openapi.roots.ContentEntry;
import com.intellij.openapi.roots.ExcludeFolder;
import com.intellij.openapi.roots.SourceFolder;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -55,7 +53,7 @@ public abstract class JavaContentEntryEditor extends ContentEntryEditor {
@Override
protected ExcludeFolder doAddExcludeFolder(@NotNull final VirtualFile file) {
final boolean isCompilerOutput = isCompilerOutput(file);
final boolean isCompilerOutput = isCompilerOutput(file.getUrl());
if (isCompilerOutput) {
myCompilerExtension.setExcludeOutput(true);
return null;
@@ -64,32 +62,26 @@ public abstract class JavaContentEntryEditor extends ContentEntryEditor {
}
@Override
protected void doRemoveExcludeFolder(@NotNull final ExcludeFolder excludeFolder) {
final VirtualFile file = excludeFolder.getFile();
if (file != null) {
if (isCompilerOutput(file)) {
myCompilerExtension.setExcludeOutput(false);
}
protected void doRemoveExcludeFolder(@NotNull final String excludeRootUrl) {
if (isCompilerOutput(excludeRootUrl)) {
myCompilerExtension.setExcludeOutput(false);
}
super.doRemoveExcludeFolder(excludeFolder);
super.doRemoveExcludeFolder(excludeRootUrl);
}
private boolean isCompilerOutput(@NotNull final VirtualFile file) {
final VirtualFile compilerOutputPath = myCompilerExtension.getCompilerOutputPath();
if (file.equals(compilerOutputPath)) {
private boolean isCompilerOutput(@NotNull final String fileUrl) {
if (fileUrl.equals(myCompilerExtension.getCompilerOutputUrl())) {
return true;
}
final VirtualFile compilerOutputPathForTests = myCompilerExtension.getCompilerOutputPathForTests();
if (file.equals(compilerOutputPathForTests)) {
if (fileUrl.equals(myCompilerExtension.getCompilerOutputUrlForTests())) {
return true;
}
final String path = file.getPath();
if (myCompilerExtension.isCompilerOutputPathInherited()) {
final ProjectStructureConfigurable instance = ProjectStructureConfigurable.getInstance(getModel().getModule().getProject());
final String compilerOutput = VfsUtil.urlToPath(instance.getProjectConfig().getCompilerOutputUrl());
if (FileUtil.pathsEqual(compilerOutput, path)) {
final String compilerOutputUrl = instance.getProjectConfig().getCompilerOutputUrl();
if (fileUrl.equals(compilerOutputUrl)) {
return true;
}
}
@@ -25,6 +25,7 @@ import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.pointers.VirtualFilePointer;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
@@ -78,14 +79,12 @@ public class ExcludeCompilerOutputPolicy implements DirectoryIndexExcludePolicy
return VirtualFilePointer.EMPTY_ARRAY;
}
if (extension.isCompilerOutputPathInherited()) {
result.add(CompilerProjectExtension.getInstance(myProject).getCompilerOutputPointer());
ContainerUtil.addIfNotNull(result, CompilerProjectExtension.getInstance(myProject).getCompilerOutputPointer());
}
else {
if (!extension.isExcludeOutput()) return VirtualFilePointer.EMPTY_ARRAY;
final VirtualFilePointer outputPath = extension.getCompilerOutputPointer();
if (outputPath != null) result.add(outputPath);
final VirtualFilePointer outputPathForTests = extension.getCompilerOutputForTestsPointer();
if (outputPathForTests != null) result.add(outputPathForTests);
ContainerUtil.addIfNotNull(result, extension.getCompilerOutputPointer());
ContainerUtil.addIfNotNull(result, extension.getCompilerOutputForTestsPointer());
}
return result.isEmpty() ? VirtualFilePointer.EMPTY_ARRAY : result.toArray(new VirtualFilePointer[result.size()]);
}