diff --git a/platform/diff-api/src/com/intellij/diff/util/Side.java b/platform/diff-api/src/com/intellij/diff/util/Side.java index 6b23d409f484..04bb08c2ee42 100644 --- a/platform/diff-api/src/com/intellij/diff/util/Side.java +++ b/platform/diff-api/src/com/intellij/diff/util/Side.java @@ -18,6 +18,7 @@ package com.intellij.diff.util; import com.intellij.diff.fragments.DiffFragment; import com.intellij.diff.fragments.LineFragment; import com.intellij.openapi.util.Couple; +import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -65,6 +66,7 @@ public enum Side { } @Nullable + @Contract("!null, !null -> !null; null, null -> null") public T select(@Nullable T left, @Nullable T right) { return isLeft() ? left : right; } @@ -79,7 +81,6 @@ public enum Side { return array[myIndex]; } - @Nullable public T select(@NotNull T[] array) { assert array.length == 2; return array[myIndex]; @@ -91,7 +92,6 @@ public enum Side { return array[myIndex]; } - @Nullable public T select(@NotNull List list) { assert list.size() == 2; return list.get(myIndex); @@ -103,7 +103,6 @@ public enum Side { return list.get(myIndex); } - @Nullable public T select(@NotNull Couple region) { return isLeft() ? region.first : region.second; } diff --git a/platform/diff-api/src/com/intellij/diff/util/ThreeSide.java b/platform/diff-api/src/com/intellij/diff/util/ThreeSide.java index 9ac735d67101..c1041273c86c 100644 --- a/platform/diff-api/src/com/intellij/diff/util/ThreeSide.java +++ b/platform/diff-api/src/com/intellij/diff/util/ThreeSide.java @@ -15,6 +15,7 @@ */ package com.intellij.diff.util; +import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -40,10 +41,12 @@ public enum ThreeSide { // @Nullable - public T select(@Nullable T left, @NotNull T base, @Nullable T right) { + @Contract("!null, !null, !null -> !null; null, null, null -> null") + public T select(@Nullable T left, @Nullable T base, @Nullable T right) { if (myIndex == 0) return left; if (myIndex == 1) return base; if (myIndex == 2) return right; + //noinspection Contract throw new IllegalStateException(); } @@ -60,7 +63,6 @@ public enum ThreeSide { return array[myIndex]; } - @Nullable public T select(@NotNull T[] array) { assert array.length == 3; return array[myIndex]; @@ -72,7 +74,6 @@ public enum ThreeSide { return array[myIndex]; } - @Nullable public T select(@NotNull List list) { assert list.size() == 3; return list.get(myIndex); diff --git a/platform/diff-impl/src/com/intellij/diff/comparison/MergeUtil.java b/platform/diff-impl/src/com/intellij/diff/comparison/MergeUtil.java index 88ea7ea4fabd..9beaa9ee1963 100644 --- a/platform/diff-impl/src/com/intellij/diff/comparison/MergeUtil.java +++ b/platform/diff-impl/src/com/intellij/diff/comparison/MergeUtil.java @@ -241,7 +241,7 @@ public class MergeUtil { @NotNull private Interval getRange(@NotNull ThreeSide side) { - return side.selectNotNull(myLeft, myBase, myRight); + return side.select(myLeft, myBase, myRight); } public int getStartLine(@NotNull ThreeSide side) { diff --git a/platform/diff-impl/src/com/intellij/diff/tools/fragmented/OnesideEditorHighlighter.java b/platform/diff-impl/src/com/intellij/diff/tools/fragmented/OnesideEditorHighlighter.java index 26e72197bad7..a7ade89b5293 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/fragmented/OnesideEditorHighlighter.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/fragmented/OnesideEditorHighlighter.java @@ -69,7 +69,7 @@ public class OnesideEditorHighlighter implements EditorHighlighter { offset = base.getStartOffset(); } - HighlighterIterator it = range.getSide().selectNotNull(it1, it2); + HighlighterIterator it = range.getSide().select(it1, it2); while (!it.atEnd() && changed.getStartOffset() >= it.getEnd()) { it.advance(); } diff --git a/platform/diff-impl/src/com/intellij/diff/tools/fragmented/OnesideFragmentBuilder.java b/platform/diff-impl/src/com/intellij/diff/tools/fragmented/OnesideFragmentBuilder.java index 07ba5cc7f2b7..ed7b1942d4e4 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/fragmented/OnesideFragmentBuilder.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/fragmented/OnesideFragmentBuilder.java @@ -145,7 +145,7 @@ public class OnesideFragmentBuilder { } private void appendText(@NotNull Side side, int offset1, int offset2, int lines, int startLine1, int startLine2) { - Document document = side.selectNotNull(myDocument1, myDocument2); + Document document = side.select(myDocument1, myDocument2); int newline = document.getTextLength() > offset2 + 1 ? 1 : 0; TextRange base = new TextRange(myBuilder.length(), myBuilder.length() + offset2 - offset1 + newline); diff --git a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleDiffChange.java b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleDiffChange.java index b347c0af93ae..ff04ec25a419 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleDiffChange.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleDiffChange.java @@ -231,9 +231,9 @@ public class SimpleDiffChange { final Document document1 = myEditor1.getDocument(); final Document document2 = myEditor2.getDocument(); - DiffUtil.applyModification(sourceSide.other().selectNotNull(document1, document2), + DiffUtil.applyModification(sourceSide.other().select(document1, document2), getStartLine(sourceSide.other()), getEndLine(sourceSide.other()), - sourceSide.selectNotNull(document1, document2), + sourceSide.select(document1, document2), getStartLine(sourceSide), getEndLine(sourceSide)); destroyHighlighter(); @@ -249,9 +249,9 @@ public class SimpleDiffChange { final Document document1 = myEditor1.getDocument(); final Document document2 = myEditor2.getDocument(); - DiffUtil.applyModification(sourceSide.other().selectNotNull(document1, document2), + DiffUtil.applyModification(sourceSide.other().select(document1, document2), getEndLine(sourceSide.other()), getEndLine(sourceSide.other()), - sourceSide.selectNotNull(document1, document2), + sourceSide.select(document1, document2), getStartLine(sourceSide), getEndLine(sourceSide)); destroyHighlighter(); @@ -265,7 +265,7 @@ public class SimpleDiffChange { private MyGutterOperation createOperation(@NotNull Side side) { assert myEditor1 != null && myEditor2 != null; int offset = side.getStartOffset(myFragment); - EditorEx editor = side.selectNotNull(myEditor1, myEditor2); + EditorEx editor = side.select(myEditor1, myEditor2); RangeHighlighter highlighter = editor.getMarkupModel().addRangeHighlighter(offset, offset, HighlighterLayer.ADDITIONAL_SYNTAX, null, @@ -310,8 +310,8 @@ public class SimpleDiffChange { myCtrlPressed = myViewer.getModifierProvider().isCtrlPressed(); myShiftPressed = myViewer.getModifierProvider().isShiftPressed(); - boolean isEditable = DiffUtil.isEditable(mySide.selectNotNull(myEditor1, myEditor2)); - boolean isOtherEditable = DiffUtil.isEditable(mySide.other().selectNotNull(myEditor1, myEditor2)); + boolean isEditable = DiffUtil.isEditable(mySide.select(myEditor1, myEditor2)); + boolean isOtherEditable = DiffUtil.isEditable(mySide.other().select(myEditor1, myEditor2)); if (myCtrlPressed && myShiftPressed) return null; if ((myShiftPressed || !isOtherEditable) && isEditable) { @@ -357,7 +357,7 @@ public class SimpleDiffChange { @Nullable private GutterIconRenderer createIconRenderer(@NotNull final Side sourceSide, @NotNull final Icon icon, @NotNull final Runnable perform) { assert myEditor1 != null && myEditor2 != null; - if (!DiffUtil.isEditable(sourceSide.other().selectNotNull(myEditor1, myEditor2))) return null; + if (!DiffUtil.isEditable(sourceSide.other().select(myEditor1, myEditor2))) return null; return new GutterIconRenderer() { @NotNull @Override @@ -381,7 +381,7 @@ public class SimpleDiffChange { if (!myIsValid) return; - DiffUtil.executeWriteCommand(sourceSide.other().selectNotNull(document1, document2), project, "Replace change", new Runnable() { + DiffUtil.executeWriteCommand(sourceSide.other().select(document1, document2), project, "Replace change", new Runnable() { @Override public void run() { perform.run(); diff --git a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleDiffViewer.java index 2fb8519cc716..289582d15a0c 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleDiffViewer.java @@ -586,7 +586,7 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { return; } - Editor modifiedEditor = side.other(myModifyOpposite).selectNotNull(myEditor1, myEditor2); + Editor modifiedEditor = side.other(myModifyOpposite).select(myEditor1, myEditor2); if (!DiffUtil.isEditable(modifiedEditor)) { e.getPresentation().setEnabledAndVisible(false); return; @@ -604,7 +604,7 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { final Side side = Side.fromLeft(editor == myEditor1); final List selectedChanges = getSelectedChanges(side); - Editor modifiedEditor = side.other(myModifyOpposite).selectNotNull(myEditor1, myEditor2); + Editor modifiedEditor = side.other(myModifyOpposite).select(myEditor1, myEditor2); String title = e.getPresentation().getText() + " selected changes"; DiffUtil.executeWriteCommand(modifiedEditor.getDocument(), e.getProject(), title, new Runnable() { @Override diff --git a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffChange.java b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffChange.java index 8bae87e66ec7..cf7f3c122558 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffChange.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffChange.java @@ -81,7 +81,7 @@ public class SimpleThreesideDiffChange { // private void createHighlighter(@NotNull ThreeSide side) { - Editor editor = side.selectNotNull(myEditors); + Editor editor = side.select(myEditors); Document document = editor.getDocument(); TextDiffType type = getDiffType(); @@ -208,7 +208,7 @@ public class SimpleThreesideDiffChange { private static CharSequence getRangeContent(@NotNull MergeLineFragment fragment, @NotNull List editors, @NotNull ThreeSide side) { - DocumentEx document = side.selectNotNull(editors).getDocument(); + DocumentEx document = side.select(editors).getDocument(); int line1 = fragment.getStartLine(side); int line2 = fragment.getEndLine(side); return DiffUtil.getLinesContent(document, line1, line2); diff --git a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffViewer.java index 69162f6c3cb8..20e524885f58 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffViewer.java @@ -15,9 +15,6 @@ */ package com.intellij.diff.tools.simple; -import com.intellij.codeInsight.hint.HintManager; -import com.intellij.codeInsight.hint.HintManagerImpl; -import com.intellij.codeInsight.hint.HintUtil; import com.intellij.diff.DiffContext; import com.intellij.diff.comparison.ByLine; import com.intellij.diff.comparison.ComparisonPolicy; @@ -51,7 +48,6 @@ import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.UserDataHolder; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.ui.LightweightHint; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.ButtonlessScrollBarUI; @@ -380,7 +376,7 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewer { @NotNull @Override protected SyncScrollSupport.SyncScrollable getSyncScrollable(@NotNull Side side) { - return side.selectNotNull(mySyncScrollable1, mySyncScrollable2); + return side.select(mySyncScrollable1, mySyncScrollable2); } @NotNull @@ -527,16 +523,15 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewer { @Override protected void processHelper(@NotNull ScrollHelper helper) { - ThreeSide left = mySide.selectNotNull(ThreeSide.LEFT, ThreeSide.BASE); - ThreeSide right = mySide.selectNotNull(ThreeSide.BASE, ThreeSide.RIGHT); + ThreeSide left = mySide.select(ThreeSide.LEFT, ThreeSide.BASE); + ThreeSide right = mySide.select(ThreeSide.BASE, ThreeSide.RIGHT); if (!helper.process(0, 0)) return; for (SimpleThreesideDiffChange diffChange : myDiffChanges) { if (!helper.process(diffChange.getStartLine(left), diffChange.getStartLine(right))) return; if (!helper.process(diffChange.getEndLine(left), diffChange.getEndLine(right))) return; } - helper - .process(left.selectNotNull(myEditors).getDocument().getLineCount(), right.selectNotNull(myEditors).getDocument().getLineCount()); + helper.process(left.select(myEditors).getDocument().getLineCount(), right.select(myEditors).getDocument().getLineCount()); } } @@ -549,8 +544,8 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewer { @Override public void process(@NotNull Handler handler) { - ThreeSide left = mySide.selectNotNull(ThreeSide.LEFT, ThreeSide.BASE); - ThreeSide right = mySide.selectNotNull(ThreeSide.BASE, ThreeSide.RIGHT); + ThreeSide left = mySide.select(ThreeSide.LEFT, ThreeSide.BASE); + ThreeSide right = mySide.select(ThreeSide.BASE, ThreeSide.RIGHT); for (SimpleThreesideDiffChange diffChange : myDiffChanges) { if (!diffChange.getType().isChange(mySide)) continue; @@ -576,8 +571,8 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewer { public void paint(@NotNull Graphics g, @NotNull Component divider) { Graphics2D gg = getDividerGraphics(g, divider); - Editor editor1 = mySide.selectNotNull(myEditors.get(0), myEditors.get(1)); - Editor editor2 = mySide.selectNotNull(myEditors.get(1), myEditors.get(2)); + Editor editor1 = mySide.select(myEditors.get(0), myEditors.get(1)); + Editor editor2 = mySide.select(myEditors.get(1), myEditors.get(2)); //DividerPolygonUtil.paintSimplePolygons(gg, divider.getWidth(), editor1, editor2, myPaintable); DiffDividerDrawUtil.paintPolygons(gg, divider.getWidth(), editor1, editor2, myPaintable); @@ -659,7 +654,7 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewer { } public void paintOnDivider(@NotNull Graphics2D gg, @NotNull Component divider, @NotNull Side side) { - MyPaintable paintable = side.selectNotNull(myPaintable1, myPaintable2); + MyPaintable paintable = side.select(myPaintable1, myPaintable2); paintable.paintOnDivider(gg, divider); } diff --git a/platform/diff-impl/src/com/intellij/diff/tools/util/threeside/ThreesideTextDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/util/threeside/ThreesideTextDiffViewer.java index 462ecddc6a72..f049f9b8f00c 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/util/threeside/ThreesideTextDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/util/threeside/ThreesideTextDiffViewer.java @@ -256,7 +256,7 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { @NotNull public EditorEx getCurrentEditor() { - return myCurrentSide.selectNotNull(myEditors); + return myCurrentSide.select(myEditors); } @NotNull @@ -276,7 +276,7 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { @CalledInAwt protected void scrollToLine(@NotNull ThreeSide side, int line) { - Editor editor = side.selectNotNull(myEditors); + Editor editor = side.select(myEditors); DiffUtil.scrollEditor(editor, line); myCurrentSide = side; } @@ -303,7 +303,7 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { protected OpenFileDescriptor getOpenFileDescriptor() { EditorEx editor = getCurrentEditor(); - DocumentContent content = getCurrentSide().selectNotNull(myActualContents); + DocumentContent content = getCurrentSide().select(myActualContents); int offset = editor.getCaretModel().getOffset(); return content.getOpenFileDescriptor(offset); @@ -365,8 +365,9 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { List contents = myRequest.getContents(); List titles = myRequest.getContentTitles(); - DiffRequest request = new SimpleDiffRequest(myRequest.getTitle(), mySide1.selectNotNull(contents), mySide2.selectNotNull(contents), - mySide1.selectNotNull(titles), mySide1.selectNotNull(titles)); + DiffRequest request = new SimpleDiffRequest(myRequest.getTitle(), + mySide1.select(contents), mySide2.select(contents), + mySide1.select(titles), mySide1.select(titles)); DiffManager.getInstance().showDiff(myProject, request, new DiffDialogHints(null, myPanel)); } }