[artifact editor] don't suggest to put MANIFEST.MF file to a source root in Maven/Gradle projects (IDEA-99596)

...because it won't be copied to the output in such a case. For JPS projects it also makes sense to put MANIFEST.MF to a resource root if any.

GitOrigin-RevId: 9713c912e89bf0986f75d078db0ce36e7018dfec
This commit is contained in:
Nikolay Chashnikov
2022-06-17 18:57:46 +02:00
committed by intellij-monorepo-bot
parent f5a5f55dd9
commit 00873ba10e

View File

@@ -16,8 +16,9 @@ import com.intellij.openapi.fileChooser.FileChooser;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.OrderEnumerator;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
@@ -41,8 +42,11 @@ import com.intellij.psi.PsiClass;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.util.PsiMethodUtil;
import com.intellij.util.PathUtil;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.model.java.JavaResourceRootType;
import org.jetbrains.jps.model.java.JavaSourceRootType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -110,12 +114,19 @@ public final class ManifestFileUtil {
}
@Nullable
public static VirtualFile suggestManifestFileDirectory(@NotNull Project project, @Nullable Module module) {
OrderEnumerator enumerator = module != null ? OrderEnumerator.orderEntries(module) : OrderEnumerator.orderEntries(project);
final VirtualFile[] files = enumerator.withoutDepModules().withoutLibraries().withoutSdk().productionOnly().sources().getRoots();
if (files.length > 0) {
return files[0];
public static VirtualFile suggestManifestFileDirectory(@NotNull Project project, @Nullable Module selectedModule) {
Module[] modules = selectedModule != null ? new Module[] {selectedModule} : ModuleManager.getInstance(project).getModules();
VirtualFile resourceRoot = null;
VirtualFile sourceRoot = null;
for (Module module : modules) {
if (resourceRoot == null) {
resourceRoot = ContainerUtil.getFirstItem(ModuleRootManager.getInstance(module).getSourceRoots(JavaResourceRootType.RESOURCE));
}
if (ArtifactUtil.areResourceFilesFromSourceRootsCopiedToOutput(module) && sourceRoot == null)
sourceRoot = ContainerUtil.getFirstItem(ModuleRootManager.getInstance(module).getSourceRoots(JavaSourceRootType.SOURCE));
}
if (resourceRoot != null) return resourceRoot;
if (sourceRoot != null) return sourceRoot;
return suggestBaseDir(project, null);
}