From 1a4f566e4d78d9d74cb5a78aca8bc6efd2bb6e81 Mon Sep 17 00:00:00 2001 From: nik Date: Tue, 10 Nov 2009 10:50:30 +0300 Subject: [PATCH] option to run ant target before building artifact --- .../compiler/IncrementalArtifactsCompiler.java | 19 +++++++-- .../packaging/artifacts/ArtifactProperties.java | 3 ++ .../packaging/ui/ArtifactPropertiesEditor.java | 3 +- plugins/ant/src/META-INF/plugin.xml | 4 +- .../lang/ant/config/impl/TargetChooserDialog.java | 2 +- ...ntArtifactPostprocessingPropertiesProvider.java | 4 +- ...ntArtifactPreProcessingPropertiesProvider.java} | 12 +++--- .../AntArtifactProperties.java} | 46 ++++++++++++++++++---- .../AntArtifactPropertiesEditor.form} | 2 +- .../AntArtifactPropertiesEditor.java} | 14 ++++--- 10 files changed, 81 insertions(+), 28 deletions(-) copy plugins/ant/src/com/intellij/lang/ant/config/impl/{ => artifacts}/AntArtifactPostprocessingPropertiesProvider.java (92%) rename plugins/ant/src/com/intellij/lang/ant/config/impl/{AntArtifactPostprocessingPropertiesProvider.java => artifacts/AntArtifactPreProcessingPropertiesProvider.java} (76%) rename plugins/ant/src/com/intellij/lang/ant/config/impl/{AntArtifactPostprocessingProperties.java => artifacts/AntArtifactProperties.java} (66%) rename plugins/ant/src/com/intellij/lang/ant/config/impl/{AntArtifactPostprocessingPropertiesEditor.form => artifacts/AntArtifactPropertiesEditor.form} (96%) rename plugins/ant/src/com/intellij/lang/ant/config/impl/{AntArtifactPostprocessingPropertiesEditor.java => artifacts/AntArtifactPropertiesEditor.java} (85%) diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/IncrementalArtifactsCompiler.java b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/IncrementalArtifactsCompiler.java index afe139407a..ccbd35d427 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/IncrementalArtifactsCompiler.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/IncrementalArtifactsCompiler.java @@ -44,6 +44,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.newvfs.RefreshQueue; import com.intellij.packaging.artifacts.Artifact; import com.intellij.packaging.artifacts.ArtifactManager; +import com.intellij.packaging.artifacts.ArtifactProperties; import com.intellij.packaging.artifacts.ArtifactPropertiesProvider; import com.intellij.packaging.elements.CompositePackagingElement; import com.intellij.packaging.elements.PackagingElementResolvingContext; @@ -211,6 +212,11 @@ public class IncrementalArtifactsCompiler implements PackagingCompiler { } try { + onBuildStartedOrFinished(builderContext, false); + if (context.getMessageCount(CompilerMessageCategory.ERROR) > 0) { + return false; + } + int i = 0; for (final ProcessingItem item0 : items) { if (item0 instanceof MockProcessingItem) continue; @@ -276,7 +282,7 @@ public class IncrementalArtifactsCompiler implements PackagingCompiler { } } - onBuildFinished(builderContext); + onBuildStartedOrFinished(builderContext, true); } catch (ProcessCanceledException e) { throw e; @@ -354,13 +360,18 @@ public class IncrementalArtifactsCompiler implements PackagingCompiler { return outputPath; } - protected static void onBuildFinished(ArtifactsProcessingItemsBuilderContext context) - throws Exception { + private static void onBuildStartedOrFinished(ArtifactsProcessingItemsBuilderContext context, final boolean finished) throws Exception { final CompileContext compileContext = context.getCompileContext(); final Set artifacts = getAffectedArtifacts(compileContext); for (Artifact artifact : artifacts) { for (ArtifactPropertiesProvider provider : artifact.getPropertiesProviders()) { - artifact.getProperties(provider).onBuildFinished(artifact, compileContext); + final ArtifactProperties properties = artifact.getProperties(provider); + if (finished) { + properties.onBuildFinished(artifact, compileContext); + } + else { + properties.onBuildStarted(artifact, compileContext); + } } } } diff --git a/java/compiler/openapi/src/com/intellij/packaging/artifacts/ArtifactProperties.java b/java/compiler/openapi/src/com/intellij/packaging/artifacts/ArtifactProperties.java index 9a8d2bdab8..65d590b6a9 100644 --- a/java/compiler/openapi/src/com/intellij/packaging/artifacts/ArtifactProperties.java +++ b/java/compiler/openapi/src/com/intellij/packaging/artifacts/ArtifactProperties.java @@ -26,6 +26,9 @@ import org.jetbrains.annotations.NotNull; */ public abstract class ArtifactProperties implements PersistentStateComponent { + public void onBuildStarted(@NotNull Artifact artifact, @NotNull CompileContext compileContext) { + } + public void onBuildFinished(@NotNull Artifact artifact, @NotNull CompileContext compileContext) { } diff --git a/java/compiler/openapi/src/com/intellij/packaging/ui/ArtifactPropertiesEditor.java b/java/compiler/openapi/src/com/intellij/packaging/ui/ArtifactPropertiesEditor.java index 0c442bc267..f70f7dbdf3 100644 --- a/java/compiler/openapi/src/com/intellij/packaging/ui/ArtifactPropertiesEditor.java +++ b/java/compiler/openapi/src/com/intellij/packaging/ui/ArtifactPropertiesEditor.java @@ -22,7 +22,8 @@ import com.intellij.openapi.options.UnnamedConfigurable; */ public abstract class ArtifactPropertiesEditor implements UnnamedConfigurable { protected static final String VALIDATION_TAB = "Validation"; - protected static final String POSTPROCESSING_TAB = "Post-processing"; + protected static final String POST_PROCESSING_TAB = "Post-processing"; + protected static final String PRE_PROCESSING_TAB = "Pre-processing"; public abstract String getTabName(); diff --git a/plugins/ant/src/META-INF/plugin.xml b/plugins/ant/src/META-INF/plugin.xml index a9b52c655f..a5e3b197a3 100644 --- a/plugins/ant/src/META-INF/plugin.xml +++ b/plugins/ant/src/META-INF/plugin.xml @@ -16,7 +16,9 @@ - + + + diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/TargetChooserDialog.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/TargetChooserDialog.java index df7a61467b..96829249c3 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/TargetChooserDialog.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/TargetChooserDialog.java @@ -54,7 +54,7 @@ public class TargetChooserDialog extends DialogWrapper { private AntBuildTarget mySelectedTarget; private Tree myTree; - protected TargetChooserDialog(final Project project, final AntBuildTarget selectedTarget) { + public TargetChooserDialog(final Project project, final AntBuildTarget selectedTarget) { super(project, false); myProject = project; mySelectedTarget = selectedTarget; diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntArtifactPostprocessingPropertiesProvider.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPostprocessingPropertiesProvider.java similarity index 92% copy from plugins/ant/src/com/intellij/lang/ant/config/impl/AntArtifactPostprocessingPropertiesProvider.java copy to plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPostprocessingPropertiesProvider.java index 05cd6cb25c..4ff35bef72 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntArtifactPostprocessingPropertiesProvider.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPostprocessingPropertiesProvider.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.lang.ant.config.impl; +package com.intellij.lang.ant.config.impl.artifacts; import com.intellij.packaging.artifacts.ArtifactProperties; import com.intellij.packaging.artifacts.ArtifactPropertiesProvider; @@ -30,7 +30,7 @@ public class AntArtifactPostprocessingPropertiesProvider extends ArtifactPropert @NotNull public ArtifactProperties createProperties(@NotNull ArtifactType artifactType) { - return new AntArtifactPostprocessingProperties(); + return new AntArtifactProperties(true); } } diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntArtifactPostprocessingPropertiesProvider.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPreProcessingPropertiesProvider.java similarity index 76% rename from plugins/ant/src/com/intellij/lang/ant/config/impl/AntArtifactPostprocessingPropertiesProvider.java rename to plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPreProcessingPropertiesProvider.java index 05cd6cb25c..cf0a73956c 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntArtifactPostprocessingPropertiesProvider.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPreProcessingPropertiesProvider.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.lang.ant.config.impl; +package com.intellij.lang.ant.config.impl.artifacts; import com.intellij.packaging.artifacts.ArtifactProperties; import com.intellij.packaging.artifacts.ArtifactPropertiesProvider; @@ -23,14 +23,14 @@ import org.jetbrains.annotations.NotNull; /** * @author nik */ -public class AntArtifactPostprocessingPropertiesProvider extends ArtifactPropertiesProvider { - protected AntArtifactPostprocessingPropertiesProvider() { - super("ant-postprocessing"); +public class AntArtifactPreProcessingPropertiesProvider extends ArtifactPropertiesProvider { + public AntArtifactPreProcessingPropertiesProvider() { + super("ant-preprocessing"); } @NotNull + @Override public ArtifactProperties createProperties(@NotNull ArtifactType artifactType) { - return new AntArtifactPostprocessingProperties(); + return new AntArtifactProperties(false); } - } diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntArtifactPostprocessingProperties.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactProperties.java similarity index 66% rename from plugins/ant/src/com/intellij/lang/ant/config/impl/AntArtifactPostprocessingProperties.java rename to plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactProperties.java index afcfb64d52..4b620e86ea 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntArtifactPostprocessingProperties.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactProperties.java @@ -13,18 +13,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.lang.ant.config.impl; +package com.intellij.lang.ant.config.impl.artifacts; import com.intellij.lang.ant.config.*; +import com.intellij.lang.ant.config.impl.AntConfigurationImpl; +import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.impl.SimpleDataContext; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.compiler.CompileContext; +import com.intellij.openapi.compiler.CompilerMessageCategory; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.packaging.artifacts.Artifact; import com.intellij.packaging.artifacts.ArtifactProperties; -import com.intellij.packaging.ui.ArtifactPropertiesEditor; import com.intellij.packaging.ui.ArtifactEditorContext; +import com.intellij.packaging.ui.ArtifactPropertiesEditor; import com.intellij.util.xmlb.XmlSerializerUtil; import com.intellij.util.xmlb.annotations.Attribute; import com.intellij.util.xmlb.annotations.Tag; @@ -34,35 +37,64 @@ import org.jetbrains.annotations.Nullable; /** * @author nik */ -public class AntArtifactPostprocessingProperties extends ArtifactProperties { +public class AntArtifactProperties extends ArtifactProperties { private String myFileUrl; private String myTargetName; private boolean myEnabled; + private boolean myPostProcessing; + + public AntArtifactProperties() { + } + + public AntArtifactProperties(boolean postProcessing) { + myPostProcessing = postProcessing; + } public ArtifactPropertiesEditor createEditor(@NotNull ArtifactEditorContext context) { - return new AntArtifactPostprocessingPropertiesEditor(this, context.getProject()); + return new AntArtifactPropertiesEditor(this, context.getProject(), myPostProcessing); } - public AntArtifactPostprocessingProperties getState() { + public AntArtifactProperties getState() { return this; } @Override + public void onBuildStarted(@NotNull Artifact artifact, @NotNull CompileContext compileContext) { + if (!myPostProcessing) { + runAntTarget(compileContext, artifact); + } + } + + @Override public void onBuildFinished(@NotNull Artifact artifact, @NotNull final CompileContext compileContext) { + if (myPostProcessing) { + runAntTarget(compileContext, artifact); + } + } + + private void runAntTarget(CompileContext compileContext, Artifact artifact) { if (myEnabled) { final Project project = compileContext.getProject(); final AntBuildTarget target = findTarget(AntConfiguration.getInstance(project)); if (target != null) { + final DataContext dataContext = SimpleDataContext.getProjectContext(project); + if (!myPostProcessing) { + final boolean success = AntConfigurationImpl.executeTargetSynchronously(dataContext, target); + if (!success) { + compileContext.addMessage(CompilerMessageCategory.ERROR, "Cannot build artifact '" + artifact.getName() + "': ant target '" + target.getDisplayName() + "' failed with error", null, -1, -1); + } + return; + } ApplicationManager.getApplication().invokeLater(new Runnable() { public void run() { - target.run(SimpleDataContext.getProjectContext(project), AntBuildListener.NULL); + target.run(dataContext, AntBuildListener.NULL); } }); } } } - public void loadState(AntArtifactPostprocessingProperties state) { + public void loadState(AntArtifactProperties state) { XmlSerializerUtil.copyBean(state, this); } diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntArtifactPostprocessingPropertiesEditor.form b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.form similarity index 96% rename from plugins/ant/src/com/intellij/lang/ant/config/impl/AntArtifactPostprocessingPropertiesEditor.form rename to plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.form index 57aac96c7c..c0598dc29f 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntArtifactPostprocessingPropertiesEditor.form +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.form @@ -1,5 +1,5 @@ -
+ diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntArtifactPostprocessingPropertiesEditor.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.java similarity index 85% rename from plugins/ant/src/com/intellij/lang/ant/config/impl/AntArtifactPostprocessingPropertiesEditor.java rename to plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.java index 58cc42c189..f85bc361b6 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntArtifactPostprocessingPropertiesEditor.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.java @@ -13,10 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.lang.ant.config.impl; +package com.intellij.lang.ant.config.impl.artifacts; import com.intellij.lang.ant.config.AntBuildTarget; import com.intellij.lang.ant.config.AntConfiguration; +import com.intellij.lang.ant.config.impl.artifacts.AntArtifactProperties; +import com.intellij.lang.ant.config.impl.TargetChooserDialog; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.FixedSizeButton; import com.intellij.openapi.util.Comparing; @@ -30,17 +32,19 @@ import java.awt.event.ActionListener; /** * @author nik */ -public class AntArtifactPostprocessingPropertiesEditor extends ArtifactPropertiesEditor { - private final AntArtifactPostprocessingProperties myProperties; +public class AntArtifactPropertiesEditor extends ArtifactPropertiesEditor { + private final AntArtifactProperties myProperties; private final Project myProject; private JPanel myMainPanel; private JCheckBox myRunTargetCheckBox; private FixedSizeButton mySelectTargetButton; private AntBuildTarget myTarget; + private boolean myPostProcessing; - public AntArtifactPostprocessingPropertiesEditor(AntArtifactPostprocessingProperties properties, Project project) { + public AntArtifactPropertiesEditor(AntArtifactProperties properties, Project project, boolean postProcessing) { myProperties = properties; myProject = project; + myPostProcessing = postProcessing; mySelectTargetButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { selectTarget(); @@ -75,7 +79,7 @@ public class AntArtifactPostprocessingPropertiesEditor extends ArtifactPropertie } public String getTabName() { - return POSTPROCESSING_TAB; + return myPostProcessing ? POST_PROCESSING_TAB : PRE_PROCESSING_TAB; } public void apply() { -- 2.11.4.GIT