mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
WEB-8537 EJS: HTML tag is not closed if placed before EJS tag
This commit is contained in:
@@ -31,6 +31,7 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
import com.intellij.psi.html.HtmlTag;
|
||||
import com.intellij.psi.impl.source.xml.XmlTokenImpl;
|
||||
import com.intellij.psi.templateLanguages.TemplateLanguageFileViewProvider;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.xml.*;
|
||||
@@ -46,8 +47,7 @@ public class XmlGtTypedHandler extends TypedHandlerDelegate {
|
||||
|
||||
public Result beforeCharTyped(final char c, final Project project, final Editor editor, final PsiFile editedFile, final FileType fileType) {
|
||||
final WebEditorOptions webEditorOptions = WebEditorOptions.getInstance();
|
||||
if (c == '>' && webEditorOptions != null && webEditorOptions.isAutomaticallyInsertClosingTag()
|
||||
&& (editedFile.getLanguage() instanceof XMLLanguage || editedFile.getViewProvider().getBaseLanguage() instanceof XMLLanguage)) {
|
||||
if (c == '>' && webEditorOptions != null && webEditorOptions.isAutomaticallyInsertClosingTag() && fileContainsXmlLanguage(editedFile)) {
|
||||
PsiDocumentManager.getInstance(project).commitAllDocuments();
|
||||
|
||||
PsiFile file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument());
|
||||
@@ -58,7 +58,12 @@ public class XmlGtTypedHandler extends TypedHandlerDelegate {
|
||||
|
||||
if (offset < editor.getDocument().getTextLength()) {
|
||||
elementAtCaret = element = provider.findElementAt(offset, XMLLanguage.class);
|
||||
|
||||
|
||||
if (element == null && offset > 0) {
|
||||
// seems like a template language
|
||||
// <xml_code><caret><outer_element>
|
||||
elementAtCaret = element = provider.findElementAt(offset - 1, XMLLanguage.class);
|
||||
}
|
||||
if (!(element instanceof PsiWhiteSpace)) {
|
||||
boolean nonAcceptableDelimiter = true;
|
||||
|
||||
@@ -256,4 +261,16 @@ public class XmlGtTypedHandler extends TypedHandlerDelegate {
|
||||
}
|
||||
return Result.CONTINUE;
|
||||
}
|
||||
|
||||
private static boolean fileContainsXmlLanguage(PsiFile editedFile) {
|
||||
if (editedFile.getLanguage() instanceof XMLLanguage) {
|
||||
return true;
|
||||
}
|
||||
final FileViewProvider provider = editedFile.getViewProvider();
|
||||
if (provider.getBaseLanguage() instanceof XMLLanguage) {
|
||||
return true;
|
||||
}
|
||||
return provider instanceof TemplateLanguageFileViewProvider &&
|
||||
((TemplateLanguageFileViewProvider)provider).getTemplateDataLanguage() instanceof XMLLanguage;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user