mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
embedded live templates: support variables
This commit is contained in:
+21
-3
@@ -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());
|
||||
|
||||
+14
-1
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user