mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
option to run ant target before building artifact
This commit is contained in:
+15
-4
@@ -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<Artifact> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,9 @@ import org.jetbrains.annotations.NotNull;
|
||||
*/
|
||||
public abstract class ArtifactProperties<S> implements PersistentStateComponent<S> {
|
||||
|
||||
public void onBuildStarted(@NotNull Artifact artifact, @NotNull CompileContext compileContext) {
|
||||
}
|
||||
|
||||
public void onBuildFinished(@NotNull Artifact artifact, @NotNull CompileContext compileContext) {
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -16,7 +16,9 @@
|
||||
<errorHandler implementation="com.intellij.diagnostic.ITNReporter"/>
|
||||
<renameHandler implementation="com.intellij.lang.ant.refactoring.AntRenameHandler"/>
|
||||
<stepsBeforeRunProvider implementation="com.intellij.lang.ant.config.impl.AntBeforeRunTaskProvider"/>
|
||||
<packaging.artifactPropertiesProvider implementation="com.intellij.lang.ant.config.impl.AntArtifactPostprocessingPropertiesProvider"/> <keymapExtension implementation="com.intellij.lang.ant.config.impl.AntKeymapExtension"/>
|
||||
<packaging.artifactPropertiesProvider implementation="com.intellij.lang.ant.config.impl.artifacts.AntArtifactPostprocessingPropertiesProvider"/>
|
||||
<packaging.artifactPropertiesProvider implementation="com.intellij.lang.ant.config.impl.artifacts.AntArtifactPreProcessingPropertiesProvider"/>
|
||||
<keymapExtension implementation="com.intellij.lang.ant.config.impl.AntKeymapExtension"/>
|
||||
<extendWordSelectionHandler implementation="com.intellij.lang.ant.AntPropertyRefSelectioner"/>
|
||||
<annotator language="ANT" implementationClass="com.intellij.lang.ant.validation.AntAnnotator"/>
|
||||
<lang.documentationProvider language="ANT" implementationClass="com.intellij.lang.ant.doc.AntDocumentationProvider"/>
|
||||
|
||||
@@ -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;
|
||||
|
||||
+2
-2
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.lang.ant.config.impl.artifacts;
|
||||
|
||||
import com.intellij.packaging.artifacts.ArtifactProperties;
|
||||
import com.intellij.packaging.artifacts.ArtifactPropertiesProvider;
|
||||
import com.intellij.packaging.artifacts.ArtifactType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class AntArtifactPreProcessingPropertiesProvider extends ArtifactPropertiesProvider {
|
||||
public AntArtifactPreProcessingPropertiesProvider() {
|
||||
super("ant-preprocessing");
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ArtifactProperties<?> createProperties(@NotNull ArtifactType artifactType) {
|
||||
return new AntArtifactProperties(false);
|
||||
}
|
||||
}
|
||||
+40
-8
@@ -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<AntArtifactPostprocessingProperties> {
|
||||
public class AntArtifactProperties extends ArtifactProperties<AntArtifactProperties> {
|
||||
private String myFileUrl;
|
||||
private String myTargetName;
|
||||
private boolean myEnabled;
|
||||
private boolean myPostProcessing;
|
||||
|
||||
public ArtifactPropertiesEditor createEditor(@NotNull ArtifactEditorContext context) {
|
||||
return new AntArtifactPostprocessingPropertiesEditor(this, context.getProject());
|
||||
public AntArtifactProperties() {
|
||||
}
|
||||
|
||||
public AntArtifactPostprocessingProperties getState() {
|
||||
public AntArtifactProperties(boolean postProcessing) {
|
||||
myPostProcessing = postProcessing;
|
||||
}
|
||||
|
||||
public ArtifactPropertiesEditor createEditor(@NotNull ArtifactEditorContext context) {
|
||||
return new AntArtifactPropertiesEditor(this, context.getProject(), myPostProcessing);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.lang.ant.config.impl.AntArtifactPostprocessingPropertiesEditor">
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.lang.ant.config.impl.artifacts.AntArtifactPropertiesEditor">
|
||||
<grid id="27dc6" binding="myMainPanel" layout-manager="GridLayoutManager" row-count="2" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
+9
-5
@@ -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() {
|
||||
Reference in New Issue
Block a user