From 94af3ebdffed24453a28e584478b0c1ec9fd6f56 Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Fri, 16 Mar 2012 14:07:23 +0400 Subject: [PATCH] ability to provide template for missed file quickfix (cherry picked from commit 789ad04) --- .../FileReferenceQuickFixProvider.java | 23 ++++++++++++++++++- .../impl/providers/FileReference.java | 4 ++++ 2 files changed, 26 insertions(+), 1 deletion(-) 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 402ca2fb4e8e..bfcb0efa774d 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 @@ -20,6 +20,8 @@ import com.intellij.codeInsight.daemon.impl.HighlightInfo; import com.intellij.codeInsight.daemon.impl.quickfix.QuickFixAction; import com.intellij.codeInsight.daemon.impl.quickfix.RenameFileFix; import com.intellij.codeInspection.LocalQuickFix; +import com.intellij.ide.fileTemplates.FileTemplate; +import com.intellij.ide.fileTemplates.FileTemplateManager; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.FileTypeManager; @@ -38,6 +40,7 @@ import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.io.IOException; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -143,7 +146,25 @@ public class FileReferenceQuickFixProvider { isdirectory = false; } - final CreateFileFix action = new CreateFileFix(isdirectory, newFileName, directory); + final CreateFileFix action = new CreateFileFix(isdirectory, newFileName, directory) { + @Override + protected String getFileText() { + if (!isdirectory) { + String templateName = reference.getNewFileTemplateName(); + if (templateName != null) { + FileTemplate template = FileTemplateManager.getInstance().getTemplate(templateName); + if (template != null) { + try { + return template.getText(FileTemplateManager.getInstance().getDefaultProperties()); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + } + } + return super.getFileText(); + } + }; QuickFixAction.registerQuickFixAction(info, action); return Arrays.asList(action); } diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReference.java b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReference.java index b8df84dcbdeb..daf16ea09850 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReference.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReference.java @@ -213,6 +213,10 @@ public class FileReference implements FileReferenceOwner, PsiPolyVariantReferenc return getCanonicalText(); } + public @Nullable String getNewFileTemplateName() { + return null; + } + private static boolean caseSensitivityApplies(PsiDirectory context, boolean caseSensitive) { VirtualFileSystem fs = context.getVirtualFile().getFileSystem(); return fs instanceof NewVirtualFileSystem && ((NewVirtualFileSystem)fs).isCaseSensitive() == caseSensitive;