From 22e36e35613f0627751e7d94d0572cc18db59819 Mon Sep 17 00:00:00 2001 From: Nikolay Chashnikov Date: Mon, 7 Sep 2009 15:05:40 +0400 Subject: [PATCH] "Package File" action works for artifacts --- .../impl/artifacts/ArtifactUtil.java | 45 ++++++++++++++++--- .../elements/FileCopyPackagingElement.java | 1 + 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/ArtifactUtil.java b/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/ArtifactUtil.java index d27380b6267a..d6d498b7fef4 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/ArtifactUtil.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/ArtifactUtil.java @@ -2,13 +2,12 @@ package com.intellij.packaging.impl.artifacts; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.CompilerProjectExtension; -import com.intellij.packaging.impl.artifacts.PackagingElementProcessor; -import com.intellij.packaging.impl.artifacts.ParentElementProcessor; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.deployment.DeploymentUtil; import com.intellij.packaging.artifacts.Artifact; import com.intellij.packaging.artifacts.ArtifactManager; import com.intellij.packaging.artifacts.ArtifactProperties; @@ -256,13 +255,45 @@ public class ArtifactUtil { } public static Collection findArtifactsByFile(@NotNull final VirtualFile file, @NotNull Project project) { - final List artifacts = new ArrayList(); + final Collection> pairs = findContainingArtifactsWithOutputPaths(file, project); + final List result = new ArrayList(); + for (Pair pair : pairs) { + result.add(pair.getFirst()); + } + return result; + } + + public static Collection> findContainingArtifactsWithOutputPaths(@NotNull final VirtualFile file, @NotNull Project project) { + final List> artifacts = new ArrayList>(); for (final Artifact artifact : ArtifactManager.getInstance(project).getArtifacts()) { - processPackagingElements(artifact, PackagingElementFactoryImpl.FILE_COPY_ELEMENT_TYPE, new Processor() { - public boolean process(FileCopyPackagingElement fileCopyPackagingElement) { + processPackagingElements(artifact, PackagingElementFactoryImpl.FILE_COPY_ELEMENT_TYPE, new PackagingElementProcessor() { + @Override + public boolean process(@NotNull List> parents, + @NotNull FileCopyPackagingElement fileCopyPackagingElement) { final VirtualFile root = fileCopyPackagingElement.findFile(); - if (VfsUtil.isAncestor(root, file, false)) { - artifacts.add(artifact); + if (root != null && VfsUtil.isAncestor(root, file, false)) { + boolean isInArchive = false; + for (CompositePackagingElement parent : parents) { + if (parent instanceof ArchivePackagingElement) { + isInArchive = true; + break; + } + } + String path; + if (!isInArchive) { + final String relativePath; + if (root.equals(file)) { + relativePath = fileCopyPackagingElement.getOutputFileName(); + } + else { + relativePath = VfsUtil.getRelativePath(file, root, '/'); + } + path = DeploymentUtil.concatPaths(getPathFromRoot(parents, "/"), relativePath); + } + else { + path = null; + } + artifacts.add(Pair.create(artifact, path)); return false; } return true; diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/elements/FileCopyPackagingElement.java b/java/compiler/impl/src/com/intellij/packaging/impl/elements/FileCopyPackagingElement.java index ea59324d8467..2e0bacd9eb60 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/elements/FileCopyPackagingElement.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/elements/FileCopyPackagingElement.java @@ -85,6 +85,7 @@ public class FileCopyPackagingElement extends PackagingElement