[diff] Add an option to include diffs in history only when the diff is still open (IJPL-157316)

GitOrigin-RevId: ed8dab6b00e5af06207c2d1772996a0964509ad2
This commit is contained in:
Chris Lemaire
2024-06-26 12:12:31 +02:00
committed by intellij-monorepo-bot
parent c580b1842a
commit 0a34a0f074
8 changed files with 61 additions and 18 deletions

View File

@@ -105,7 +105,10 @@ configurable.ExternalDiffSettingsConfigurable.display.name=External Diff Tools
settings.diff.name=Diff
settings.context.lines=Context lines:
settings.go.to.the.next.file.after.reaching.last.change=Go to the next file after reaching last change
settings.diff-included-in-history=Include diffs in navigation history:
settings.diffIncludedInHistory=Include diffs in navigation history:
settings.diffIncludedInHistory.always=Always
settings.diffIncludedInHistory.onlyIfOpen=Until the diff is closed
settings.diffIncludedInHistory.never=Never
settings.merge.text=Merge
settings.automatically.apply.non.conflicting.changes=Automatically apply non-conflicting changes
settings.automatically.resolve.imports.conflicts=Automatically resolve conflicts in import statements

View File

@@ -317,7 +317,6 @@ f:com.intellij.diff.editor.DiffEditorViewerFileEditor$Companion
a:com.intellij.diff.editor.DiffFileEditorBase
- com.intellij.diff.util.FileEditorBase
- sf:Companion:com.intellij.diff.editor.DiffFileEditorBase$Companion
- sf:DIFF_IN_NAVIGATION_HISTORY_KEY:java.lang.String
- <init>(com.intellij.openapi.vfs.VirtualFile,javax.swing.JComponent,com.intellij.openapi.util.CheckedDisposable):V
- getComponent():javax.swing.JComponent
- getFile():com.intellij.openapi.vfs.VirtualFile
@@ -354,13 +353,16 @@ a:com.intellij.diff.editor.DiffVirtualFile
- a:createProcessor(com.intellij.openapi.project.Project):com.intellij.diff.impl.DiffRequestProcessor
- createViewer(com.intellij.openapi.project.Project):com.intellij.diff.impl.DiffEditorViewer
a:com.intellij.diff.editor.DiffVirtualFileBase
- com.intellij.testFramework.LightVirtualFile
- com.intellij.diff.editor.DiffContentVirtualFile
- com.intellij.openapi.fileEditor.impl.IdeDocumentHistoryImpl$OptionallyIncluded
- com.intellij.openapi.vfs.VirtualFileWithoutContent
- com.intellij.testFramework.LightVirtualFile
- sf:Companion:com.intellij.diff.editor.DiffVirtualFileBase$Companion
- sf:ESCAPE_HANDLER:com.intellij.openapi.util.Key
- <init>(java.lang.String):V
- createEscapeHandler():com.intellij.openapi.actionSystem.AnAction
- isIncludedInDocumentHistory(com.intellij.openapi.project.Project):Z
- isIncludedInEditorHistory(com.intellij.openapi.project.Project):Z
- isWritable():Z
f:com.intellij.diff.editor.DiffVirtualFileBase$Companion
- f:turnOffReopeningWindow(com.intellij.openapi.vfs.VirtualFile):V
@@ -542,13 +544,23 @@ f:com.intellij.diff.impl.DiffSettingsHolder$DiffSettings
- sf:getSettings():com.intellij.diff.impl.DiffSettingsHolder$DiffSettings
- sf:getSettings(java.lang.String):com.intellij.diff.impl.DiffSettingsHolder$DiffSettings
- f:isGoToNextFileOnNextDifference():Z
- f:isIncludedInNavigationHistory():com.intellij.diff.impl.DiffSettingsHolder$IncludeInNavigationHistory
- f:isSyncBinaryEditorSettings():Z
- f:setDiffToolsOrder(java.util.List):V
- f:setGoToNextFileOnNextDifference(Z):V
- f:setIncludedInNavigationHistory(com.intellij.diff.impl.DiffSettingsHolder$IncludeInNavigationHistory):V
- f:setSyncBinaryEditorSettings(Z):V
f:com.intellij.diff.impl.DiffSettingsHolder$DiffSettings$Companion
- f:getSettings():com.intellij.diff.impl.DiffSettingsHolder$DiffSettings
- f:getSettings(java.lang.String):com.intellij.diff.impl.DiffSettingsHolder$DiffSettings
e:com.intellij.diff.impl.DiffSettingsHolder$IncludeInNavigationHistory
- java.lang.Enum
- sf:Always:com.intellij.diff.impl.DiffSettingsHolder$IncludeInNavigationHistory
- sf:Never:com.intellij.diff.impl.DiffSettingsHolder$IncludeInNavigationHistory
- sf:OnlyIfOpen:com.intellij.diff.impl.DiffSettingsHolder$IncludeInNavigationHistory
- s:getEntries():kotlin.enums.EnumEntries
- s:valueOf(java.lang.String):com.intellij.diff.impl.DiffSettingsHolder$IncludeInNavigationHistory
- s:values():com.intellij.diff.impl.DiffSettingsHolder$IncludeInNavigationHistory[]
f:com.intellij.diff.impl.DiffSettingsHolder$PlaceSettings
- <init>():V
- <init>(java.util.List,Z):V
@@ -565,15 +577,18 @@ f:com.intellij.diff.impl.DiffSettingsHolder$PlaceSettings
- f:setSYNC_BINARY_EDITOR_SETTINGS(Z):V
f:com.intellij.diff.impl.DiffSettingsHolder$SharedSettings
- <init>():V
- <init>(Z):V
- b:<init>(Z,I,kotlin.jvm.internal.DefaultConstructorMarker):V
- <init>(Z,com.intellij.diff.impl.DiffSettingsHolder$IncludeInNavigationHistory):V
- b:<init>(Z,com.intellij.diff.impl.DiffSettingsHolder$IncludeInNavigationHistory,I,kotlin.jvm.internal.DefaultConstructorMarker):V
- f:component1():Z
- f:copy(Z):com.intellij.diff.impl.DiffSettingsHolder$SharedSettings
- bs:copy$default(com.intellij.diff.impl.DiffSettingsHolder$SharedSettings,Z,I,java.lang.Object):com.intellij.diff.impl.DiffSettingsHolder$SharedSettings
- f:component2():com.intellij.diff.impl.DiffSettingsHolder$IncludeInNavigationHistory
- f:copy(Z,com.intellij.diff.impl.DiffSettingsHolder$IncludeInNavigationHistory):com.intellij.diff.impl.DiffSettingsHolder$SharedSettings
- bs:copy$default(com.intellij.diff.impl.DiffSettingsHolder$SharedSettings,Z,com.intellij.diff.impl.DiffSettingsHolder$IncludeInNavigationHistory,I,java.lang.Object):com.intellij.diff.impl.DiffSettingsHolder$SharedSettings
- equals(java.lang.Object):Z
- f:getGO_TO_NEXT_FILE_ON_NEXT_DIFFERENCE():Z
- f:getIS_INCLUDED_IN_NAVIGATION_HISTORY():com.intellij.diff.impl.DiffSettingsHolder$IncludeInNavigationHistory
- hashCode():I
- f:setGO_TO_NEXT_FILE_ON_NEXT_DIFFERENCE(Z):V
- f:setIS_INCLUDED_IN_NAVIGATION_HISTORY(com.intellij.diff.impl.DiffSettingsHolder$IncludeInNavigationHistory):V
f:com.intellij.diff.impl.DiffSettingsHolder$State
- PLACES_MAP:java.util.TreeMap
- SHARED_SETTINGS:com.intellij.diff.impl.DiffSettingsHolder$SharedSettings

View File

@@ -43,7 +43,7 @@ open class DiffEditorViewerFileEditor(
}
override fun getState(level: FileEditorStateLevel): FileEditorState {
if (!settings.isIncludedInNavigationHistory) {
if (settings.isIncludedInNavigationHistory == DiffSettingsHolder.IncludeInNavigationHistory.Never) {
return FileEditorState.INSTANCE
}
@@ -51,7 +51,9 @@ open class DiffEditorViewerFileEditor(
}
override fun setState(state: FileEditorState) {
if (!settings.isIncludedInNavigationHistory) return
if (settings.isIncludedInNavigationHistory == DiffSettingsHolder.IncludeInNavigationHistory.Never) {
return
}
editorViewer.setState(state)
}

View File

@@ -2,9 +2,12 @@
package com.intellij.diff.editor
import com.intellij.diff.impl.DiffSettingsHolder
import com.intellij.diff.impl.DiffSettingsHolder.IncludeInNavigationHistory
import com.intellij.diff.impl.DiffWindowBase
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.fileEditor.impl.IdeDocumentHistoryImpl
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Key
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.VirtualFileWithoutContent
@@ -22,8 +25,13 @@ abstract class DiffVirtualFileBase(name: String) :
turnOffReopeningWindow()
}
override fun isIncludedInDocumentHistory(): Boolean =
settings.isIncludedInNavigationHistory
override fun isIncludedInDocumentHistory(project: Project): Boolean =
when (settings.isIncludedInNavigationHistory) {
IncludeInNavigationHistory.Never -> false
IncludeInNavigationHistory.Always -> true
IncludeInNavigationHistory.OnlyIfOpen ->
FileEditorManager.getInstance(project).isFileOpen(this) // TODO: Check performance
}
override fun isWritable(): Boolean = false

View File

@@ -14,9 +14,15 @@ import java.util.*
@State(name = "DiffSettings", storages = [(Storage(value = DiffUtil.DIFF_CONFIG))], category = SettingsCategory.CODE)
class DiffSettingsHolder : PersistentStateComponent<DiffSettingsHolder.State> {
enum class IncludeInNavigationHistory {
Always,
OnlyIfOpen,
Never;
}
data class SharedSettings(
var GO_TO_NEXT_FILE_ON_NEXT_DIFFERENCE: Boolean = true,
var IS_INCLUDED_IN_NAVIGATION_HISTORY: Boolean = true
var IS_INCLUDED_IN_NAVIGATION_HISTORY: IncludeInNavigationHistory = IncludeInNavigationHistory.Always
)
data class PlaceSettings(
@@ -36,7 +42,8 @@ class DiffSettingsHolder : PersistentStateComponent<DiffSettingsHolder.State> {
get() = SHARED_SETTINGS.GO_TO_NEXT_FILE_ON_NEXT_DIFFERENCE
set(value) { SHARED_SETTINGS.GO_TO_NEXT_FILE_ON_NEXT_DIFFERENCE = value }
var isIncludedInNavigationHistory: Boolean
// TODO: Trigger IdeDocumentHistoryImpl#removeInvalidFilesFrom on change somehow
var isIncludedInNavigationHistory: IncludeInNavigationHistory
get() = SHARED_SETTINGS.IS_INCLUDED_IN_NAVIGATION_HISTORY
set(value) { SHARED_SETTINGS.IS_INCLUDED_IN_NAVIGATION_HISTORY = value }

View File

@@ -8,9 +8,9 @@ import com.intellij.diff.tools.util.base.TextDiffSettingsHolder.TextDiffSettings
import com.intellij.openapi.diff.DiffBundle.message
import com.intellij.openapi.options.BoundSearchableConfigurable
import com.intellij.openapi.ui.DialogPanel
import com.intellij.ui.SimpleListCellRenderer
import com.intellij.ui.dsl.builder.*
import javax.swing.JLabel
import javax.swing.ListCellRenderer
internal class DiffSettingsConfigurable : BoundSearchableConfigurable(
message("configurable.DiffSettingsConfigurable.display.name"),
@@ -38,8 +38,15 @@ internal class DiffSettingsConfigurable : BoundSearchableConfigurable(
.bindSelected(diffSettings::isGoToNextFileOnNextDifference)
}
row {
checkBox(message("settings.diff-included-in-history"))
.bindSelected(diffSettings::isIncludedInNavigationHistory)
label(message("settings.diffIncludedInHistory"))
comboBox(IncludeInNavigationHistory.entries, SimpleListCellRenderer.create("") { option ->
when (option) {
IncludeInNavigationHistory.Always -> message("settings.diffIncludedInHistory.always")
IncludeInNavigationHistory.OnlyIfOpen -> message("settings.diffIncludedInHistory.onlyIfOpen")
IncludeInNavigationHistory.Never -> message("settings.diffIncludedInHistory.never")
null -> ""
}
}).bindItem(diffSettings::isIncludedInNavigationHistory.toNullableProperty())
}
}
group(message("settings.merge.text")) {

View File

@@ -574,7 +574,7 @@ public class IdeDocumentHistoryImpl extends IdeDocumentHistory
private boolean removeInvalidFilesFrom(@NotNull List<PlaceInfo> backPlaces) {
return backPlaces
.removeIf(info -> (info.myFile instanceof OptionallyIncluded &&
!((OptionallyIncluded)info.myFile).isIncludedInDocumentHistory()) ||
!((OptionallyIncluded)info.myFile).isIncludedInDocumentHistory(project)) ||
!info.myFile.isValid());
}

View File

@@ -5,6 +5,7 @@ import com.intellij.mock.Mock;
import com.intellij.openapi.fileEditor.*;
import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
import com.intellij.openapi.fileEditor.ex.FileEditorWithProvider;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.testFramework.HeavyPlatformTestCase;
@@ -271,7 +272,7 @@ public class IdeDocumentHistoryTest extends HeavyPlatformTestCase {
boolean myIsIncludedInDocumentHistory = true;
@Override
public boolean isIncludedInDocumentHistory() {
public boolean isIncludedInDocumentHistory(@NotNull Project project) {
return myIsIncludedInDocumentHistory;
}
}