diff --git a/jingtrang/pom.xml b/jingtrang/pom.xml
index b49e74c9..c2a04da1 100644
--- a/jingtrang/pom.xml
+++ b/jingtrang/pom.xml
@@ -21,7 +21,7 @@
consulo
arch.managment
- 3-SNAPSHOT
+ 4-SNAPSHOT
@@ -38,7 +38,7 @@
consulo.plugin
com.intellij.xml.jingtrang
- 3-SNAPSHOT
+ 4-SNAPSHOT
jar
diff --git a/pom.xml b/pom.xml
index 220a3964..00c61006 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,7 +21,7 @@
consulo
arch.managment
- 3-SNAPSHOT
+ 4-SNAPSHOT
@@ -38,7 +38,7 @@
consulo.plugin
com.intellij.xml.parent
- 3-SNAPSHOT
+ 4-SNAPSHOT
pom
diff --git a/rngom/pom.xml b/rngom/pom.xml
index 60620816..0b6ca607 100644
--- a/rngom/pom.xml
+++ b/rngom/pom.xml
@@ -21,7 +21,7 @@
consulo
arch.managment
- 3-SNAPSHOT
+ 4-SNAPSHOT
@@ -38,7 +38,7 @@
consulo.plugin
com.intellij.xml.rngom
- 3-SNAPSHOT
+ 4-SNAPSHOT
jar
diff --git a/xml-impl/pom.xml b/xml-impl/pom.xml
index b6455a3d..d288b356 100644
--- a/xml-impl/pom.xml
+++ b/xml-impl/pom.xml
@@ -20,13 +20,13 @@
consulo
arch.ide-api-provided
- 3-SNAPSHOT
+ 4-SNAPSHOT
consulo.plugin
com.intellij.xml
- 3-SNAPSHOT
+ 4-SNAPSHOT
consulo-plugin
diff --git a/xml-impl/src/main/java/com/intellij/xml/actions/xmlbeans/GenerateInstanceDocumentFromSchemaAction.java b/xml-impl/src/main/java/com/intellij/xml/actions/xmlbeans/GenerateInstanceDocumentFromSchemaAction.java
index 05513796..fea61978 100644
--- a/xml-impl/src/main/java/com/intellij/xml/actions/xmlbeans/GenerateInstanceDocumentFromSchemaAction.java
+++ b/xml-impl/src/main/java/com/intellij/xml/actions/xmlbeans/GenerateInstanceDocumentFromSchemaAction.java
@@ -23,6 +23,7 @@
import consulo.language.psi.PsiFile;
import consulo.language.psi.PsiManager;
import consulo.project.Project;
+import consulo.ui.UIAccess;
import consulo.ui.annotation.RequiredUIAccess;
import consulo.ui.ex.action.ActionPlaces;
import consulo.ui.ex.action.AnAction;
@@ -80,7 +81,7 @@ public void actionPerformed(AnActionEvent e) {
@RequiredUIAccess
private void doAction(Project project, GenerateInstanceDocumentFromSchemaDialog dialog) {
- FileDocumentManager.getInstance().saveAllDocuments();
+ FileDocumentManager.getInstance().saveAllDocuments(UIAccess.current());
List parameters = new LinkedList<>();
diff --git a/xml-impl/src/main/java/com/intellij/xml/actions/xmlbeans/GenerateSchemaFromInstanceDocumentAction.java b/xml-impl/src/main/java/com/intellij/xml/actions/xmlbeans/GenerateSchemaFromInstanceDocumentAction.java
index f9c08a06..b6e0552a 100644
--- a/xml-impl/src/main/java/com/intellij/xml/actions/xmlbeans/GenerateSchemaFromInstanceDocumentAction.java
+++ b/xml-impl/src/main/java/com/intellij/xml/actions/xmlbeans/GenerateSchemaFromInstanceDocumentAction.java
@@ -22,6 +22,7 @@
import consulo.fileEditor.FileEditorManager;
import consulo.language.editor.PlatformDataKeys;
import consulo.project.Project;
+import consulo.ui.UIAccess;
import consulo.ui.annotation.RequiredUIAccess;
import consulo.ui.ex.action.ActionPlaces;
import consulo.ui.ex.action.AnAction;
@@ -86,7 +87,7 @@ public void actionPerformed(AnActionEvent e) {
@RequiredUIAccess
private static void doAction(Project project, GenerateSchemaFromInstanceDocumentDialog dialog) {
- FileDocumentManager.getInstance().saveAllDocuments();
+ FileDocumentManager.getInstance().saveAllDocuments(UIAccess.current());
String url = dialog.getUrl().getText();
VirtualFile relativeFile =
diff --git a/xml-impl/src/main/java/consulo/xml/codeInsight/daemon/impl/tagTreeHighlighting/XmlTagTreeHighlightingPass.java b/xml-impl/src/main/java/consulo/xml/codeInsight/daemon/impl/tagTreeHighlighting/XmlTagTreeHighlightingPass.java
index 83d5cfd4..68bfcdb3 100644
--- a/xml-impl/src/main/java/consulo/xml/codeInsight/daemon/impl/tagTreeHighlighting/XmlTagTreeHighlightingPass.java
+++ b/xml-impl/src/main/java/consulo/xml/codeInsight/daemon/impl/tagTreeHighlighting/XmlTagTreeHighlightingPass.java
@@ -71,11 +71,12 @@ public class XmlTagTreeHighlightingPass extends TextEditorHighlightingPass {
new HighlightInfoTypeImpl(HighlightSeverity.INFORMATION, TAG_TREE_HIGHLIGHTING_KEY);
private final PsiFile myFile;
- private final EditorEx myEditor;
+
+ private final Editor myEditor;
private final List> myPairsToHighlight = new ArrayList<>();
- public XmlTagTreeHighlightingPass(PsiFile file, EditorEx editor) {
+ public XmlTagTreeHighlightingPass(PsiFile file, Editor editor) {
super(file.getProject(), editor.getDocument(), true);
myFile = file;
myEditor = editor;
@@ -84,15 +85,11 @@ public XmlTagTreeHighlightingPass(PsiFile file, EditorEx editor) {
@RequiredReadAction
@Override
public void doCollectInformation(ProgressIndicator progress) {
- if (Application.get().isUnitTestMode()) {
- return;
- }
-
if (!XmlEditorOptions.getInstance().isTagTreeHighlightingEnabled()) {
return;
}
- int offset = myEditor.getCaretModel().getOffset();
+ int offset = getImaginaryEditor().getCaretModel().getOffset();
PsiElement[] elements = null; // FIXME [VISTALL] for now idk when it used, due it based on breadcrumbs, which removed
if (elements == null || elements.length == 0 || !XmlTagTreeHighlightingUtil.containsTagsWithSameName(elements)) {
@@ -188,6 +185,7 @@ public void doApplyInformationToEditor() {
UpdateHighlightersUtil.setHighlightersToEditor(
myProject,
myDocument,
+ myFile,
0,
myFile.getTextLength(),
infos,
@@ -309,7 +307,7 @@ private static ColorValue[] toColorsForLineMarkers(ColorValue[] baseColors) {
}
private ColorValue[] toColorsForEditor(ColorValue[] baseColors) {
- ColorValue tagBackground = myEditor.getBackgroundColor();
+ ColorValue tagBackground = ((EditorEx) myEditor).getBackgroundColor();
if (tagBackground == null) {
return baseColors;
diff --git a/xml-impl/src/main/java/consulo/xml/codeInsight/daemon/impl/tagTreeHighlighting/XmlTagTreeHighlightingPassFactory.java b/xml-impl/src/main/java/consulo/xml/codeInsight/daemon/impl/tagTreeHighlighting/XmlTagTreeHighlightingPassFactory.java
index b1255d8e..a4ccf546 100644
--- a/xml-impl/src/main/java/consulo/xml/codeInsight/daemon/impl/tagTreeHighlighting/XmlTagTreeHighlightingPassFactory.java
+++ b/xml-impl/src/main/java/consulo/xml/codeInsight/daemon/impl/tagTreeHighlighting/XmlTagTreeHighlightingPassFactory.java
@@ -37,8 +37,7 @@ public void register(Registrar registrar) {
public TextEditorHighlightingPass createHighlightingPass(PsiFile file, Editor editor) {
return !editor.isOneLineMode()
&& XmlTagTreeHighlightingUtil.isTagTreeHighlightingActive(file)
- && editor instanceof EditorEx editorEx
- ? new XmlTagTreeHighlightingPass(file, editorEx)
+ ? new XmlTagTreeHighlightingPass(file, editor)
: null;
}
}
diff --git a/xml-impl/src/main/java/consulo/xml/codeInsight/editorActions/XmlTagNameSynchronizer.java b/xml-impl/src/main/java/consulo/xml/codeInsight/editorActions/XmlTagNameSynchronizer.java
index 549524fc..67e46e79 100644
--- a/xml-impl/src/main/java/consulo/xml/codeInsight/editorActions/XmlTagNameSynchronizer.java
+++ b/xml-impl/src/main/java/consulo/xml/codeInsight/editorActions/XmlTagNameSynchronizer.java
@@ -6,6 +6,7 @@
import consulo.annotation.access.RequiredReadAction;
import consulo.annotation.component.ExtensionImpl;
import consulo.application.Application;
+import consulo.application.concurrent.coroutine.ReadLock;
import consulo.codeEditor.*;
import consulo.codeEditor.event.EditorFactoryEvent;
import consulo.codeEditor.event.EditorFactoryListener;
@@ -36,6 +37,10 @@
import consulo.undoRedo.event.CommandEvent;
import consulo.undoRedo.event.CommandListener;
import consulo.util.collection.ContainerUtil;
+import consulo.util.concurrent.coroutine.Continuation;
+import consulo.util.concurrent.coroutine.Coroutine;
+import consulo.util.concurrent.coroutine.CoroutineScope;
+import consulo.util.concurrent.coroutine.step.CodeExecution;
import consulo.util.dataholder.Key;
import consulo.util.lang.Couple;
import consulo.util.lang.StringUtil;
@@ -48,7 +53,6 @@
import consulo.xml.psi.xml.XmlTokenType;
import jakarta.inject.Inject;
-
import java.util.Objects;
import java.util.Set;
@@ -62,6 +66,8 @@ public final class XmlTagNameSynchronizer implements CommandListener, EditorFact
XHTMLLanguage.INSTANCE
);
+ private static final Key> CONTINUATION_KEY = Key.create("XmlTagNameSynchronizer#CONTINUATION_KEY");
+
private static final Key SYNCHRONIZER_KEY = Key.create("tag_name_synchronizer");
@Inject
@@ -80,9 +86,30 @@ public void editorCreated(EditorFactoryEvent event) {
Document document = editor.getDocument();
VirtualFile file = FileDocumentManager.getInstance().getFile(document);
- Language language = findXmlLikeLanguage(project, file);
- if (language != null) {
- new TagNameSynchronizer((RealEditor)editor, project, language).listenForDocumentChanges();
+
+ Continuation> continuation = CoroutineScope.launchAsync(project.coroutineContext(), () -> {
+ return Coroutine.first(ReadLock.apply(o -> findXmlLikeLanguage(project, file)))
+ .then(CodeExecution.consume((language, c) -> {
+ if (language != null) {
+ new TagNameSynchronizer((RealEditor) editor, project, language).listenForDocumentChanges();
+
+ editor.putUserData(CONTINUATION_KEY, null);
+ }
+ }));
+ });
+
+ editor.putUserData(CONTINUATION_KEY, continuation);
+ }
+
+ @Override
+ public void editorReleased(EditorFactoryEvent event) {
+ Editor editor = event.getEditor();
+
+ Continuation> continuation = editor.getUserData(CONTINUATION_KEY);
+ if (continuation != null) {
+ continuation.cancel();
+
+ editor.putUserData(CONTINUATION_KEY, null);
}
}
diff --git a/xml-impl/src/main/java/consulo/xml/javaee/MapExternalResourceDialog.java b/xml-impl/src/main/java/consulo/xml/javaee/MapExternalResourceDialog.java
index 408dfe5d..0fa4f32c 100644
--- a/xml-impl/src/main/java/consulo/xml/javaee/MapExternalResourceDialog.java
+++ b/xml-impl/src/main/java/consulo/xml/javaee/MapExternalResourceDialog.java
@@ -234,15 +234,9 @@ public String getResourceLocation() {
private void createUIComponents() {
myExplorerPanel = new JPanel(new BorderLayout());
- DataManager.registerDataProvider(myExplorerPanel, dataId ->
- {
- if (CommonDataKeys.VIRTUAL_FILE_ARRAY == dataId) {
- return myExplorer.getSelectedFiles();
- }
- else if (FileSystemTree.DATA_KEY == dataId) {
- return myExplorer;
- }
- return null;
+ DataManager.registerUiDataProvider(myExplorerPanel, dataSink -> {
+ dataSink.set(CommonDataKeys.VIRTUAL_FILE_ARRAY, myExplorer.getSelectedFiles());
+ dataSink.set(FileSystemTree.DATA_KEY, myExplorer);
});
}
}
diff --git a/xml-impl/src/main/java/consulo/xml/util/xml/ui/AbstractTableView.java b/xml-impl/src/main/java/consulo/xml/util/xml/ui/AbstractTableView.java
index dec8609f..26c5a8d9 100644
--- a/xml-impl/src/main/java/consulo/xml/util/xml/ui/AbstractTableView.java
+++ b/xml-impl/src/main/java/consulo/xml/util/xml/ui/AbstractTableView.java
@@ -15,8 +15,9 @@
*/
package consulo.xml.util.xml.ui;
+import consulo.application.HelpManager;
import consulo.dataContext.DataSink;
-import consulo.dataContext.TypeSafeDataProvider;
+import consulo.dataContext.UiDataProvider;
import consulo.language.editor.PlatformDataKeys;
import consulo.platform.base.icon.PlatformIconGroup;
import consulo.project.Project;
@@ -52,7 +53,7 @@
/**
* @author peter
*/
-public abstract class AbstractTableView extends JPanel implements TypeSafeDataProvider {
+public abstract class AbstractTableView extends JPanel implements UiDataProvider {
private final MyTableView myTable = new MyTableView();
private final String myHelpID;
private final String myEmptyPaneText;
@@ -224,10 +225,9 @@ public final ListTableModel getTableModel() {
return myTableModel;
}
- public void calcData(Key> key, DataSink sink) {
- if (PlatformDataKeys.HELP_ID == key) {
- sink.put(PlatformDataKeys.HELP_ID, getHelpId());
- }
+ @Override
+ public void uiDataSnapshot(DataSink dataSink) {
+ dataSink.set(HelpManager.HELP_ID, getHelpId());
}
private String getHelpId() {
diff --git a/xml-impl/src/main/java/consulo/xml/util/xml/ui/DomCollectionControl.java b/xml-impl/src/main/java/consulo/xml/util/xml/ui/DomCollectionControl.java
index 5ad73df1..0dcf2647 100644
--- a/xml-impl/src/main/java/consulo/xml/util/xml/ui/DomCollectionControl.java
+++ b/xml-impl/src/main/java/consulo/xml/util/xml/ui/DomCollectionControl.java
@@ -18,7 +18,7 @@
import consulo.application.Application;
import consulo.application.Result;
import consulo.dataContext.DataSink;
-import consulo.dataContext.TypeSafeDataProvider;
+import consulo.dataContext.UiDataProvider;
import consulo.language.editor.WriteCommandAction;
import consulo.language.psi.PsiFile;
import consulo.language.psi.PsiUtilCore;
@@ -40,6 +40,7 @@
import consulo.xml.util.xml.highlighting.DomElementProblemDescriptor;
import consulo.xml.util.xml.reflect.DomCollectionChildDescription;
import consulo.xml.util.xml.ui.actions.DefaultAddAction;
+import jakarta.annotation.Nonnull;
import org.jspecify.annotations.Nullable;
import javax.swing.*;
@@ -52,7 +53,7 @@
/**
* @author peter
*/
-public class DomCollectionControl extends DomUIControl implements Highlightable, TypeSafeDataProvider {
+public class DomCollectionControl extends DomUIControl implements Highlightable, UiDataProvider {
private static final Key DOM_COLLECTION_CONTROL = Key.create("DomCollectionControl");
private final EventDispatcher myDispatcher = EventDispatcher.create(CommitListener.class);
@@ -145,10 +146,8 @@ public void navigate(DomElement element) {
}
@Override
- public void calcData(Key> key, DataSink sink) {
- if (DOM_COLLECTION_CONTROL.equals(key)) {
- sink.put(DOM_COLLECTION_CONTROL, this);
- }
+ public void uiDataSnapshot(DataSink dataSink) {
+ dataSink.set(DOM_COLLECTION_CONTROL, this);
}
@Nullable
diff --git a/xml-impl/src/main/java/consulo/xml/util/xml/ui/DomTableView.java b/xml-impl/src/main/java/consulo/xml/util/xml/ui/DomTableView.java
index 7037db8d..3c526e9c 100644
--- a/xml-impl/src/main/java/consulo/xml/util/xml/ui/DomTableView.java
+++ b/xml-impl/src/main/java/consulo/xml/util/xml/ui/DomTableView.java
@@ -15,17 +15,18 @@
*/
package consulo.xml.util.xml.ui;
-import consulo.dataContext.DataSink;
-import consulo.dataContext.TypeSafeDataProvider;
import consulo.application.Result;
+import consulo.dataContext.DataSink;
+import consulo.dataContext.UiDataProvider;
import consulo.language.editor.WriteCommandAction;
-import consulo.util.collection.SmartList;
-import consulo.xml.util.xml.DomElement;
-import consulo.xml.util.xml.DomUtil;
import consulo.project.Project;
import consulo.ui.ex.action.ActionPlaces;
import consulo.ui.ex.action.DefaultActionGroup;
+import consulo.util.collection.SmartList;
import consulo.util.dataholder.Key;
+import consulo.xml.util.xml.DomElement;
+import consulo.xml.util.xml.DomUtil;
+import jakarta.annotation.Nonnull;
import java.util.List;
@@ -33,41 +34,41 @@
* @author peter
*/
public class DomTableView extends AbstractTableView {
- private final List myCustomDataProviders = new SmartList();
+ private final List myCustomDataProviders = new SmartList<>();
- public DomTableView(final Project project) {
- super(project);
- }
+ public DomTableView(final Project project) {
+ super(project);
+ }
- public DomTableView(final Project project, final String emptyPaneText, final String helpID) {
- super(project, emptyPaneText, helpID);
- }
+ public DomTableView(final Project project, final String emptyPaneText, final String helpID) {
+ super(project, emptyPaneText, helpID);
+ }
- public void addCustomDataProvider(TypeSafeDataProvider provider) {
- myCustomDataProviders.add(provider);
- }
+ public void addCustomDataProvider(UiDataProvider provider) {
+ myCustomDataProviders.add(provider);
+ }
- public void calcData(final Key> key, final DataSink sink) {
- super.calcData(key, sink);
- for (final TypeSafeDataProvider customDataProvider : myCustomDataProviders) {
- customDataProvider.calcData(key, sink);
+ @Override
+ public void uiDataSnapshot(@Nonnull DataSink dataSink) {
+ super.uiDataSnapshot(dataSink);
+ for (final UiDataProvider customDataProvider : myCustomDataProviders) {
+ customDataProvider.uiDataSnapshot(dataSink);
+ }
}
- }
- @Deprecated
- protected final void installPopup(final DefaultActionGroup group) {
- installPopup(ActionPlaces.J2EE_ATTRIBUTES_VIEW_POPUP, group);
- }
+ @Deprecated
+ protected final void installPopup(final DefaultActionGroup group) {
+ installPopup(ActionPlaces.J2EE_ATTRIBUTES_VIEW_POPUP, group);
+ }
- protected void wrapValueSetting(final DomElement domElement, final Runnable valueSetter) {
- if (domElement.isValid()) {
- new WriteCommandAction(getProject(), DomUtil.getFile(domElement)) {
- protected void run(final Result result) throws Throwable {
- valueSetter.run();
+ protected void wrapValueSetting(@Nonnull final DomElement domElement, final Runnable valueSetter) {
+ if (domElement.isValid()) {
+ new WriteCommandAction(getProject(), DomUtil.getFile(domElement)) {
+ protected void run(final Result result) throws Throwable {
+ valueSetter.run();
+ }
+ }.execute();
+ fireChanged();
}
- }.execute();
- fireChanged();
}
- }
-
}
diff --git a/xml-impl/src/main/java/consulo/xml/util/xml/ui/DomUIFactoryImpl.java b/xml-impl/src/main/java/consulo/xml/util/xml/ui/DomUIFactoryImpl.java
index 438ba1c9..f86c6e68 100644
--- a/xml-impl/src/main/java/consulo/xml/util/xml/ui/DomUIFactoryImpl.java
+++ b/xml-impl/src/main/java/consulo/xml/util/xml/ui/DomUIFactoryImpl.java
@@ -155,10 +155,6 @@ public HighlightingPass[] createPassesForEditor() {
.instantiateMainPasses(psiFile, document)
.toArray(HighlightingPass.EMPTY_ARRAY);
}
-
- public HighlightingPass[] createPassesForVisibleArea() {
- return createPassesForEditor();
- }
};
}