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(); - } }; }