diff --git a/platform/lvcs-impl/api-dump-unreviewed.txt b/platform/lvcs-impl/api-dump-unreviewed.txt index e69800aa14d5..78eb609534f4 100644 --- a/platform/lvcs-impl/api-dump-unreviewed.txt +++ b/platform/lvcs-impl/api-dump-unreviewed.txt @@ -603,7 +603,7 @@ c:com.intellij.history.integration.ui.models.DirectoryHistoryDialogModel f:com.intellij.history.integration.ui.models.EntireFileDifferenceModel - com.intellij.history.integration.ui.models.FileDifferenceModel - (com.intellij.openapi.project.Project,com.intellij.history.integration.IdeaGateway,com.intellij.history.core.tree.Entry,com.intellij.history.core.tree.Entry,Z):V -f:com.intellij.history.integration.ui.models.EntireFileHistoryDialogModel +c:com.intellij.history.integration.ui.models.EntireFileHistoryDialogModel - com.intellij.history.integration.ui.models.FileHistoryDialogModel - (com.intellij.openapi.project.Project,com.intellij.history.integration.IdeaGateway,com.intellij.history.core.LocalHistoryFacade,com.intellij.openapi.vfs.VirtualFile):V - getDifferenceModel():com.intellij.history.integration.ui.models.FileDifferenceModel @@ -643,6 +643,7 @@ a:com.intellij.history.integration.ui.models.HistoryDialogModel - p:collectRevisionData():com.intellij.history.integration.ui.models.RevisionData - p:createChange(com.intellij.history.core.revisions.Difference):com.intellij.openapi.vcs.changes.Change - a:createReverter():com.intellij.history.integration.revertion.Reverter +- p:createRootEntry():com.intellij.history.core.tree.RootEntry - getChanges():java.util.List - getCurrentRevision():com.intellij.history.core.revisions.Revision - p:getDifferences():java.util.List @@ -809,9 +810,10 @@ com.intellij.history.integration.ui.views.RevisionsList$SelectionListener f:com.intellij.history.integration.ui.views.SelectionHistoryDialog - com.intellij.history.integration.ui.views.FileHistoryDialog - (com.intellij.openapi.project.Project,com.intellij.history.integration.IdeaGateway,com.intellij.openapi.vfs.VirtualFile,I,I):V -f:com.intellij.history.integration.ui.views.SelectionHistoryDialogModel +c:com.intellij.history.integration.ui.views.SelectionHistoryDialogModel - com.intellij.history.integration.ui.models.FileHistoryDialogModel - (com.intellij.openapi.project.Project,com.intellij.history.integration.IdeaGateway,com.intellij.history.core.LocalHistoryFacade,com.intellij.openapi.vfs.VirtualFile,I,I):V +- p:collectRevisionData():com.intellij.history.integration.ui.models.RevisionData - createReverter():com.intellij.history.integration.revertion.Reverter - filterContents(java.lang.String):java.util.Set - getDifferenceModel():com.intellij.history.integration.ui.models.FileDifferenceModel diff --git a/platform/lvcs-impl/src/com/intellij/history/integration/ui/models/EntireFileHistoryDialogModel.java b/platform/lvcs-impl/src/com/intellij/history/integration/ui/models/EntireFileHistoryDialogModel.java index 927b2152a09c..d9c70f4d241e 100644 --- a/platform/lvcs-impl/src/com/intellij/history/integration/ui/models/EntireFileHistoryDialogModel.java +++ b/platform/lvcs-impl/src/com/intellij/history/integration/ui/models/EntireFileHistoryDialogModel.java @@ -7,7 +7,7 @@ import com.intellij.history.integration.IdeaGateway; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; -public final class EntireFileHistoryDialogModel extends FileHistoryDialogModel { +public class EntireFileHistoryDialogModel extends FileHistoryDialogModel { public EntireFileHistoryDialogModel(Project p, IdeaGateway gw, LocalHistoryFacade vcs, VirtualFile f) { super(p, gw, vcs, f); } diff --git a/platform/lvcs-impl/src/com/intellij/history/integration/ui/models/HistoryDialogModel.java b/platform/lvcs-impl/src/com/intellij/history/integration/ui/models/HistoryDialogModel.java index e06292ca50f0..5c8fc40d80e9 100644 --- a/platform/lvcs-impl/src/com/intellij/history/integration/ui/models/HistoryDialogModel.java +++ b/platform/lvcs-impl/src/com/intellij/history/integration/ui/models/HistoryDialogModel.java @@ -6,8 +6,10 @@ import com.intellij.history.core.LocalHistoryFacade; import com.intellij.history.core.revisions.Difference; import com.intellij.history.core.revisions.Revision; import com.intellij.history.core.tree.Entry; +import com.intellij.history.core.tree.RootEntry; import com.intellij.history.integration.IdeaGateway; import com.intellij.history.integration.revertion.Reverter; +import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.NlsContexts; import com.intellij.openapi.util.io.FileUtil; @@ -66,7 +68,11 @@ public abstract class HistoryDialogModel { } protected @NotNull RevisionData collectRevisionData() { - return RevisionDataKt.collectRevisionData(myProject, myGateway, myVcs, myFile, myFilter, myBefore); + return RevisionDataKt.collectRevisionData(myProject, myGateway, myVcs, createRootEntry(), myFile, myFilter, myBefore); + } + + protected @NotNull RootEntry createRootEntry() { + return ReadAction.compute(() -> myGateway.createTransientRootEntry()); } public void processContents(@NotNull PairProcessor processor) { diff --git a/platform/lvcs-impl/src/com/intellij/history/integration/ui/models/RevisionData.kt b/platform/lvcs-impl/src/com/intellij/history/integration/ui/models/RevisionData.kt index 7603cd4258ea..3d1d5a334f96 100644 --- a/platform/lvcs-impl/src/com/intellij/history/integration/ui/models/RevisionData.kt +++ b/platform/lvcs-impl/src/com/intellij/history/integration/ui/models/RevisionData.kt @@ -6,8 +6,8 @@ import com.intellij.history.core.RevisionsCollector import com.intellij.history.core.processContents import com.intellij.history.core.revisions.CurrentRevision import com.intellij.history.core.revisions.Revision +import com.intellij.history.core.tree.RootEntry import com.intellij.history.integration.IdeaGateway -import com.intellij.openapi.application.runReadAction import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFile import com.intellij.platform.lvcs.impl.RevisionId @@ -22,18 +22,14 @@ internal fun Revision.toRevisionId() = if (changeSetId == null) RevisionId.Curre internal fun collectRevisionData(project: Project, gateway: IdeaGateway, facade: LocalHistoryFacade, + root: RootEntry, file: VirtualFile, filter: String? = null, before: Boolean = true): RevisionData { - return runReadAction { - gateway.registerUnsavedDocuments(facade) - - val root = gateway.createTransientRootEntry() - val path = gateway.getPathOrUrl(file) - - val revisionItems = mergeLabelsWithRevisions(RevisionsCollector.collect(facade, root, path, project.getLocationHash(), filter, before)) - RevisionData(CurrentRevision(root, path), revisionItems) - } + gateway.registerUnsavedDocuments(facade) + val path = gateway.getPathOrUrl(file) + val revisionItems = mergeLabelsWithRevisions(RevisionsCollector.collect(facade, root, path, project.getLocationHash(), filter, before)) + return RevisionData(CurrentRevision(root, path), revisionItems) } private fun mergeLabelsWithRevisions(revisions: List): List { diff --git a/platform/lvcs-impl/src/com/intellij/history/integration/ui/views/SelectionHistoryDialogModel.java b/platform/lvcs-impl/src/com/intellij/history/integration/ui/views/SelectionHistoryDialogModel.java index 06866edcb4a2..b6d62aaf2d88 100644 --- a/platform/lvcs-impl/src/com/intellij/history/integration/ui/views/SelectionHistoryDialogModel.java +++ b/platform/lvcs-impl/src/com/intellij/history/integration/ui/views/SelectionHistoryDialogModel.java @@ -29,7 +29,7 @@ import org.jetbrains.annotations.NotNull; import java.util.Set; -public final class SelectionHistoryDialogModel extends FileHistoryDialogModel { +public class SelectionHistoryDialogModel extends FileHistoryDialogModel { private RevisionSelectionCalculator myCalculatorCache; private final int myFrom; private final int myTo; diff --git a/platform/lvcs-impl/testSrc/com/intellij/history/integration/IntegrationTestCase.java b/platform/lvcs-impl/testSrc/com/intellij/history/integration/IntegrationTestCase.java index a52be332d040..3b97021dde9a 100644 --- a/platform/lvcs-impl/testSrc/com/intellij/history/integration/IntegrationTestCase.java +++ b/platform/lvcs-impl/testSrc/com/intellij/history/integration/IntegrationTestCase.java @@ -140,10 +140,14 @@ public abstract class IntegrationTestCase extends HeavyPlatformTestCase { ApplicationManager.getApplication().runWriteAction(() -> document.setText(text)); } - protected LocalHistoryFacade getVcs() { + public @NotNull LocalHistoryFacade getVcs() { return LocalHistoryImpl.getInstanceImpl().getFacade(); } + public @NotNull IdeaGateway getGateway() { + return myGateway; + } + /** * Includes revisions for all ChangeSets plus a current revision. */ @@ -172,7 +176,7 @@ public abstract class IntegrationTestCase extends HeavyPlatformTestCase { return LocalHistoryTestCase.getEntryFor(getVcs(), getRootEntry(), revisionId, f.getPath()); } - protected RootEntry getRootEntry() { + public @NotNull RootEntry getRootEntry() { return myGateway.createTransientRootEntryForPath(myGateway.getPathOrUrl(myRoot), true); } diff --git a/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/DirectoryHistoryDialogModelTest.java b/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/DirectoryHistoryDialogModelTest.java index e9cba08e57a3..a82ff59e55d2 100644 --- a/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/DirectoryHistoryDialogModelTest.java +++ b/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/DirectoryHistoryDialogModelTest.java @@ -11,6 +11,8 @@ import com.intellij.openapi.vfs.VirtualFile; import java.io.IOException; import java.util.List; +import static com.intellij.history.integration.ui.HistoryDialogModelsKt.createDirectoryModel; + public class DirectoryHistoryDialogModelTest extends LocalHistoryUITestCase { private DirectoryHistoryDialogModel m; @@ -46,6 +48,6 @@ public class DirectoryHistoryDialogModelTest extends LocalHistoryUITestCase { } private void initModelFor(VirtualFile dir) { - m = new DirectoryHistoryDialogModel(myProject, myGateway, getVcs(), dir); + m = createDirectoryModel(this, dir); } } diff --git a/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/DirectoryHistoryDialogPatchCreationTest.java b/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/DirectoryHistoryDialogPatchCreationTest.java index 403a264bdee8..cdf7efb8b3a1 100644 --- a/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/DirectoryHistoryDialogPatchCreationTest.java +++ b/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/DirectoryHistoryDialogPatchCreationTest.java @@ -10,11 +10,12 @@ import com.intellij.openapi.vcs.changes.patch.PatchWriter; import java.nio.file.Path; import java.util.List; +import static com.intellij.history.integration.ui.HistoryDialogModelsKt.createDirectoryModel; import static org.assertj.core.api.Assertions.assertThat; public class DirectoryHistoryDialogPatchCreationTest extends PatchingTestCase { public void testPatchCreation() throws Exception { - DirectoryHistoryDialogModel m = new DirectoryHistoryDialogModel(myProject, myGateway, getVcs(), myRoot); + DirectoryHistoryDialogModel m = createDirectoryModel(this, myRoot); m.clearRevisions(); createChildDataWithoutContent(myRoot, "f0.txt"); createChildDataWithContent(myRoot, "f1.txt"); diff --git a/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/DirectoryHistoryDialogTest.java b/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/DirectoryHistoryDialogTest.java index 94ac91d45423..a971368c5fee 100644 --- a/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/DirectoryHistoryDialogTest.java +++ b/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/DirectoryHistoryDialogTest.java @@ -24,6 +24,8 @@ import com.intellij.openapi.util.Disposer; import java.util.Collections; +import static com.intellij.history.integration.ui.HistoryDialogModelsKt.createDirectoryModel; + public class DirectoryHistoryDialogTest extends LocalHistoryUITestCase { public void testDialogWorks() { DirectoryHistoryDialog d = new DirectoryHistoryDialog(myProject, myGateway, myRoot); @@ -56,7 +58,7 @@ public class DirectoryHistoryDialogTest extends LocalHistoryUITestCase { } private DirectoryHistoryDialogModel createModelAndSelectRevisions(int first, int second) { - DirectoryHistoryDialogModel m = new DirectoryHistoryDialogModel(myProject, myGateway, getVcs(), myRoot); + DirectoryHistoryDialogModel m = createDirectoryModel(this, myRoot); m.selectRevisions(first, second); return m; } diff --git a/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/FileHistoryDialogTest.java b/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/FileHistoryDialogTest.java index 5821fd52ef8f..4d0be0ebc1d0 100644 --- a/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/FileHistoryDialogTest.java +++ b/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/FileHistoryDialogTest.java @@ -18,7 +18,6 @@ package com.intellij.history.integration.ui; import com.intellij.diff.contents.DiffContent; import com.intellij.diff.contents.DocumentContent; -import com.intellij.history.integration.ui.models.EntireFileHistoryDialogModel; import com.intellij.history.integration.ui.models.FileHistoryDialogModel; import com.intellij.history.integration.ui.models.RevisionProcessingProgress; import com.intellij.history.integration.ui.views.FileHistoryDialog; @@ -30,6 +29,8 @@ import com.intellij.util.text.DateFormatUtil; import java.nio.charset.StandardCharsets; import java.util.Date; +import static com.intellij.history.integration.ui.HistoryDialogModelsKt.createFileModel; + public class FileHistoryDialogTest extends LocalHistoryUITestCase { public void testDialogWorks() { VirtualFile file = createChildData(myRoot, "f.txt"); @@ -122,12 +123,8 @@ public class FileHistoryDialogTest extends LocalHistoryUITestCase { return m.getDifferenceModel().getRightDiffContent(RevisionProcessingProgress.EMPTY); } - private FileHistoryDialogModel createFileModel(VirtualFile f) { - return new EntireFileHistoryDialogModel(myProject, myGateway, getVcs(), f); - } - private FileHistoryDialogModel createFileModelAndSelectRevisions(VirtualFile f, int first, int second) { - FileHistoryDialogModel m = createFileModel(f); + FileHistoryDialogModel m = createFileModel(this, f); m.selectRevisions(first, second); return m; } diff --git a/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/HistoryDialogModelTest.java b/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/HistoryDialogModelTest.java index 7cd94e9b8f66..a28004b1a97c 100644 --- a/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/HistoryDialogModelTest.java +++ b/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/HistoryDialogModelTest.java @@ -2,6 +2,7 @@ package com.intellij.history.integration.ui; import com.intellij.history.core.changes.ChangeSet; +import com.intellij.history.core.tree.RootEntry; import com.intellij.history.integration.IntegrationTestCase; import com.intellij.history.integration.revertion.Reverter; import com.intellij.history.integration.ui.models.HistoryDialogModel; @@ -142,6 +143,11 @@ public class HistoryDialogModelTest extends IntegrationTestCase { private void initModelFor() { m = new HistoryDialogModel(myProject, myGateway, getVcs(), f) { + @Override + protected @NotNull RootEntry createRootEntry() { + return getRootEntry(); + } + @Override public Reverter createReverter() { throw new UnsupportedOperationException(); diff --git a/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/HistoryDialogModels.kt b/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/HistoryDialogModels.kt new file mode 100644 index 000000000000..9ccde56c9129 --- /dev/null +++ b/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/HistoryDialogModels.kt @@ -0,0 +1,33 @@ +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.history.integration.ui + +import com.intellij.history.core.tree.RootEntry +import com.intellij.history.integration.IntegrationTestCase +import com.intellij.history.integration.ui.models.DirectoryHistoryDialogModel +import com.intellij.history.integration.ui.models.EntireFileHistoryDialogModel +import com.intellij.history.integration.ui.views.SelectionHistoryDialogModel +import com.intellij.openapi.vfs.VirtualFile + +fun IntegrationTestCase.createFileModel(file: VirtualFile): EntireFileHistoryDialogModel { + return object : EntireFileHistoryDialogModel(project, gateway, vcs, file) { + override fun createRootEntry(): RootEntry { + return this@createFileModel.rootEntry + } + } +} + +fun IntegrationTestCase.createDirectoryModel(directory: VirtualFile): DirectoryHistoryDialogModel { + return object : DirectoryHistoryDialogModel(project, gateway, vcs, directory) { + override fun createRootEntry(): RootEntry { + return this@createDirectoryModel.rootEntry + } + } +} + +fun IntegrationTestCase.createSelectionModel(file: VirtualFile, from: Int, to: Int): SelectionHistoryDialogModel { + return object : SelectionHistoryDialogModel(project, gateway, vcs, file, from, to) { + override fun createRootEntry(): RootEntry { + return this@createSelectionModel.rootEntry + } + } +} \ No newline at end of file diff --git a/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/SelectionHistoryDialogTest.java b/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/SelectionHistoryDialogTest.java index db214dc1c867..fb9f2653fcd8 100644 --- a/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/SelectionHistoryDialogTest.java +++ b/platform/lvcs-impl/testSrc/com/intellij/history/integration/ui/SelectionHistoryDialogTest.java @@ -15,6 +15,8 @@ import com.intellij.openapi.vfs.VirtualFile; import java.nio.charset.StandardCharsets; +import static com.intellij.history.integration.ui.HistoryDialogModelsKt.createDirectoryModel; +import static com.intellij.history.integration.ui.HistoryDialogModelsKt.createSelectionModel; import static org.easymock.EasyMock.*; public class SelectionHistoryDialogTest extends LocalHistoryUITestCase { @@ -112,7 +114,7 @@ public class SelectionHistoryDialogTest extends LocalHistoryUITestCase { } private void initModelOnSecondLineAndSelectRevisions(int first, int second) { - m = new SelectionHistoryDialogModel(myProject, myGateway, getVcs(), f, 1, 1); + m = createSelectionModel(this, f, 1, 1); m.selectRevisions(first, second); dm = m.getDifferenceModel(); }