mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-87710: Cannot build artifact with "module production output" if module doesn't have production code
This commit is contained in:
+9
-3
@@ -23,6 +23,7 @@ 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.roots.ui.configuration.ModulesProvider;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.vfs.VfsUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
@@ -30,6 +31,8 @@ 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.packaging.impl.elements.ProductionModuleOutputElementType;
|
||||
import com.intellij.packaging.impl.elements.TestModuleOutputElementType;
|
||||
import com.intellij.util.CommonProcessors;
|
||||
import com.intellij.util.PathUtil;
|
||||
import com.intellij.util.Processor;
|
||||
@@ -101,13 +104,16 @@ public class JarFromModulesTemplate extends ArtifactTemplate {
|
||||
if (!includeTests) {
|
||||
orderEnumerator = orderEnumerator.productionOnly();
|
||||
}
|
||||
final OrderEnumerator enumerator = orderEnumerator.using(myContext.getModulesProvider()).withoutSdk().runtimeOnly().recursively();
|
||||
final ModulesProvider modulesProvider = myContext.getModulesProvider();
|
||||
final OrderEnumerator enumerator = orderEnumerator.using(modulesProvider).withoutSdk().runtimeOnly().recursively();
|
||||
enumerator.forEachLibrary(new CommonProcessors.CollectProcessor<Library>(libraries));
|
||||
enumerator.forEachModule(new Processor<Module>() {
|
||||
@Override
|
||||
public boolean process(Module module) {
|
||||
archive.addOrFindChild(factory.createModuleOutput(module));
|
||||
if (includeTests) {
|
||||
if (ProductionModuleOutputElementType.ELEMENT_TYPE.isSuitableModule(modulesProvider, module)) {
|
||||
archive.addOrFindChild(factory.createModuleOutput(module));
|
||||
}
|
||||
if (includeTests && TestModuleOutputElementType.ELEMENT_TYPE.isSuitableModule(modulesProvider, module)) {
|
||||
archive.addOrFindChild(factory.createTestModuleOutput(module));
|
||||
}
|
||||
return true;
|
||||
|
||||
+13
-1
@@ -20,6 +20,7 @@ import com.intellij.openapi.module.ModulePointer;
|
||||
import com.intellij.openapi.module.ModulePointerManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectBundle;
|
||||
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
|
||||
import com.intellij.packaging.artifacts.Artifact;
|
||||
import com.intellij.packaging.elements.CompositePackagingElement;
|
||||
import com.intellij.packaging.elements.PackagingElement;
|
||||
@@ -59,5 +60,16 @@ public abstract class ModuleOutputElementTypeBase<E extends ModuleOutputPackagin
|
||||
|
||||
protected abstract ModuleOutputPackagingElementBase createElement(@NotNull Project project, @NotNull ModulePointer pointer);
|
||||
|
||||
protected abstract List<Module> getSuitableModules(ArtifactEditorContext context);
|
||||
private List<Module> getSuitableModules(ArtifactEditorContext context) {
|
||||
ModulesProvider modulesProvider = context.getModulesProvider();
|
||||
ArrayList<Module> modules = new ArrayList<Module>();
|
||||
for (Module module : modulesProvider.getModules()) {
|
||||
if (isSuitableModule(modulesProvider, module)) {
|
||||
modules.add(module);
|
||||
}
|
||||
}
|
||||
return modules;
|
||||
}
|
||||
|
||||
public abstract boolean isSuitableModule(ModulesProvider modulesProvider, Module module);
|
||||
}
|
||||
|
||||
+3
-12
@@ -21,12 +21,9 @@ import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModulePointer;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
|
||||
import com.intellij.packaging.ui.ArtifactEditorContext;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
@@ -52,14 +49,8 @@ public class ProductionModuleOutputElementType extends ModuleOutputElementTypeBa
|
||||
return AllIcons.Nodes.ModuleOpen;
|
||||
}
|
||||
|
||||
protected List<Module> getSuitableModules(ArtifactEditorContext context) {
|
||||
ArrayList<Module> modules = new ArrayList<Module>();
|
||||
ModulesProvider modulesProvider = context.getModulesProvider();
|
||||
for (Module module : modulesProvider.getModules()) {
|
||||
if (modulesProvider.getRootModel(module).getSourceRootUrls(false).length > 0) {
|
||||
modules.add(module);
|
||||
}
|
||||
}
|
||||
return modules;
|
||||
@Override
|
||||
public boolean isSuitableModule(ModulesProvider modulesProvider, Module module) {
|
||||
return modulesProvider.getRootModel(module).getSourceRootUrls(false).length > 0;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-17
@@ -20,16 +20,12 @@ import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModulePointer;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ContentEntry;
|
||||
import com.intellij.openapi.roots.ModuleRootModel;
|
||||
import com.intellij.openapi.roots.SourceFolder;
|
||||
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
|
||||
import com.intellij.packaging.ui.ArtifactEditorContext;
|
||||
import com.intellij.util.PlatformIcons;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
@@ -56,19 +52,8 @@ public class TestModuleOutputElementType extends ModuleOutputElementTypeBase<Tes
|
||||
return PlatformIcons.TEST_SOURCE_FOLDER;
|
||||
}
|
||||
|
||||
protected List<Module> getSuitableModules(ArtifactEditorContext context) {
|
||||
ModulesProvider modulesProvider = context.getModulesProvider();
|
||||
ArrayList<Module> modules = new ArrayList<Module>();
|
||||
for (Module module : modulesProvider.getModules()) {
|
||||
if (hasTestSourceRoots(modulesProvider.getRootModel(module))) {
|
||||
modules.add(module);
|
||||
}
|
||||
}
|
||||
return modules;
|
||||
}
|
||||
|
||||
private static boolean hasTestSourceRoots(final ModuleRootModel rootModel) {
|
||||
for (ContentEntry entry : rootModel.getContentEntries()) {
|
||||
public boolean isSuitableModule(ModulesProvider modulesProvider, Module module) {
|
||||
for (ContentEntry entry : modulesProvider.getRootModel(module).getContentEntries()) {
|
||||
for (SourceFolder folder : entry.getSourceFolders()) {
|
||||
if (folder.isTestSource()) return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user