embedded live templates: support variables

This commit is contained in:
Dmitry Avdeev
2015-09-18 13:48:53 +03:00
parent aed7707ee7
commit 0412d3fe71
3 changed files with 42 additions and 5 deletions
@@ -15,6 +15,7 @@
*/
package com.intellij.ide.fileTemplates;
import com.intellij.codeInsight.template.impl.TemplateManagerImpl;
import com.intellij.ide.fileTemplates.actions.CreateFromTemplateActionBase;
import com.intellij.ide.fileTemplates.impl.CustomFileTemplate;
import com.intellij.openapi.fileEditor.FileEditorManager;
@@ -31,14 +32,31 @@ public class EmbeddedLiveTemplatesTest extends LightPlatformCodeInsightFixtureTe
public void testCreateFromTemplateAction() throws Exception {
myFixture.configureByText(PlainTextFileType.INSTANCE, "");
doTest("Put caret here: #[[$END$]]# end of template",
"Put caret here: <caret> end of template");
}
public void testSupportVariables() throws Exception {
doTest("First: #[[$Var$]]# Second: #[[$Var$]]#",
"First: <caret> Second: ");
}
protected void doTest(String text, String result) {
CustomFileTemplate template = new CustomFileTemplate("foo", "txt");
template.setText("Put caret here: #[[$END$]]# end of template");
template.setText(text);
template.setLiveTemplateEnabled(true);
myFixture.testAction(new TestAction(template));
VirtualFile[] files = FileEditorManager.getInstance(getProject()).getSelectedFiles();
myFixture.openFileInEditor(files[0]);
myFixture.checkResult("Put caret here: <caret> end of template");
myFixture.checkResult(result);
}
@Override
public void setUp() throws Exception {
super.setUp();
myFixture.configureByText(PlainTextFileType.INSTANCE, ""); // enable editor action context
TemplateManagerImpl.setTemplateTesting(getProject(), getTestRootDisposable());
}
private static class TestAction extends CreateFromTemplateActionBase {
@@ -18,6 +18,7 @@ package com.intellij.ide.actions;
import com.intellij.ide.fileTemplates.FileTemplate;
import com.intellij.ide.fileTemplates.FileTemplateManager;
import com.intellij.ide.fileTemplates.FileTemplateUtil;
import com.intellij.ide.fileTemplates.actions.CreateFromTemplateActionBase;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.project.DumbModePermission;
@@ -76,7 +77,12 @@ public abstract class CreateFileFromTemplateAction extends CreateFromTemplateAct
final VirtualFile virtualFile = psiFile.getVirtualFile();
if (virtualFile != null) {
if (openFile) {
FileEditorManager.getInstance(project).openFile(virtualFile, true);
if (template.isLiveTemplateEnabled()) {
CreateFromTemplateActionBase.startLiveTemplate(psiFile);
}
else {
FileEditorManager.getInstance(project).openFile(virtualFile, true);
}
}
if (defaultTemplateProperty != null) {
PropertiesComponent.getInstance(project).setValue(defaultTemplateProperty, template.getName());
@@ -37,6 +37,8 @@ import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.util.HashSet;
import java.util.Set;
public abstract class CreateFromTemplateActionBase extends AnAction {
@@ -79,13 +81,24 @@ public abstract class CreateFromTemplateActionBase extends AnAction {
}
}
private static void startLiveTemplate(PsiFile file) {
public static void startLiveTemplate(PsiFile file) {
Project project = file.getProject();
final Editor editor = EditorHelper.openInEditor(file);
if (editor == null) return;
final TemplateImpl template = new TemplateImpl("", file.getText(), "");
template.setInline(true);
int count = template.getSegmentsCount();
if (count == 0) return;
Set<String> variables = new HashSet<String>();
for (int i = 0; i < count; i++) {
String name = template.getSegmentName(i);
variables.add(name);
}
for (String variable : variables) {
template.addVariable(variable, null, variable, true);
}
WriteCommandAction.runWriteCommandAction(project, new Runnable() {
@Override
public void run() {