IDEA-53756: Excluded folders should not be copied into the artifact

This commit is contained in:
nik
2010-08-09 09:14:48 +04:00
parent d8763b414b
commit b3c72b8700
4 changed files with 29 additions and 9 deletions
@@ -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));
}
@@ -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<String> folders = StringUtil.split(relativeDirectoryPath, "/");
IncrementalCompilerInstructionCreator current = this;
@@ -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);
}
@@ -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;
}