ability to provide template for missed file quickfix (cherry picked from commit 789ad04)

This commit is contained in:
Maxim.Mossienko
2012-03-16 14:13:12 +04:00
parent a71fdfb969
commit 94af3ebdff
2 changed files with 26 additions and 1 deletions
@@ -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);
}
@@ -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;