[collab]: Adjust lineToLocation for unified diff to return null when exact matching is not possible (#IJPL-82603)

GitOrigin-RevId: d68988bb49157c84f4d49af1f3cd12ec0648dd9d
This commit is contained in:
Bartosz Janusz
2026-02-05 17:00:52 +00:00
committed by intellij-monorepo-bot
parent beab39411f
commit bd4d43d790
3 changed files with 14 additions and 1 deletions
@@ -221,7 +221,7 @@ suspend fun DiffViewerBase.showCodeReview(editorRenderer: EditorCodeReviewRender
null,
{ (side, lineIdx) -> viewer.transferLineToOnesideStrict(side, lineIdx).takeIf { it >= 0 } },
{ lineIdx ->
val (indices, side) = viewer.transferLineFromOneside(lineIdx)
val (indices, side) = viewer.transferLineFromOnesideStrict(lineIdx) ?: return@editorRenderer null
side.select(indices).takeIf { it >= 0 }?.let { side to it }
},
{ line ->
+1
View File
@@ -841,6 +841,7 @@ c:com.intellij.diff.tools.fragmented.UnifiedDiffViewer
- scrollToLine(com.intellij.diff.util.Side,I):V
- transferLineFromOneside(I):com.intellij.openapi.util.Pair
- transferLineFromOneside(com.intellij.diff.util.Side,I):I
- transferLineFromOnesideStrict(I):com.intellij.openapi.util.Pair
- transferLineFromOnesideStrict(com.intellij.diff.util.Side,I):I
- transferLineToOneside(com.intellij.diff.util.Side,I):I
- transferLineToOnesideStrict(com.intellij.diff.util.Side,I):I
@@ -582,6 +582,17 @@ public class UnifiedDiffViewer extends ListenerDiffViewerBase implements EditorD
* This convertor returns 'good enough' position, even if exact matching is impossible
*/
public @NotNull Pair<int[], @NotNull Side> transferLineFromOneside(int line) {
return Objects.requireNonNull(transferLineFromOneside(line, false));
}
/*
* This convertor returns position strictly. Returns null if exact matching is not possible
*/
public @Nullable Pair<int[], @NotNull Side> transferLineFromOnesideStrict(int line) {
return transferLineFromOneside(line, true);
}
private @Nullable Pair<int[], @NotNull Side> transferLineFromOneside(int line, boolean strictConversion) {
int[] lines = new int[2];
ChangedBlockData blockData = myModel.getData();
@@ -599,6 +610,7 @@ public class UnifiedDiffViewer extends ListenerDiffViewerBase implements EditorD
lines[1] = lineConvertor2.convert(line);
if (lines[0] == -1 && lines[1] == -1) {
if(strictConversion) return null;
lines[0] = lineConvertor1.convertApproximate(line);
lines[1] = lineConvertor2.convertApproximate(line);
}