mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
[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:
committed by
intellij-monorepo-bot
parent
c580b1842a
commit
0a34a0f074
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 }
|
||||
|
||||
|
||||
@@ -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")) {
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user