diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/CopyToDirectoryInstructionCreator.java b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/CopyToDirectoryInstructionCreator.java index 12caefa285bd..3043468e1f44 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/CopyToDirectoryInstructionCreator.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/CopyToDirectoryInstructionCreator.java @@ -40,7 +40,7 @@ public class CopyToDirectoryInstructionCreator extends IncrementalCompilerInstru myContext.addDestination(file, new ExplodedDestinationInfo(myOutputPath + "/" + outputFileName, outputChild(outputFileName))); } - public IncrementalCompilerInstructionCreator subFolder(@NotNull String directoryName) { + public CopyToDirectoryInstructionCreator subFolder(@NotNull String directoryName) { return new CopyToDirectoryInstructionCreator(myContext, myOutputPath + "/" + directoryName, outputChild(directoryName)); } diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/IncrementalCompilerInstructionCreatorBase.java b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/IncrementalCompilerInstructionCreatorBase.java index 05b02e4c57fd..6ecdf472bdc2 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/IncrementalCompilerInstructionCreatorBase.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/IncrementalCompilerInstructionCreatorBase.java @@ -15,11 +15,13 @@ */ package com.intellij.packaging.impl.compiler; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.packaging.elements.PackagingFileFilter; import com.intellij.openapi.fileTypes.FileTypeManager; +import com.intellij.openapi.roots.ProjectFileIndex; +import com.intellij.openapi.roots.ProjectRootManager; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.packaging.elements.IncrementalCompilerInstructionCreator; +import com.intellij.packaging.elements.PackagingFileFilter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -40,23 +42,41 @@ public abstract class IncrementalCompilerInstructionCreatorBase implements Incre } public void addDirectoryCopyInstructions(@NotNull VirtualFile directory, @Nullable PackagingFileFilter filter) { + ProjectFileIndex index = ProjectRootManager.getInstance(myContext.getCompileContext().getProject()).getFileIndex(); + final boolean copyExcluded = index.isIgnored(directory); + collectInstructionsRecursively(directory, filter, index, FileTypeManager.getInstance(), copyExcluded); + } + + private void collectInstructionsRecursively(VirtualFile directory, + PackagingFileFilter filter, + ProjectFileIndex index, + final FileTypeManager fileTypeManager, + boolean copyExcluded) { final VirtualFile[] children = directory.getChildren(); if (children != null) { - final FileTypeManager fileTypeManager = FileTypeManager.getInstance(); for (VirtualFile child : children) { - if (!fileTypeManager.isFileIgnored(child.getName()) - && (filter == null || filter.accept(child, myContext.getCompileContext()))) { + if (copyExcluded) { + if (fileTypeManager.isFileIgnored(child.getName())) continue; + } + else { + if (index.isIgnored(child)) continue; + } + + if ((filter == null || filter.accept(child, myContext.getCompileContext()))) { if (!child.isDirectory()) { addFileCopyInstruction(child, child.getName()); } else { - subFolder(child.getName()).addDirectoryCopyInstructions(child, filter); + subFolder(child.getName()).collectInstructionsRecursively(child, filter, index, fileTypeManager, copyExcluded); } } } } } + @Override + public abstract IncrementalCompilerInstructionCreatorBase subFolder(@NotNull String directoryName); + public IncrementalCompilerInstructionCreator subFolderByRelativePath(@NotNull String relativeDirectoryPath) { final List folders = StringUtil.split(relativeDirectoryPath, "/"); IncrementalCompilerInstructionCreator current = this; diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/PackIntoArchiveInstructionCreator.java b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/PackIntoArchiveInstructionCreator.java index cfeb4b1646d9..c51b8e703e5b 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/PackIntoArchiveInstructionCreator.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/PackIntoArchiveInstructionCreator.java @@ -49,7 +49,7 @@ public class PackIntoArchiveInstructionCreator extends IncrementalCompilerInstru return myPathInJar.length() == 0 ? fileName : myPathInJar + "/" + fileName; } - public IncrementalCompilerInstructionCreator subFolder(@NotNull String directoryName) { + public PackIntoArchiveInstructionCreator subFolder(@NotNull String directoryName) { return new PackIntoArchiveInstructionCreator(myContext, myJarInfo, childPathInJar(directoryName), myJarDestination); } diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/SkipAllInstructionCreator.java b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/SkipAllInstructionCreator.java index 712f56e299f0..b7d409f9c970 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/SkipAllInstructionCreator.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/SkipAllInstructionCreator.java @@ -30,7 +30,7 @@ public class SkipAllInstructionCreator extends IncrementalCompilerInstructionCre public void addFileCopyInstruction(@NotNull VirtualFile file, @NotNull String outputFileName) { } - public IncrementalCompilerInstructionCreator subFolder(@NotNull String directoryName) { + public SkipAllInstructionCreator subFolder(@NotNull String directoryName) { return this; }