From 9d4fea68973a492b45ef6957cd1488d911c60f1d Mon Sep 17 00:00:00 2001 From: nik Date: Fri, 25 Feb 2011 17:52:36 +0300 Subject: [PATCH] pass properties to pre/post ant tasks in generated build.xml for artifacts (IDEA-65683) --- .../ArtifactAntGenerationContextImpl.java | 10 +++++++++ .../ant/artifacts/ArtifactsGenerator.java | 2 +- .../compiler/ant/ChunkBuildExtension.java | 3 ++- .../ArtifactAntGenerationContext.java | 6 ++++++ .../artifacts/AntArtifactBuildExtension.java | 21 +++++++++++++------ .../impl/artifacts/AntArtifactProperties.java | 2 +- 6 files changed, 35 insertions(+), 9 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/compiler/ant/artifacts/ArtifactAntGenerationContextImpl.java b/java/compiler/impl/src/com/intellij/compiler/ant/artifacts/ArtifactAntGenerationContextImpl.java index 09eb042cb920..e70a69a75722 100644 --- a/java/compiler/impl/src/com/intellij/compiler/ant/artifacts/ArtifactAntGenerationContextImpl.java +++ b/java/compiler/impl/src/com/intellij/compiler/ant/artifacts/ArtifactAntGenerationContextImpl.java @@ -59,6 +59,16 @@ public class ArtifactAntGenerationContextImpl implements ArtifactAntGenerationCo } } + @Override + public Project getProject() { + return myProject; + } + + @Override + public GenerationOptions getGenerationOptions() { + return myGenerationOptions; + } + public String getConfiguredArtifactOutputProperty(@NotNull Artifact artifact) { return "artifact.output." + BuildProperties.convertName(artifact.getName()); } diff --git a/java/compiler/impl/src/com/intellij/compiler/ant/artifacts/ArtifactsGenerator.java b/java/compiler/impl/src/com/intellij/compiler/ant/artifacts/ArtifactsGenerator.java index 9f91d70ba623..3e160fbb40e5 100644 --- a/java/compiler/impl/src/com/intellij/compiler/ant/artifacts/ArtifactsGenerator.java +++ b/java/compiler/impl/src/com/intellij/compiler/ant/artifacts/ArtifactsGenerator.java @@ -176,7 +176,7 @@ public class ArtifactsGenerator { private void generateTasksForArtifacts(Artifact artifact, Target artifactTarget, final boolean preprocessing) { for (ChunkBuildExtension extension : ChunkBuildExtension.EP_NAME.getExtensions()) { - extension.generateTasksForArtifact(artifact, preprocessing, myResolvingContext.getProject(), myGenOptions, artifactTarget); + extension.generateTasksForArtifact(artifact, preprocessing, myContext, artifactTarget); } } diff --git a/java/compiler/openapi/src/com/intellij/compiler/ant/ChunkBuildExtension.java b/java/compiler/openapi/src/com/intellij/compiler/ant/ChunkBuildExtension.java index 5c3bdcdecd77..adb1cb07364e 100644 --- a/java/compiler/openapi/src/com/intellij/compiler/ant/ChunkBuildExtension.java +++ b/java/compiler/openapi/src/com/intellij/compiler/ant/ChunkBuildExtension.java @@ -21,6 +21,7 @@ import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.packaging.artifacts.Artifact; +import com.intellij.packaging.elements.ArtifactAntGenerationContext; import com.intellij.util.ArrayUtil; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; @@ -45,7 +46,7 @@ public abstract class ChunkBuildExtension { public void generateProperties(final PropertyFileGenerator generator, final Project project, final GenerationOptions options) { } - public void generateTasksForArtifact(Artifact artifact, boolean preprocessing, Project project, GenerationOptions genOptions, + public void generateTasksForArtifact(Artifact artifact, boolean preprocessing, ArtifactAntGenerationContext context, CompositeGenerator generator) { } diff --git a/java/compiler/openapi/src/com/intellij/packaging/elements/ArtifactAntGenerationContext.java b/java/compiler/openapi/src/com/intellij/packaging/elements/ArtifactAntGenerationContext.java index 04207d07a71f..9adf2bd89663 100644 --- a/java/compiler/openapi/src/com/intellij/packaging/elements/ArtifactAntGenerationContext.java +++ b/java/compiler/openapi/src/com/intellij/packaging/elements/ArtifactAntGenerationContext.java @@ -15,7 +15,9 @@ */ package com.intellij.packaging.elements; +import com.intellij.compiler.ant.GenerationOptions; import com.intellij.compiler.ant.Generator; +import com.intellij.openapi.project.Project; import com.intellij.packaging.artifacts.Artifact; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NonNls; @@ -38,4 +40,8 @@ public interface ArtifactAntGenerationContext { String getSubstitutedPath(@NonNls String path); String getArtifactOutputProperty(@NotNull Artifact artifact); + + Project getProject(); + + GenerationOptions getGenerationOptions(); } diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactBuildExtension.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactBuildExtension.java index 56e921d20e74..ee63fa363517 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactBuildExtension.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactBuildExtension.java @@ -16,11 +16,14 @@ package com.intellij.lang.ant.config.impl.artifacts; import com.intellij.compiler.ant.*; +import com.intellij.compiler.ant.taskdefs.Property; +import com.intellij.lang.ant.config.impl.BuildFileProperty; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.packaging.artifacts.Artifact; import com.intellij.packaging.artifacts.ArtifactPropertiesProvider; +import com.intellij.packaging.elements.ArtifactAntGenerationContext; import com.intellij.util.ArrayUtil; import com.intellij.util.PathUtil; import org.jetbrains.annotations.NotNull; @@ -30,9 +33,8 @@ import org.jetbrains.annotations.NotNull; */ public class AntArtifactBuildExtension extends ChunkBuildExtension { @Override - public void generateTasksForArtifact(Artifact artifact, - boolean preprocessing, Project project, - GenerationOptions genOptions, CompositeGenerator generator) { + public void generateTasksForArtifact(Artifact artifact, boolean preprocessing, ArtifactAntGenerationContext context, + CompositeGenerator generator) { final ArtifactPropertiesProvider provider; if (preprocessing) { provider = AntArtifactPreProcessingPropertiesProvider.getInstance(); @@ -45,9 +47,16 @@ public class AntArtifactBuildExtension extends ChunkBuildExtension { final String path = VfsUtil.urlToPath(properties.getFileUrl()); String fileName = PathUtil.getFileName(path); String dirPath = PathUtil.getParentPath(path); - final String relativePath = GenerationUtils.toRelativePath(dirPath, BuildProperties.getProjectBaseDir(project), BuildProperties.getProjectBaseDirProperty(), genOptions); - generator.add(new Tag("ant", Pair.create("antfile", fileName), Pair.create("target", properties.getTargetName()), - Pair.create("dir", relativePath))); + final String relativePath = GenerationUtils.toRelativePath(dirPath, BuildProperties.getProjectBaseDir(context.getProject()), + BuildProperties.getProjectBaseDirProperty(), context.getGenerationOptions()); + final Tag ant = new Tag("ant", Pair.create("antfile", fileName), Pair.create("target", properties.getTargetName()), + Pair.create("dir", relativePath)); + final String outputPath = BuildProperties.propertyRef(context.getArtifactOutputProperty(artifact)); + ant.add(new Property(AntArtifactProperties.ARTIFACT_OUTPUT_PATH_PROPERTY, outputPath)); + for (BuildFileProperty property : properties.getUserProperties()) { + ant.add(new Property(property.getPropertyName(), property.getPropertyValue())); + } + generator.add(ant); } } diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactProperties.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactProperties.java index a9afc66b0b1f..7fdd24b88e7b 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactProperties.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactProperties.java @@ -44,7 +44,7 @@ import java.util.List; * @author nik */ public class AntArtifactProperties extends ArtifactProperties { - @NonNls private static final String ARTIFACT_OUTPUT_PATH_PROPERTY = "artifact.output.path"; + @NonNls static final String ARTIFACT_OUTPUT_PATH_PROPERTY = "artifact.output.path"; private String myFileUrl; private String myTargetName; private boolean myEnabled;