PsiDirectory (PackageWrapper aPackage, final VirtualFile sourceRoot) { final PsiDirectory[] directories = aPackage.getDirectories(); for (PsiDirectory directory : directories) { if (VfsUtilCore.isAncestor(sourceRoot, directory.getVirtualFile(), false)) { return directory; } } String qNameToCreate; try { qNameToCreate = qNameToCreateInSourceRoot(aPackage, sourceRoot); } catch (IncorrectOperationException e) { return null; } final String[] shortNames = qNameToCreate.split("\\."); PsiDirectory current = aPackage.getManager().findDirectory(sourceRoot); LOG.assertTrue(current != null); for (String shortName : shortNames) { PsiDirectory subdirectory = current.findSubdirectory(shortName); if (subdirectory == null) { return null; } current = subdirectory; } return current; }