mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
live templates: provide code insight during editing (IDEA-71378)
This commit is contained in:
@@ -16,11 +16,15 @@
|
||||
package com.intellij.codeInsight.template;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightBundle;
|
||||
import com.intellij.ide.DataManager;
|
||||
import com.intellij.ide.highlighter.JavaFileHighlighter;
|
||||
import com.intellij.lang.StdLanguages;
|
||||
import com.intellij.openapi.actionSystem.PlatformDataKeys;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
import com.intellij.openapi.fileTypes.SyntaxHighlighter;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtilBase;
|
||||
@@ -62,4 +66,14 @@ public class JavaCodeContextType extends TemplateContextType {
|
||||
return new JavaFileHighlighter();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Document createDocument(CharSequence text, Project project) {
|
||||
if (project == null) {
|
||||
return super.createDocument(text, project);
|
||||
}
|
||||
final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project);
|
||||
final PsiElementFactory factory = psiFacade.getElementFactory();
|
||||
final JavaCodeFragment fragment = factory.createCodeBlockCodeFragment((String)text, psiFacade.findPackage(""), true);
|
||||
return PsiDocumentManager.getInstance(project).getDocument(fragment);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,9 +16,12 @@
|
||||
|
||||
package com.intellij.codeInsight.template;
|
||||
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.EditorFactory;
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.fileTypes.SyntaxHighlighter;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -77,4 +80,8 @@ public abstract class TemplateContextType {
|
||||
public TemplateContextType getBaseContextType() {
|
||||
return myBaseContextType != null ? EP_NAME.findExtension(myBaseContextType) : null;
|
||||
}
|
||||
|
||||
public Document createDocument(CharSequence text, Project project) {
|
||||
return EditorFactory.getInstance().createDocument(text);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -88,7 +88,7 @@ public class EditTemplateDialog extends DialogWrapper {
|
||||
myKeyField=new JTextField();
|
||||
myDescription=new JTextField();
|
||||
myGroupCombo=new ComboBox(-1);
|
||||
myTemplateEditor = TemplateEditorUtil.createEditor(false, myTemplate.getString());
|
||||
myTemplateEditor = TemplateEditorUtil.createEditor(false, myTemplate.getString(), context);
|
||||
|
||||
init();
|
||||
reset();
|
||||
|
||||
+29
-3
@@ -17,9 +17,11 @@
|
||||
package com.intellij.codeInsight.template.impl;
|
||||
|
||||
import com.intellij.codeInsight.template.TemplateContextType;
|
||||
import com.intellij.ide.DataManager;
|
||||
import com.intellij.lexer.CompositeLexer;
|
||||
import com.intellij.lexer.Lexer;
|
||||
import com.intellij.lexer.MergingLexerAdapter;
|
||||
import com.intellij.openapi.actionSystem.PlatformDataKeys;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.EditorFactory;
|
||||
@@ -33,15 +35,39 @@ import com.intellij.openapi.editor.ex.util.LexerEditorHighlighter;
|
||||
import com.intellij.openapi.fileTypes.PlainSyntaxHighlighter;
|
||||
import com.intellij.openapi.fileTypes.SyntaxHighlighter;
|
||||
import com.intellij.openapi.fileTypes.SyntaxHighlighterBase;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.tree.TokenSet;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class TemplateEditorUtil {
|
||||
public static Editor createEditor(boolean isReadOnly, final CharSequence text) {
|
||||
private TemplateEditorUtil() {}
|
||||
|
||||
public static Editor createEditor(boolean isReadOnly, CharSequence text) {
|
||||
return createEditor(isReadOnly, text, null);
|
||||
}
|
||||
|
||||
public static Editor createEditor(boolean isReadOnly, CharSequence text, @Nullable Map<TemplateContextType, Boolean> context) {
|
||||
Document doc = EditorFactory.getInstance().createDocument(text);
|
||||
final Project project = PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext());
|
||||
if (context != null) {
|
||||
for (Map.Entry<TemplateContextType, Boolean> entry : context.entrySet()) {
|
||||
if (entry.getValue()) {
|
||||
doc = entry.getKey().createDocument(text, project);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return createEditor(isReadOnly, doc, project);
|
||||
}
|
||||
|
||||
private static Editor createEditor(boolean isReadOnly, final Document document, final Project project) {
|
||||
EditorFactory editorFactory = EditorFactory.getInstance();
|
||||
Document doc = editorFactory.createDocument(text);
|
||||
Editor editor = (isReadOnly ? editorFactory.createViewer(doc) : editorFactory.createEditor(doc));
|
||||
Editor editor = (isReadOnly ? editorFactory.createViewer(document, project) : editorFactory.createEditor(document, project));
|
||||
|
||||
EditorSettings editorSettings = editor.getSettings();
|
||||
editorSettings.setVirtualSpace(false);
|
||||
|
||||
Reference in New Issue
Block a user