@Nullable public static PsiDirectory selectDirectory( Project project, PsiDirectory[] packageDirectories, PsiDirectory defaultDirectory, String postfixToShow) { ProjectFileIndex projectFileIndex = getInstance(project).getFileIndex(); ArrayList<PsiDirectory> possibleDirs = new ArrayList<>(); for (PsiDirectory dir : packageDirectories) { if (!dir.isValid()) continue; if (!dir.isWritable()) continue; if (possibleDirs.contains(dir)) continue; if (!projectFileIndex.isInContent(dir.getVirtualFile())) continue; possibleDirs.add(dir); } if (possibleDirs.isEmpty()) return null; if (possibleDirs.size() == 1) return possibleDirs.get(0); if (getApplication().isUnitTestMode()) return possibleDirs.get(0); DirectoryChooser chooser = new DirectoryChooser(project); chooser.setTitle(message("title.choose.destination.directory")); chooser.fillList( possibleDirs.toArray(new PsiDirectory[possibleDirs.size()]), defaultDirectory, project, postfixToShow); return chooser.showAndGet() ? chooser.getSelectedDirectory() : null; }
private static boolean isWritablePackage(PsiPackage aPackage) { PsiDirectory[] directories = aPackage.getDirectories(); for (PsiDirectory directory : directories) { if (directory.isValid() && directory.isWritable()) { return true; } } return false; }
private static PsiDirectory getWritableModuleDirectory( @NotNull Query<VirtualFile> vFiles, @NotNull Module module, PsiManager manager) { for (VirtualFile vFile : vFiles) { if (ModuleUtil.findModuleForFile(vFile, module.getProject()) != module) continue; PsiDirectory directory = manager.findDirectory(vFile); if (directory != null && directory.isValid() && directory.isWritable()) { return directory; } } return null; }
public static List<PsiDirectory> getWritableDirectoryListDefault( @Nullable final PsiPackage context, final GlobalSearchScope scope, final PsiManager psiManager) { if (LOG.isDebugEnabled()) { LOG.debug( "Getting writable directory list for package '" + (context == null ? null : context.getQualifiedName()) + "', scope=" + scope); } final List<PsiDirectory> writableDirectoryList = new ArrayList<PsiDirectory>(); if (context != null) { for (PsiDirectory directory : context.getDirectories()) { if (LOG.isDebugEnabled()) { LOG.debug("Package directory: " + directory); } if (directory.isWritable() && scope.contains(directory.getVirtualFile())) { writableDirectoryList.add(directory); } } } else { for (VirtualFile root : ProjectRootManager.getInstance(psiManager.getProject()).getContentSourceRoots()) { PsiDirectory directory = psiManager.findDirectory(root); if (LOG.isDebugEnabled()) { LOG.debug("Root: " + root + ", directory: " + directory); } if (directory != null && directory.isWritable() && scope.contains(directory.getVirtualFile())) { writableDirectoryList.add(directory); } } } if (LOG.isDebugEnabled()) { LOG.debug("Result " + writableDirectoryList); } return writableDirectoryList; }