mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
decouple core file template logic from StdFileTypes.JAVA
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -35,4 +35,8 @@ public interface CreateFromTemplateHandler {
|
||||
Properties props) throws IncorrectOperationException;
|
||||
|
||||
boolean canCreate(final PsiDirectory[] dirs);
|
||||
boolean isNameRequired();
|
||||
String getErrorMessage();
|
||||
|
||||
Properties prepareProperties(Properties props);
|
||||
}
|
||||
|
||||
+16
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
+2
-3
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user