fixed 'create jar from modules' action for maven projects

This commit is contained in:
nik
2011-10-05 16:45:24 +04:00
parent 5d17ac6412
commit d6615bbbc0
2 changed files with 26 additions and 27 deletions
@@ -19,7 +19,9 @@ import com.intellij.CommonBundle;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.*;
import com.intellij.openapi.roots.OrderEnumerator;
import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.io.FileUtil;
@@ -29,9 +31,9 @@ import com.intellij.packaging.artifacts.ArtifactTemplate;
import com.intellij.packaging.elements.*;
import com.intellij.packaging.impl.elements.LibraryPackagingElement;
import com.intellij.packaging.impl.elements.ManifestFileUtil;
import com.intellij.util.CommonProcessors;
import com.intellij.util.PathUtil;
import com.intellij.util.Processor;
import com.intellij.util.containers.ContainerUtil;
import gnu.trove.THashSet;
import org.jetbrains.annotations.Nullable;
@@ -100,18 +102,14 @@ public class JarFromModulesTemplate extends ArtifactTemplate {
if (!includeTests) {
orderEnumerator = orderEnumerator.productionOnly();
}
orderEnumerator.using(myContext.getModulesProvider()).withoutSdk().runtimeOnly().recursively().forEach(new Processor<OrderEntry>() {
final OrderEnumerator enumerator = orderEnumerator.using(myContext.getModulesProvider()).withoutSdk().runtimeOnly().recursively();
enumerator.forEachLibrary(new CommonProcessors.CollectProcessor<Library>(libraries));
enumerator.forEachModule(new Processor<Module>() {
@Override
public boolean process(OrderEntry orderEntry) {
if (orderEntry instanceof ModuleSourceOrderEntry) {
Module module = orderEntry.getOwnerModule();
archive.addOrFindChild(factory.createModuleOutput(module));
if (includeTests) {
archive.addOrFindChild(factory.createTestModuleOutput(module));
}
}
else if (orderEntry instanceof LibraryOrderEntry) {
ContainerUtil.addIfNotNull(((LibraryOrderEntry)orderEntry).getLibrary(), libraries);
public boolean process(Module module) {
archive.addOrFindChild(factory.createModuleOutput(module));
if (includeTests) {
archive.addOrFindChild(factory.createTestModuleOutput(module));
}
return true;
}
@@ -245,19 +245,9 @@ abstract class OrderEnumeratorBase extends OrderEnumerator implements OrderEnume
if (myRecursively && entry instanceof ModuleOrderEntry) {
ModuleOrderEntry moduleOrderEntry = (ModuleOrderEntry)entry;
final Module module = moduleOrderEntry.getModule();
if (module != null) {
boolean processRecursively = true;
for (OrderEnumerationHandler handler : myCustomHandlers) {
if (!handler.shouldProcessRecursively(moduleOrderEntry)) {
processRecursively = false;
break;
}
}
if (processRecursively) {
processEntries(getRootModel(module), processor, processed, false);
continue;
}
if (module != null && shouldProcessRecursively(moduleOrderEntry)) {
processEntries(getRootModel(module), processor, processed, false);
continue;
}
}
@@ -268,6 +258,17 @@ abstract class OrderEnumeratorBase extends OrderEnumerator implements OrderEnume
}
}
private boolean shouldProcessRecursively(ModuleOrderEntry moduleOrderEntry) {
boolean processRecursively = true;
for (OrderEnumerationHandler handler : myCustomHandlers) {
if (!handler.shouldProcessRecursively(moduleOrderEntry)) {
processRecursively = false;
break;
}
}
return processRecursively;
}
@Override
public void forEachLibrary(@NotNull final Processor<Library> processor) {
forEach(new Processor<OrderEntry>() {
@@ -293,7 +294,7 @@ abstract class OrderEnumeratorBase extends OrderEnumerator implements OrderEnume
final Module module = ((ModuleSourceOrderEntry)orderEntry).getRootModel().getModule();
return processor.process(module);
}
else if (!myRecursively && orderEntry instanceof ModuleOrderEntry) {
else if (orderEntry instanceof ModuleOrderEntry && (!myRecursively || !shouldProcessRecursively((ModuleOrderEntry)orderEntry))) {
final Module module = ((ModuleOrderEntry)orderEntry).getModule();
if (module != null) {
return processor.process(module);