convert XmlTagNameSynchronizer from component to lazy listener

GitOrigin-RevId: 9deae9a4abd01f5de7874dc839a82c4d73cd1afa
This commit is contained in:
Vladimir Krivosheev
2019-08-02 17:12:50 +02:00
committed by intellij-monorepo-bot
parent 2fa8fa2d42
commit 8eba253ce2
2 changed files with 16 additions and 29 deletions

View File

@@ -12,14 +12,7 @@
<xi:fallback/>
</xi:include>
<application-components>
<component>
<implementation-class>com.intellij.codeInsight.editorActions.XmlTagNameSynchronizer</implementation-class>
</component>
</application-components>
<extensionPoints>
<extensionPoint name="html.htmlScriptInjectionBlocker" beanClass="com.intellij.lang.LanguageExtensionPoint">
<with attribute="implementationClass" implements="com.intellij.psi.impl.source.html.HtmlScriptInjectionBlocker"/>
</extensionPoint>
@@ -614,6 +607,8 @@
<smartPointer.anchorProvider implementation="com.intellij.psi.impl.smartPointers.XmlAnchorProvider"/>
<stepsBeforeRunProvider implementation="com.intellij.ide.browsers.LaunchBrowserBeforeRunTaskProvider"/>
<editorFactoryListener implementation="com.intellij.codeInsight.editorActions.XmlTagNameSynchronizer"/>
</extensions>
<extensions defaultExtensionNs="org.jetbrains">
<urlOpener implementation="com.intellij.ide.browsers.impl.DefaultUrlOpener" order="last"/>

View File

@@ -1,4 +1,4 @@
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.codeInsight.editorActions;
import com.intellij.application.options.editor.WebEditorOptions;
@@ -11,7 +11,6 @@ import com.intellij.lang.injection.InjectedLanguageManager;
import com.intellij.lang.xhtml.XHTMLLanguage;
import com.intellij.lang.xml.XMLLanguage;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.CommandEvent;
import com.intellij.openapi.command.CommandListener;
@@ -47,10 +46,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.Objects;
import java.util.Set;
/**
* @author Dennis.Ushakov
*/
public class XmlTagNameSynchronizer implements CommandListener {
public final class XmlTagNameSynchronizer implements CommandListener, EditorFactoryListener {
private static final Key<Boolean> SKIP_COMMAND = Key.create("tag.name.synchronizer.skip.command");
private static final Logger LOG = Logger.getInstance(XmlTagNameSynchronizer.class);
private static final Set<Language> SUPPORTED_LANGUAGES = ContainerUtil.set(HTMLLanguage.INSTANCE,
@@ -58,26 +54,22 @@ public class XmlTagNameSynchronizer implements CommandListener {
XHTMLLanguage.INSTANCE);
private static final Key<TagNameSynchronizer> SYNCHRONIZER_KEY = Key.create("tag_name_synchronizer");
private final FileDocumentManager myFileDocumentManager;
public XmlTagNameSynchronizer(EditorFactory editorFactory, FileDocumentManager manager, Application application) {
myFileDocumentManager = manager;
editorFactory.addEditorFactoryListener(new EditorFactoryListener() {
@Override
public void editorCreated(@NotNull EditorFactoryEvent event) {
installSynchronizer(event.getEditor());
}
}, application);
application.getMessageBus().connect().subscribe(CommandListener.TOPIC, this);
private XmlTagNameSynchronizer() {
ApplicationManager.getApplication().getMessageBus().connect().subscribe(CommandListener.TOPIC, this);
}
private void installSynchronizer(final Editor editor) {
final Project project = editor.getProject();
if (project == null || !(editor instanceof EditorImpl)) return;
@Override
public void editorCreated(@NotNull EditorFactoryEvent event) {
Editor editor = event.getEditor();
Project project = editor.getProject();
if (project == null || !(editor instanceof EditorImpl)) {
return;
}
final Document document = editor.getDocument();
final VirtualFile file = myFileDocumentManager.getFile(document);
final Language language = findXmlLikeLanguage(project, file);
Document document = editor.getDocument();
VirtualFile file = FileDocumentManager.getInstance().getFile(document);
Language language = findXmlLikeLanguage(project, file);
if (language != null) {
new TagNameSynchronizer((EditorImpl)editor, project, language).listenForDocumentChanges();
}