diff --git a/java/java-impl/src/com/intellij/ide/fileTemplates/JavaCreateFromTemplateHandler.java b/java/java-impl/src/com/intellij/ide/fileTemplates/JavaCreateFromTemplateHandler.java index 56556548f0e4..7507f9dfd68b 100644 --- a/java/java-impl/src/com/intellij/ide/fileTemplates/JavaCreateFromTemplateHandler.java +++ b/java/java-impl/src/com/intellij/ide/fileTemplates/JavaCreateFromTemplateHandler.java @@ -15,6 +15,7 @@ */ package com.intellij.ide.fileTemplates; +import com.intellij.ide.IdeBundle; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.fileTypes.ex.FileTypeManagerEx; @@ -108,6 +109,26 @@ public class JavaCreateFromTemplateHandler implements CreateFromTemplateHandler return false; } + @Override + public boolean isNameRequired() { + return false; + } + + @Override + public String getErrorMessage() { + return IdeBundle.message("title.cannot.create.class"); + } + + @Override + public Properties prepareProperties(Properties props) { + String packageName = props.getProperty(FileTemplate.ATTRIBUTE_PACKAGE_NAME); + if(packageName == null || packageName.length() == 0){ + props = new Properties(props); + props.setProperty(FileTemplate.ATTRIBUTE_PACKAGE_NAME, FileTemplate.ATTRIBUTE_PACKAGE_NAME); + } + return props; + } + public static boolean canCreate(PsiDirectory dir) { return JavaDirectoryService.getInstance().getPackage(dir) != null; } diff --git a/platform/lang-impl/src/com/intellij/ide/fileTemplates/CreateFromTemplateHandler.java b/platform/lang-impl/src/com/intellij/ide/fileTemplates/CreateFromTemplateHandler.java index 2caae4e51a95..0eb494ca6d3e 100644 --- a/platform/lang-impl/src/com/intellij/ide/fileTemplates/CreateFromTemplateHandler.java +++ b/platform/lang-impl/src/com/intellij/ide/fileTemplates/CreateFromTemplateHandler.java @@ -35,4 +35,8 @@ public interface CreateFromTemplateHandler { Properties props) throws IncorrectOperationException; boolean canCreate(final PsiDirectory[] dirs); + boolean isNameRequired(); + String getErrorMessage(); + + Properties prepareProperties(Properties props); } diff --git a/platform/lang-impl/src/com/intellij/ide/fileTemplates/DefaultCreateFromTemplateHandler.java b/platform/lang-impl/src/com/intellij/ide/fileTemplates/DefaultCreateFromTemplateHandler.java index 91bfa6dda7b9..bf61fb7d5c3a 100644 --- a/platform/lang-impl/src/com/intellij/ide/fileTemplates/DefaultCreateFromTemplateHandler.java +++ b/platform/lang-impl/src/com/intellij/ide/fileTemplates/DefaultCreateFromTemplateHandler.java @@ -16,6 +16,7 @@ package com.intellij.ide.fileTemplates; +import com.intellij.ide.IdeBundle; import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiDirectory; @@ -67,4 +68,19 @@ public class DefaultCreateFromTemplateHandler implements CreateFromTemplateHandl public boolean canCreate(final PsiDirectory[] dirs) { return true; } + + @Override + public boolean isNameRequired() { + return true; + } + + @Override + public String getErrorMessage() { + return IdeBundle.message("title.cannot.create.file"); + } + + @Override + public Properties prepareProperties(Properties props) { + return props; + } } diff --git a/platform/lang-impl/src/com/intellij/ide/fileTemplates/FileTemplateUtil.java b/platform/lang-impl/src/com/intellij/ide/fileTemplates/FileTemplateUtil.java index eab211ad86d0..d23ba3acea8f 100644 --- a/platform/lang-impl/src/com/intellij/ide/fileTemplates/FileTemplateUtil.java +++ b/platform/lang-impl/src/com/intellij/ide/fileTemplates/FileTemplateUtil.java @@ -279,13 +279,8 @@ public class FileTemplateUtil{ props.setProperty(dummyRef, ""); } - if (template.isTemplateOfType(StdFileTypes.JAVA)){ - String packageName = props.getProperty(FileTemplate.ATTRIBUTE_PACKAGE_NAME); - if(packageName == null || packageName.length() == 0){ - props = new Properties(props); - props.setProperty(FileTemplate.ATTRIBUTE_PACKAGE_NAME, FileTemplate.ATTRIBUTE_PACKAGE_NAME); - } - } + final CreateFromTemplateHandler handler = findHandler(template); + props = handler.prepareProperties(props); final Properties props_ = props; String mergedText = ClassLoaderUtil.runWithClassLoader(classLoader != null ? classLoader : FileTemplateUtil.class.getClassLoader(), @@ -304,7 +299,6 @@ public class FileTemplateUtil{ ApplicationManager.getApplication().runWriteAction(new Runnable(){ public void run(){ try{ - CreateFromTemplateHandler handler = findHandler(template); result [0] = handler.createFromTemplate(project, directory, fileName, template, templateText, finalProps); } catch (Exception ex){ @@ -322,7 +316,7 @@ public class FileTemplateUtil{ return result[0]; } - private static CreateFromTemplateHandler findHandler(final FileTemplate template) { + public static CreateFromTemplateHandler findHandler(final FileTemplate template) { for(CreateFromTemplateHandler handler: Extensions.getExtensions(CreateFromTemplateHandler.EP_NAME)) { if (handler.handlesTemplate(template)) { return handler; diff --git a/platform/lang-impl/src/com/intellij/ide/fileTemplates/ui/CreateFromTemplateDialog.java b/platform/lang-impl/src/com/intellij/ide/fileTemplates/ui/CreateFromTemplateDialog.java index aaa153d3161e..a73db7bcf071 100644 --- a/platform/lang-impl/src/com/intellij/ide/fileTemplates/ui/CreateFromTemplateDialog.java +++ b/platform/lang-impl/src/com/intellij/ide/fileTemplates/ui/CreateFromTemplateDialog.java @@ -22,7 +22,6 @@ import com.intellij.ide.fileTemplates.FileTemplate; import com.intellij.ide.fileTemplates.FileTemplateManager; import com.intellij.ide.fileTemplates.FileTemplateUtil; import com.intellij.ide.fileTemplates.actions.AttributesDefaults; -import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.Messages; @@ -65,7 +64,7 @@ public class CreateFromTemplateDialog extends DialogWrapper { myDefaultProperties = defaultProperties == null ? FileTemplateManager.getInstance().getDefaultProperties() : defaultProperties; FileTemplateUtil.fillDefaultProperties(myDefaultProperties, directory); - boolean mustEnterName = !myTemplate.isTemplateOfType(StdFileTypes.JAVA); + boolean mustEnterName = FileTemplateUtil.findHandler(template).isNameRequired(); if (attributesDefaults != null && attributesDefaults.isFixedName()) { myDefaultProperties.setProperty(FileTemplate.ATTRIBUTE_NAME, attributesDefaults.getDefaultFileName()); mustEnterName = false; @@ -134,7 +133,7 @@ public class CreateFromTemplateDialog extends DialogWrapper { } private String getErrorMessage() { - return myTemplate.isTemplateOfType(StdFileTypes.JAVA) ? IdeBundle.message("title.cannot.create.class") : IdeBundle.message("title.cannot.create.file"); + return FileTemplateUtil.findHandler(myTemplate).getErrorMessage(); } @Nullable