package org.jetbrains.plugins.clojure.actions; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFileFactory; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.clojure.ClojureBundle; import org.jetbrains.plugins.clojure.ClojureIcons; import org.jetbrains.plugins.clojure.file.ClojureFileType; import org.jetbrains.plugins.clojure.lexer.ClojureTokenTypes; /** * @author ilyas */ public class NewClojureFileAction extends NewClojureActionBase { private static final String DUMMY = "dummy."; public NewClojureFileAction() { super(ClojureBundle.message("newfile.menu.action.text"), ClojureBundle.message("newfile.menu.action.description"), ClojureIcons.CLOJURE_ICON_16x16); } protected String getActionName(PsiDirectory directory, String newName) { return ClojureBundle.message("newfile.menu.action.text"); } protected String getDialogPrompt() { return ClojureBundle.message("newfile.dlg.prompt"); } protected String getDialogTitle() { return ClojureBundle.message("newfile.dlg.title"); } protected String getCommandName() { return ClojureBundle.message("newfile.command.name"); } @NotNull protected PsiElement[] doCreate(String newName, PsiDirectory directory) throws Exception { PsiFile file = createFileFromTemplate(directory, newName, "ClojureFile.clj"); PsiElement lastChild = file.getLastChild(); final Project project = directory.getProject(); if (lastChild != null && lastChild.getNode() != null && lastChild.getNode().getElementType() != ClojureTokenTypes.WHITESPACE) { file.add(createWhiteSpace(project)); } file.add(createWhiteSpace(project)); PsiElement child = file.getLastChild(); return child != null ? new PsiElement[]{file, child} : new PsiElement[]{file}; } private static PsiElement createWhiteSpace(Project project) { PsiFile dummyFile = PsiFileFactory.getInstance(project).createFileFromText(DUMMY + ClojureFileType.CLOJURE_FILE_TYPE.getDefaultExtension(), "\n"); return dummyFile.getFirstChild(); } }