mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
allow custom documents for LanguageTextField
This commit is contained in:
@@ -26,7 +26,6 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiFileFactory;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.LocalTimeCounter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -36,14 +35,15 @@ public class LanguageTextField extends EditorTextField {
|
||||
private final Project myProject;
|
||||
|
||||
public LanguageTextField(Language language, @NotNull Project project, @NotNull String value) {
|
||||
this(language, project, value, null);
|
||||
this(language, project, value, new SimpleDocumentCreator());
|
||||
}
|
||||
|
||||
public LanguageTextField(@Nullable Language language,
|
||||
@NotNull Project project,
|
||||
@NotNull String value,
|
||||
@Nullable Consumer<PsiFile> tagger) {
|
||||
super(createDocument(value, language, project, tagger), project,
|
||||
@NotNull DocumentCreator documentCreator
|
||||
) {
|
||||
super(documentCreator.createDocument(value, language, project), project,
|
||||
language != null ? language.getAssociatedFileType() : StdFileTypes.PLAIN_TEXT, language == null);
|
||||
|
||||
myLanguage = language;
|
||||
@@ -54,7 +54,22 @@ public class LanguageTextField extends EditorTextField {
|
||||
ShiftTabAction.attachTo(this);
|
||||
}
|
||||
|
||||
private static Document createDocument(String value, @Nullable Language language, Project project, @Nullable Consumer<PsiFile> tagger) {
|
||||
public interface DocumentCreator {
|
||||
Document createDocument(String value, @Nullable Language language, Project project);
|
||||
}
|
||||
|
||||
public static class SimpleDocumentCreator implements DocumentCreator {
|
||||
@Override
|
||||
public Document createDocument(String value, @Nullable Language language, Project project) {
|
||||
return LanguageTextField.createDocument(value, language, project, this);
|
||||
}
|
||||
|
||||
public void customizePsiFile(PsiFile file) {
|
||||
}
|
||||
}
|
||||
|
||||
private static Document createDocument(String value, @Nullable Language language, Project project,
|
||||
@NotNull SimpleDocumentCreator documentCreator) {
|
||||
if (language != null) {
|
||||
final PsiFileFactory factory = PsiFileFactory.getInstance(project);
|
||||
final FileType fileType = language.getAssociatedFileType();
|
||||
@@ -62,9 +77,7 @@ public class LanguageTextField extends EditorTextField {
|
||||
|
||||
final long stamp = LocalTimeCounter.currentTime();
|
||||
final PsiFile psiFile = factory.createFileFromText("Dummy." + fileType.getDefaultExtension(), fileType, value, stamp, true, false);
|
||||
if (tagger != null) {
|
||||
tagger.consume(psiFile);
|
||||
}
|
||||
documentCreator.customizePsiFile(psiFile);
|
||||
final Document document = PsiDocumentManager.getInstance(project).getDocument(psiFile);
|
||||
assert document != null;
|
||||
return document;
|
||||
|
||||
+3
-4
@@ -18,10 +18,9 @@ package org.intellij.plugins.intelliLang.inject.config.ui;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.ui.EditorTextField;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.ui.LanguageTextField;
|
||||
import org.intellij.lang.regexp.RegExpLanguage;
|
||||
import org.intellij.plugins.intelliLang.inject.config.BaseInjection;
|
||||
import com.intellij.ui.LanguageTextField;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
@@ -52,8 +51,8 @@ public class AdvancedPanel extends AbstractInjectionPanel<BaseInjection> {
|
||||
}
|
||||
|
||||
private void createUIComponents() {
|
||||
myValuePattern = new LanguageTextField(RegExpLanguage.INSTANCE, myProject, myOrigInjection.getValuePattern(), new Consumer<PsiFile>() {
|
||||
public void consume(PsiFile psiFile) {
|
||||
myValuePattern = new LanguageTextField(RegExpLanguage.INSTANCE, myProject, myOrigInjection.getValuePattern(), new LanguageTextField.SimpleDocumentCreator() {
|
||||
public void customizePsiFile(PsiFile psiFile) {
|
||||
psiFile.putCopyableUserData(ValueRegExpAnnotator.KEY, Boolean.TRUE);
|
||||
}
|
||||
});
|
||||
|
||||
+5
-6
@@ -18,12 +18,11 @@ package org.intellij.plugins.intelliLang.inject.config.ui;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.ui.EditorTextField;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.ui.LanguageTextField;
|
||||
import org.intellij.lang.regexp.RegExpLanguage;
|
||||
import org.intellij.plugins.intelliLang.inject.InjectedLanguage;
|
||||
import org.intellij.plugins.intelliLang.inject.config.AbstractTagInjection;
|
||||
import org.intellij.plugins.intelliLang.inject.config.XPathSupportProxy;
|
||||
import com.intellij.ui.LanguageTextField;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
@@ -58,8 +57,8 @@ public class AdvancedXmlPanel extends AbstractInjectionPanel<AbstractTagInjectio
|
||||
}
|
||||
|
||||
private void createUIComponents() {
|
||||
myValuePattern = new LanguageTextField(RegExpLanguage.INSTANCE, myProject, myOrigInjection.getValuePattern(), new Consumer<PsiFile>() {
|
||||
public void consume(PsiFile psiFile) {
|
||||
myValuePattern = new LanguageTextField(RegExpLanguage.INSTANCE, myProject, myOrigInjection.getValuePattern(), new LanguageTextField.SimpleDocumentCreator() {
|
||||
public void customizePsiFile(PsiFile psiFile) {
|
||||
psiFile.putCopyableUserData(ValueRegExpAnnotator.KEY, Boolean.TRUE);
|
||||
}
|
||||
});
|
||||
@@ -67,8 +66,8 @@ public class AdvancedXmlPanel extends AbstractInjectionPanel<AbstractTagInjectio
|
||||
// don't even bother to look up the language when xpath-evaluation isn't possible
|
||||
final XPathSupportProxy proxy = XPathSupportProxy.getInstance();
|
||||
myXPathCondition = new LanguageTextField(proxy != null ? InjectedLanguage.findLanguageById("XPath") : null, myProject,
|
||||
myOrigInjection.getXPathCondition(), new Consumer<PsiFile>() {
|
||||
public void consume(PsiFile psiFile) {
|
||||
myOrigInjection.getXPathCondition(), new LanguageTextField.SimpleDocumentCreator() {
|
||||
public void customizePsiFile(PsiFile psiFile) {
|
||||
// important to get proper validation & completion for Jaxen's built-in and PSI functions
|
||||
// like lower-case(), file-type(), file-ext(), file-name(), etc.
|
||||
if (proxy != null) {
|
||||
|
||||
Reference in New Issue
Block a user