From 60295133032e901d5348d17f2610d203953e188e Mon Sep 17 00:00:00 2001 From: Maxim Kropotov Date: Wed, 31 Jul 2019 14:12:02 +0300 Subject: [PATCH] js 'create file with exported' quickfix now creates intermediate directories (WEB-24660) GitOrigin-RevId: 6415b5bda2f99c37c33fd309046c9b48b64d639c --- .../FileReferenceQuickFixProvider.java | 36 +++++++++++++------ 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/quickFix/FileReferenceQuickFixProvider.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/quickFix/FileReferenceQuickFixProvider.java index de735c979b08..75d5ee304274 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/quickFix/FileReferenceQuickFixProvider.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/quickFix/FileReferenceQuickFixProvider.java @@ -72,25 +72,41 @@ public class FileReferenceQuickFixProvider { } } - @Nullable - Module module = containingFile == null ? null : ModuleUtilCore.findModuleForPsiElement(containingFile); if (reference.isLast()) { - List targetDirectories = getTargets(reference, module, newFileName, false); - if (targetDirectories.isEmpty()) return emptyList(); - - NewFileLocation location = new NewFileLocation(targetDirectories, getPathToReferencePart(reference), newFileName); + NewFileLocation location = getNewFileLocation(reference, newFileName, containingFile, false); + if (location == null) return emptyList(); return singletonList(new MyCreateFileFix(element, location, reference.getNewFileTemplateName())); } else { - List targetDirectories = getTargets(reference, module, newFileName, true); - if (targetDirectories.isEmpty()) return emptyList(); - - NewFileLocation location = new NewFileLocation(targetDirectories, getPathToReferencePart(reference), newFileName); + NewFileLocation location = getNewFileLocation(reference, newFileName, containingFile, true); + if (location == null) return emptyList(); return singletonList(new CreateDirectoryPathFix(element, location)); } } + @Nullable + public static NewFileLocation getNewFileLocation(@NotNull FileReference reference, + String newFileName, + boolean isDirectory) { + return getNewFileLocation(reference, newFileName, reference.getElement().getContainingFile(), isDirectory); + } + + @Nullable + private static NewFileLocation getNewFileLocation(@NotNull FileReference reference, + String newFileName, + PsiFile containingFile, + boolean isDirectory) { + @Nullable + Module module = ModuleUtilCore.findModuleForPsiElement(containingFile); + + List targetDirectories = getTargets(reference, module, newFileName, isDirectory); + if (targetDirectories.isEmpty()) { + return null; + } + return new NewFileLocation(targetDirectories, getPathToReferencePart(reference), newFileName); + } + @NotNull private static List getTargets(@NotNull FileReference reference, @Nullable Module module,