diff --git a/platform/lang-impl/src/com/intellij/ui/LanguageTextField.java b/platform/lang-impl/src/com/intellij/ui/LanguageTextField.java index 34be0615721c..7fc5cc615e3a 100644 --- a/platform/lang-impl/src/com/intellij/ui/LanguageTextField.java +++ b/platform/lang-impl/src/com/intellij/ui/LanguageTextField.java @@ -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 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 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; diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedPanel.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedPanel.java index 7cf4c81b7bad..972fedcf41af 100644 --- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedPanel.java +++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedPanel.java @@ -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 { } private void createUIComponents() { - myValuePattern = new LanguageTextField(RegExpLanguage.INSTANCE, myProject, myOrigInjection.getValuePattern(), new Consumer() { - 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); } }); diff --git a/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedXmlPanel.java b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedXmlPanel.java index f5ed086b6067..386796cbad06 100644 --- a/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedXmlPanel.java +++ b/plugins/IntelliLang/xml-support/org/intellij/plugins/intelliLang/inject/config/ui/AdvancedXmlPanel.java @@ -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() { - 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() { - 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) {