IDEA-27486 Make file templates per-project: fixing clients

This commit is contained in:
Dmitry Avdeev
2014-12-12 13:48:27 +03:00
parent d604a5d3a5
commit deeb381d45
24 changed files with 48 additions and 48 deletions
@@ -249,7 +249,7 @@ public class SaveProjectAsTemplateAction extends AnAction {
Project project,
Map<String, String> parameters) throws IOException {
String text = VfsUtilCore.loadText(virtualFile);
final FileTemplate template = FileTemplateManager.getInstance().getDefaultTemplate(FileTemplateManager.FILE_HEADER_TEMPLATE_NAME);
final FileTemplate template = FileTemplateManager.getInstance(project).getDefaultTemplate(FileTemplateManager.FILE_HEADER_TEMPLATE_NAME);
final String templateText = template.getText();
final Pattern pattern = FileHeaderChecker.getTemplatePattern(template, project, new TIntObjectHashMap<String>());
String result = convertTemplates(text, pattern, templateText);
@@ -262,7 +262,7 @@ public class TemplateModuleBuilder extends ModuleBuilder {
return null;
}
}
Properties properties = FileTemplateManager.getInstance().getDefaultProperties();
Properties properties = FileTemplateManager.getDefaultInstance().getDefaultProperties();
for (WizardInputField field : myAdditionalFields) {
properties.putAll(field.getValues());
}
@@ -26,6 +26,7 @@ import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.descriptors.*;
import org.jetbrains.annotations.Nullable;
@@ -56,8 +57,8 @@ public class ConfigFileFactoryImpl extends ConfigFileFactory {
return new ConfigFileContainerImpl(project, metaDataProvider, (ConfigFileInfoSetImpl)configuration);
}
private static String getText(final String templateName) throws IOException {
final FileTemplateManager templateManager = FileTemplateManager.getInstance();
private static String getText(final String templateName, Project project) throws IOException {
final FileTemplateManager templateManager = FileTemplateManager.getInstance(project);
final FileTemplate template = templateManager.getJ2eeTemplate(templateName);
if (template == null) {
return "";
@@ -73,7 +74,7 @@ public class ConfigFileFactoryImpl extends ConfigFileFactory {
@Nullable
private VirtualFile createFileFromTemplate(@Nullable final Project project, String url, final String templateName, final boolean forceNew) {
final LocalFileSystem fileSystem = LocalFileSystem.getInstance();
final File file = new File(VfsUtil.urlToPath(url));
final File file = new File(VfsUtilCore.urlToPath(url));
VirtualFile existingFile = fileSystem.refreshAndFindFileByIoFile(file);
if (existingFile != null) {
existingFile.refresh(false, false);
@@ -86,7 +87,7 @@ public class ConfigFileFactoryImpl extends ConfigFileFactory {
return existingFile;
}
try {
String text = getText(templateName);
String text = getText(templateName, project);
final VirtualFile childData;
if (existingFile == null || existingFile.isDirectory()) {
final VirtualFile virtualFile;
@@ -112,7 +112,7 @@ public abstract class JavaTestFramework implements TestFramework {
public abstract char getMnemonic();
public PsiMethod createSetUpPatternMethod(JVMElementFactory factory) {
final FileTemplate template = FileTemplateManager.getInstance().getCodeTemplate(getSetUpMethodFileTemplateDescriptor().getFileName());
final FileTemplate template = FileTemplateManager.getDefaultInstance().getCodeTemplate(getSetUpMethodFileTemplateDescriptor().getFileName());
final String templateText = StringUtil.replace(StringUtil.replace(template.getText(), "${BODY}\n", ""), "${NAME}", "setUp");
return factory.createMethodFromText(templateText, null);
}
@@ -36,7 +36,7 @@ public class FileTemplatesTest extends IdeaTestCase {
final File customInclude = new File(testsDir, customIncludeFileName);
final String includeText = FileUtil.loadFile(customInclude, FileTemplate.ourEncoding);
final FileTemplateManager templateManager = FileTemplateManager.getInstance();
final FileTemplateManager templateManager = FileTemplateManager.getInstance(getProject());
final ArrayList<FileTemplate> originalIncludes = new ArrayList<FileTemplate>(Arrays.asList(templateManager.getAllPatterns()));
try {
// configure custom include
@@ -94,7 +94,7 @@ public class FileTemplatesTest extends IdeaTestCase {
}
public void testFindFileByUrl() throws Exception {
FileTemplate catchBodyTemplate = FileTemplateManager.getInstance().getCodeTemplate(JavaTemplateUtil.TEMPLATE_CATCH_BODY);
FileTemplate catchBodyTemplate = FileTemplateManager.getInstance(getProject()).getCodeTemplate(JavaTemplateUtil.TEMPLATE_CATCH_BODY);
assertNotNull(catchBodyTemplate);
}
@@ -107,7 +107,7 @@ public class FileTemplatesTest extends IdeaTestCase {
public void "test collect undefined attribute names from included templates"() {
def included = addTestTemplate("included", '${ABC} ${DEF}')
assert included == FileTemplateManager.instance.getTemplate("included.java")
assert included == FileTemplateManager.getInstance(getProject()).getTemplate("included.java")
FileTemplate template = addTestTemplate("myclass", '#parse("included.java") ${DEF} ${NAME}')
Properties properties = new Properties()
@@ -132,12 +132,12 @@ public class FileTemplatesTest extends IdeaTestCase {
PsiClass psiClass = JavaDirectoryService.getInstance().createClass(psiDirectory, "XXX", name);
assertNotNull(psiClass);
assertEquals("public class XXX {\n}", psiClass.getContainingFile().getText());
FileTemplateManager.getInstance().removeTemplate(template);
FileTemplateManager.getInstance(getProject()).removeTemplate(template);
}
private FileTemplate addTestTemplate(String name, String text) {
FileTemplate template = FileTemplateManager.getInstance().addTemplate(name, "java");
disposeOnTearDown({ FileTemplateManager.getInstance().removeTemplate(template) } as Disposable)
FileTemplate template = FileTemplateManager.getInstance(getProject()).addTemplate(name, "java");
disposeOnTearDown({ FileTemplateManager.getInstance(getProject()).removeTemplate(template) } as Disposable)
template.setText(text);
template
}
@@ -181,7 +181,7 @@ public class CreateHtmlDescriptionFix implements LocalQuickFix, Iconable {
descrRoot = descrRoot.createSubdirectory(myFilename);
}
}
final FileTemplate descrTemplate = FileTemplateManager.getInstance().getJ2eeTemplate(TEMPLATE_NAME);
final FileTemplate descrTemplate = FileTemplateManager.getInstance(myModule.getProject()).getJ2eeTemplate(TEMPLATE_NAME);
final PsiElement template =
FileTemplateUtil.createFromTemplate(descrTemplate, getNewFileName(), null, descrRoot);
if (template instanceof PsiFile) {
@@ -104,9 +104,9 @@ public class AppEngineSupportProvider extends FrameworkSupportInModuleProvider {
@Nullable
public static VirtualFile createFileFromTemplate(final String templateName, final VirtualFile parent, final String fileName) {
parent.refresh(false, false);
final FileTemplate template = FileTemplateManager.getInstance().getJ2eeTemplate(templateName);
final FileTemplate template = FileTemplateManager.getDefaultInstance().getJ2eeTemplate(templateName);
try {
final String text = template.getText(FileTemplateManager.getInstance().getDefaultProperties());
final String text = template.getText(FileTemplateManager.getDefaultInstance().getDefaultProperties());
VirtualFile file = parent.findChild(fileName);
if (file == null) {
file = parent.createChildData(AppEngineSupportProvider.class, fileName);
@@ -236,7 +236,7 @@ public class GradleModuleBuilder extends AbstractExternalModuleBuilder<GradlePro
private static void saveFile(@NotNull VirtualFile file, @NotNull String templateName, @Nullable Map templateAttributes)
throws ConfigurationException {
FileTemplateManager manager = FileTemplateManager.getInstance();
FileTemplateManager manager = FileTemplateManager.getDefaultInstance();
FileTemplate template = manager.getInternalTemplate(templateName);
try {
VfsUtil.saveText(file, templateAttributes != null ? template.getText(templateAttributes) : template.getText());
@@ -251,7 +251,7 @@ public class GradleModuleBuilder extends AbstractExternalModuleBuilder<GradlePro
private static void appendToFile(@NotNull VirtualFile file, @NotNull String templateName, @Nullable Map templateAttributes)
throws ConfigurationException {
FileTemplateManager manager = FileTemplateManager.getInstance();
FileTemplateManager manager = FileTemplateManager.getDefaultInstance();
FileTemplate template = manager.getInternalTemplate(templateName);
try {
VfsUtil.saveText(file, VfsUtilCore.loadText(file) +
@@ -82,11 +82,11 @@ public class GroovyTemplatesFactory implements FileTemplateGroupDescriptorFactor
@NotNull String templateName,
boolean allowReformatting,
@NonNls String... parameters) throws IncorrectOperationException {
final FileTemplate template = FileTemplateManager.getInstance().getInternalTemplate(templateName);
final FileTemplate template = FileTemplateManager.getInstance(directory.getProject()).getInternalTemplate(templateName);
Project project = directory.getProject();
Properties properties = new Properties(FileTemplateManager.getInstance().getDefaultProperties(project));
Properties properties = new Properties(FileTemplateManager.getInstance(project).getDefaultProperties());
JavaTemplateUtil.setPackageNameAttribute(properties, directory);
properties.setProperty(NAME_TEMPLATE_PROPERTY, name);
properties.setProperty(LOW_CASE_NAME_TEMPLATE_PROPERTY, name.substring(0, 1).toLowerCase() + name.substring(1));
@@ -98,7 +98,7 @@ public class GroovyTemplatesFactory implements FileTemplateGroupDescriptorFactor
text = template.getText(properties);
}
catch (Exception e) {
throw new RuntimeException("Unable to load template for " + FileTemplateManager.getInstance().internalTemplateToSubject(templateName), e);
throw new RuntimeException("Unable to load template for " + FileTemplateManager.getInstance(project).internalTemplateToSubject(templateName), e);
}
final PsiFileFactory factory = PsiFileFactory.getInstance(project);
@@ -64,7 +64,7 @@ public class NewGroovyClassAction extends JavaCreateTemplateInPackageAction<GrTy
.addKind("Enum", JetgroovyIcons.Groovy.Enum, GroovyTemplates.GROOVY_ENUM)
.addKind("Annotation", JetgroovyIcons.Groovy.AnnotationType, GroovyTemplates.GROOVY_ANNOTATION);
for (FileTemplate template : FileTemplateManager.getInstance().getAllTemplates()) {
for (FileTemplate template : FileTemplateManager.getInstance(project).getAllTemplates()) {
FileType fileType = FileTypeManagerEx.getInstanceEx().getFileTypeByExtension(template.getExtension());
if (fileType.equals(GroovyFileType.GROOVY_FILE_TYPE) && JavaDirectoryService.getInstance().getPackage(directory) != null) {
builder.addKind(template.getName(), JetgroovyIcons.Groovy.Class, template.getName());
@@ -66,7 +66,7 @@ public class GroovyGenerateMethodMissingHandler extends GenerateMembersHandlerBa
throws IncorrectOperationException {
final String templName = JavaTemplateUtil.TEMPLATE_FROM_USAGE_METHOD_BODY;
final FileTemplate template = FileTemplateManager.getInstance().getCodeTemplate(templName);
final FileTemplate template = FileTemplateManager.getInstance(aClass.getProject()).getCodeTemplate(templName);
final GrMethod method = genMethod(aClass, template);
return method != null
@@ -76,7 +76,7 @@ public class GroovyGenerateMethodMissingHandler extends GenerateMembersHandlerBa
@Nullable
private static GrMethod genMethod(PsiClass aClass, FileTemplate template) {
Properties properties = FileTemplateManager.getInstance().getDefaultProperties(aClass.getProject());
Properties properties = FileTemplateManager.getInstance(aClass.getProject()).getDefaultProperties();
properties.setProperty(FileTemplate.ATTRIBUTE_RETURN_TYPE, "java.lang.Object");
properties.setProperty(FileTemplate.ATTRIBUTE_DEFAULT_RETURN_VALUE, "null");
properties.setProperty(FileTemplate.ATTRIBUTE_CALL_SUPER, "");
@@ -66,7 +66,7 @@ public class GroovyGeneratePropertyMissingHandler extends GenerateMembersHandler
throws IncorrectOperationException {
final String templName = JavaTemplateUtil.TEMPLATE_FROM_USAGE_METHOD_BODY;
final FileTemplate template = FileTemplateManager.getInstance().getCodeTemplate(templName);
final FileTemplate template = FileTemplateManager.getInstance(aClass.getProject()).getCodeTemplate(templName);
final GrMethod getter = genGetter(aClass, template);
final GrMethod setter = genSetter(aClass, template);
@@ -80,7 +80,7 @@ public class GroovyGeneratePropertyMissingHandler extends GenerateMembersHandler
@Nullable
private static GrMethod genGetter(PsiClass aClass, FileTemplate template) {
Properties properties = FileTemplateManager.getInstance().getDefaultProperties(aClass.getProject());
Properties properties = FileTemplateManager.getInstance(aClass.getProject()).getDefaultProperties();
properties.setProperty(FileTemplate.ATTRIBUTE_RETURN_TYPE, "java.lang.Object");
properties.setProperty(FileTemplate.ATTRIBUTE_DEFAULT_RETURN_VALUE, "null");
properties.setProperty(FileTemplate.ATTRIBUTE_CALL_SUPER, "");
@@ -101,7 +101,7 @@ public class GroovyGeneratePropertyMissingHandler extends GenerateMembersHandler
@Nullable
private static GrMethod genSetter(PsiClass aClass, FileTemplate template) {
Properties properties = FileTemplateManager.getInstance().getDefaultProperties(aClass.getProject());
Properties properties = FileTemplateManager.getInstance(aClass.getProject()).getDefaultProperties();
properties.setProperty(FileTemplate.ATTRIBUTE_RETURN_TYPE, "void");
properties.setProperty(FileTemplate.ATTRIBUTE_DEFAULT_RETURN_VALUE, "");
properties.setProperty(FileTemplate.ATTRIBUTE_CALL_SUPER, "");
@@ -58,7 +58,7 @@ public class AddMethodFix extends GroovyFix {
}
else {
String templName = JavaTemplateUtil.TEMPLATE_IMPLEMENTED_METHOD_BODY;
final FileTemplate template = FileTemplateManager.getInstance().getCodeTemplate(templName);
final FileTemplate template = FileTemplateManager.getInstance(project).getCodeTemplate(templName);
Properties properties = new Properties();
@@ -130,7 +130,7 @@ public class IntentionUtils {
((GrMethod)method).setReturnType(PsiType.VOID);
}
if (method.getBody() != null) {
FileTemplateManager templateManager = FileTemplateManager.getInstance();
FileTemplateManager templateManager = FileTemplateManager.getInstance(project);
FileTemplate fileTemplate = templateManager.getCodeTemplate(GroovyTemplates.GROOVY_FROM_USAGE_METHOD_BODY);
PsiClass containingClass = method.getContainingClass();
@@ -75,7 +75,7 @@ public class GroovyOverrideImplementUtil {
final boolean isAbstract = method.hasModifierProperty(PsiModifier.ABSTRACT);
String templName = isAbstract ? JavaTemplateUtil.TEMPLATE_IMPLEMENTED_METHOD_BODY : JavaTemplateUtil.TEMPLATE_OVERRIDDEN_METHOD_BODY;
final FileTemplate template = FileTemplateManager.getInstance().getCodeTemplate(templName);
final FileTemplate template = FileTemplateManager.getInstance(method.getProject()).getCodeTemplate(templName);
final GrMethod result = (GrMethod)GenerateMembersUtil.substituteGenericMethod(method, substitutor, aClass);
setupModifierList(result);
@@ -172,7 +172,7 @@ public class GroovyOverrideImplementUtil {
if (returnType != null) {
returnTypeText = returnType.getPresentableText();
}
Properties properties = FileTemplateManager.getInstance().getDefaultProperties(project);
Properties properties = FileTemplateManager.getInstance(project).getDefaultProperties();
properties.setProperty(FileTemplate.ATTRIBUTE_RETURN_TYPE, returnTypeText);
properties.setProperty(FileTemplate.ATTRIBUTE_DEFAULT_RETURN_VALUE, PsiTypesUtil.getDefaultValueOfType(returnType));
@@ -37,7 +37,7 @@ public class GroovyMoveClassTest extends GroovyMoveTestBase {
@Override
protected void setUp() throws Exception {
super.setUp();
final FileTemplateManager templateManager = FileTemplateManager.instance
final FileTemplateManager templateManager = FileTemplateManager.getInstance(getProject())
FileTemplate temp = templateManager.getTemplate("GroovyClass.groovyForTest");
if (temp != null) templateManager.removeTemplate(temp);
@@ -61,7 +61,7 @@ class ${NAME} {
@Override
protected void tearDown() throws Exception {
final FileTemplateManager templateManager = FileTemplateManager.getInstance();
final FileTemplateManager templateManager = FileTemplateManager.getInstance(getProject());
FileTemplate temp = templateManager.getTemplate(GroovyTemplates.GROOVY_CLASS);
templateManager.removeTemplate(temp);
@@ -140,7 +140,7 @@ public class JavaI18nizeQuickFixDialog extends I18nizeQuickFixDialog {
@Override
public void hyperlinkUpdate(HyperlinkEvent e) {
final FileTemplateConfigurable configurable = new FileTemplateConfigurable(myProject);
final FileTemplate template = FileTemplateManager.getInstance().getCodeTemplate(templateName);
final FileTemplate template = FileTemplateManager.getInstance(myProject).getCodeTemplate(templateName);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
@@ -203,7 +203,7 @@ public class JavaI18nizeQuickFixDialog extends I18nizeQuickFixDialog {
if (templateName == null) return;
if (myShowJavaCodeInfo) {
FileTemplate template = FileTemplateManager.getInstance().getCodeTemplate(templateName);
FileTemplate template = FileTemplateManager.getInstance(myProject).getCodeTemplate(templateName);
boolean showResourceBundleSuggester = template.getText().contains("${" + RESOURCE_BUNDLE_OPTION_KEY + "}");
myJavaCodeInfoPanel.setVisible(showResourceBundleSuggester);
}
@@ -253,7 +253,7 @@ public class JavaI18nizeQuickFixDialog extends I18nizeQuickFixDialog {
String templateName = getTemplateName();
LOG.assertTrue(templateName != null);
FileTemplate template = FileTemplateManager.getInstance().getCodeTemplate(templateName);
FileTemplate template = FileTemplateManager.getInstance(myProject).getCodeTemplate(templateName);
Map<String, String> attributes = new THashMap<String, String>();
attributes.put(PROPERTY_KEY_OPTION_KEY, propertyKey);
attributes.put(RESOURCE_BUNDLE_OPTION_KEY, getResourceBundleText());
@@ -329,9 +329,9 @@ public class MavenUtil {
Properties properties,
Properties conditions,
boolean interactive) throws IOException {
FileTemplateManager manager = FileTemplateManager.getInstance();
FileTemplateManager manager = FileTemplateManager.getInstance(project);
FileTemplate fileTemplate = manager.getJ2eeTemplate(templateName);
Properties allProperties = manager.getDefaultProperties(project);
Properties allProperties = manager.getDefaultProperties();
if (!interactive) {
allProperties.putAll(properties);
}
@@ -56,7 +56,7 @@ public class CreateFormAction extends AbstractCreateFormAction {
ApplicationManager.getApplication().executeOnPooledThread(new Runnable() {
public void run() {
// to prevent deadlocks, this code must run while not holding the ActionManager lock
FileTemplateManager manager = FileTemplateManager.getInstance();
FileTemplateManager manager = FileTemplateManager.getDefaultInstance();
final FileTemplate template = manager.getTemplate("GUI Form");
//noinspection HardCodedStringLiteral
if (template != null && template.getExtension().equals("form")) {
@@ -64,7 +64,7 @@ public class CCProjectGenerator extends PythonProjectGenerator implements Direct
new WriteCommandAction.Simple(project) {
@Override
protected void run() throws Throwable {
final FileTemplate template = FileTemplateManager.getInstance().getInternalTemplate("test_helper");
final FileTemplate template = FileTemplateManager.getInstance(project).getInternalTemplate("test_helper");
try {
FileTemplateUtil.createFromTemplate(template, "test_helper.py", null, projectDir);
}
@@ -68,9 +68,9 @@ public class CCCreateTask extends DumbAwareAction {
final PsiDirectory taskDirectory = DirectoryUtil.createSubdirectories("task" + (size + 1), lessonDir, "\\/");
if (taskDirectory != null) {
CCUtils.markDirAsSourceRoot(taskDirectory.getVirtualFile(), project);
final FileTemplate template = FileTemplateManager.getInstance().getInternalTemplate("task.html");
final FileTemplate testsTemplate = FileTemplateManager.getInstance().getInternalTemplate("tests");
final FileTemplate taskTemplate = FileTemplateManager.getInstance().getInternalTemplate("task.answer");
final FileTemplate template = FileTemplateManager.getInstance(project).getInternalTemplate("task.html");
final FileTemplate testsTemplate = FileTemplateManager.getInstance(project).getInternalTemplate("tests");
final FileTemplate taskTemplate = FileTemplateManager.getInstance(project).getInternalTemplate("task.answer");
try {
final PsiElement taskFile = FileTemplateUtil.createFromTemplate(template, "task.html", null, taskDirectory);
final PsiElement testsFile = FileTemplateUtil.createFromTemplate(testsTemplate, "tests.py", null, taskDirectory);
@@ -56,7 +56,7 @@ public class CCCreateTaskFile extends DumbAwareAction {
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
final FileTemplate taskTemplate = FileTemplateManager.getInstance().getInternalTemplate("task.answer");
final FileTemplate taskTemplate = FileTemplateManager.getInstance(project).getInternalTemplate("task.answer");
try {
final PsiElement taskPyFile = FileTemplateUtil.createFromTemplate(taskTemplate, taskFileName, null, taskDir);
task.addTaskFile(taskFileName + ".py", index);
@@ -25,7 +25,6 @@ import com.intellij.ide.util.DirectoryChooserUtil;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.project.Project;
@@ -79,14 +78,14 @@ public class CreatePackageAction extends DumbAwareAction {
}
private static void createInitPy(PsiDirectory directory) {
final FileTemplateManager fileTemplateManager = FileTemplateManager.getInstance();
final FileTemplateManager fileTemplateManager = FileTemplateManager.getInstance(directory.getProject());
final FileTemplate template = fileTemplateManager.getInternalTemplate("Python Script");
if (directory.findFile(PyNames.INIT_DOT_PY) != null) {
return;
}
if (template != null) {
try {
FileTemplateUtil.createFromTemplate(template, PyNames.INIT_DOT_PY, fileTemplateManager.getDefaultProperties(directory.getProject()), directory);
FileTemplateUtil.createFromTemplate(template, PyNames.INIT_DOT_PY, fileTemplateManager.getDefaultProperties(), directory);
}
catch (Exception e) {
LOG.error(e);
@@ -1339,7 +1339,7 @@ public class PyUtil {
final File file = new File(path);
try {
final VirtualFile baseDir = project.getBaseDir();
final FileTemplateManager fileTemplateManager = FileTemplateManager.getInstance();
final FileTemplateManager fileTemplateManager = FileTemplateManager.getInstance(project);
final FileTemplate template = fileTemplateManager.getInternalTemplate("Python Script");
final String content = (template != null) ? template.getText(fileTemplateManager.getDefaultProperties(project)) : null;
psi = PyExtractSuperclassHelper.placeFile(project,