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 42d09995d41c..d4b60924c2c2 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 @@ -7,12 +7,11 @@ import com.intellij.compiler.ant.Generator; import com.intellij.compiler.ant.taskdefs.Mkdir; import com.intellij.compiler.ant.taskdefs.Property; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.packaging.artifacts.Artifact; import com.intellij.packaging.artifacts.ArtifactManager; import com.intellij.packaging.elements.ArtifactAntGenerationContext; -import com.intellij.packaging.elements.ArtifactRootElement; +import com.intellij.packaging.impl.artifacts.ArtifactUtil; import gnu.trove.THashMap; import gnu.trove.THashSet; import org.jetbrains.annotations.NonNls; @@ -40,8 +39,7 @@ public class ArtifactAntGenerationContextImpl implements ArtifactAntGenerationCo myProject = project; myGenerationOptions = generationOptions; for (Artifact artifact : ArtifactManager.getInstance(project).getArtifacts()) { - final String outputPath = artifact.getOutputPath(); - if (!StringUtil.isEmpty(outputPath) && artifact.getRootElement() instanceof ArtifactRootElement) { + if (ArtifactUtil.shouldClearArtifactOutputBeforeRebuild(artifact)) { myArtifactsToClean.add(artifact); } } 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 ed75a4d87f02..0ab7972bf2e0 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 @@ -1,22 +1,25 @@ package com.intellij.compiler.ant.artifacts; import com.intellij.compiler.ant.BuildProperties; +import com.intellij.compiler.ant.Comment; import com.intellij.compiler.ant.GenerationOptions; import com.intellij.compiler.ant.Generator; -import com.intellij.compiler.ant.Comment; import com.intellij.compiler.ant.taskdefs.*; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; -import com.intellij.packaging.impl.artifacts.ArtifactUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.packaging.artifacts.Artifact; import com.intellij.packaging.artifacts.ArtifactManager; +import com.intellij.packaging.elements.ComplexPackagingElement; +import com.intellij.packaging.elements.CompositePackagingElement; import com.intellij.packaging.elements.PackagingElement; import com.intellij.packaging.elements.PackagingElementResolvingContext; +import com.intellij.packaging.impl.artifacts.ArtifactUtil; +import com.intellij.packaging.impl.artifacts.PackagingElementProcessor; import com.intellij.packaging.impl.elements.ArtifactPackagingElement; import com.intellij.packaging.impl.elements.ModuleOutputPackagingElement; -import com.intellij.util.Processor; import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; @@ -96,9 +99,14 @@ public class ArtifactsGenerator { private Target createArtifactTarget(Artifact artifact) { final StringBuilder depends = new StringBuilder(INIT_ARTIFACTS_TARGET); - //todo[nik] do not process content of included artifacts - ArtifactUtil.processPackagingElements(artifact, null, new Processor>() { - public boolean process(PackagingElement packagingElement) { + ArtifactUtil.processPackagingElements(artifact, null, new PackagingElementProcessor>() { + @Override + public boolean shouldProcessSubstitution(ComplexPackagingElement element) { + return !(element instanceof ArtifactPackagingElement); + } + + @Override + public boolean process(@NotNull List> parents, @NotNull PackagingElement packagingElement) { if (packagingElement instanceof ArtifactPackagingElement) { final Artifact included = ((ArtifactPackagingElement)packagingElement).findArtifact(myResolvingContext); if (included != null) { 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 d12aa6269431..ebe959ee1606 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 @@ -475,4 +475,9 @@ public class ArtifactUtil { element.removeChildren(toRemove); } + + public static boolean shouldClearArtifactOutputBeforeRebuild(Artifact artifact) { + final String outputPath = artifact.getOutputPath(); + return !StringUtil.isEmpty(outputPath) && artifact.getRootElement() instanceof ArtifactRootElement; + } } diff --git a/platform/lang-impl/src/com/intellij/conversion/ModuleSettings.java b/platform/lang-impl/src/com/intellij/conversion/ModuleSettings.java index 8b30ea156789..be8ed687bf70 100644 --- a/platform/lang-impl/src/com/intellij/conversion/ModuleSettings.java +++ b/platform/lang-impl/src/com/intellij/conversion/ModuleSettings.java @@ -25,6 +25,9 @@ public interface ModuleSettings extends ComponentManagerSettings { @NotNull Collection getFacetElements(@NotNull String facetTypeId); + @Nullable + Element getFacetElement(@NotNull String facetTypeId); + void setModuleType(@NotNull String moduleType); @NotNull diff --git a/platform/lang-impl/src/com/intellij/conversion/impl/ModuleSettingsImpl.java b/platform/lang-impl/src/com/intellij/conversion/impl/ModuleSettingsImpl.java index 2bb255a5c2b7..5f238066527b 100644 --- a/platform/lang-impl/src/com/intellij/conversion/impl/ModuleSettingsImpl.java +++ b/platform/lang-impl/src/com/intellij/conversion/impl/ModuleSettingsImpl.java @@ -13,6 +13,7 @@ import com.intellij.openapi.roots.impl.libraries.LibraryImpl; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VfsUtil; +import com.intellij.util.containers.ContainerUtil; import org.jdom.Element; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -64,6 +65,10 @@ public class ModuleSettingsImpl extends ComponentManagerSettingsImpl implements return elements; } + public Element getFacetElement(@NotNull String facetTypeId) { + return ContainerUtil.getFirstItem(getFacetElements(facetTypeId), null); + } + public void setModuleType(@NotNull String moduleType) { getRootElement().setAttribute(ModuleImpl.ELEMENT_TYPE, moduleType); } diff --git a/platform/lang-impl/src/com/intellij/ide/impl/convert/JDomConvertingUtil.java b/platform/lang-impl/src/com/intellij/ide/impl/convert/JDomConvertingUtil.java index 1d8420986889..ff3c9535285a 100644 --- a/platform/lang-impl/src/com/intellij/ide/impl/convert/JDomConvertingUtil.java +++ b/platform/lang-impl/src/com/intellij/ide/impl/convert/JDomConvertingUtil.java @@ -49,7 +49,17 @@ public class JDomConvertingUtil { public static String getOptionValue(Element element, String optionName) { return JDOMExternalizerUtil.readField(element, optionName); } - + + @Nullable + public static Element getSettingsElement(@Nullable Element element, String name) { + for (Element child : getChildren(element, "setting")) { + if (child.getAttributeValue("name").equals(name)) { + return child; + } + } + return null; + } + public static Condition createAttributeValueFilter(@NonNls final String name, @NonNls final String value) { return createAttributeValueFilter(name, Collections.singleton(value)); }