cleanup (inspection "Java | Class structure | Utility class is not 'final'")
[idea/community.git] / platform / lvcs-impl / src / com / intellij / history / integration / LocalHistoryUtil.java
1 // Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.history.integration;
3
4 import com.intellij.history.core.LabelImpl;
5 import com.intellij.history.core.revisions.ChangeRevision;
6 import com.intellij.history.core.revisions.Revision;
7 import com.intellij.history.integration.ui.models.HistoryDialogModel;
8 import com.intellij.history.integration.ui.models.RevisionItem;
9 import com.intellij.util.containers.ContainerUtil;
10 import org.jetbrains.annotations.NotNull;
11
12 import java.util.List;
13
14 public final class LocalHistoryUtil {
15
16   static int findRevisionIndexToRevert(@NotNull HistoryDialogModel dirHistoryModel, @NotNull LabelImpl label) {
17     List<RevisionItem> revs = dirHistoryModel.getRevisions();
18     for (int i = 0; i < revs.size(); i++) {
19       final RevisionItem rev = revs.get(i);
20       if (isLabelRevision(rev, label)) return i;
21       //when lvcs model is not constructed yet or is empty then PutLabelChange is created but without label, so we need to scan revisions themselves
22       if (isChangeWithId(rev.revision, label.getLabelChangeId())) return i;
23     }
24     return -1;
25   }
26
27   static boolean isLabelRevision(@NotNull RevisionItem rev, @NotNull LabelImpl label) {
28     final long targetChangeId = label.getLabelChangeId();
29     return ContainerUtil.exists(rev.labels, revision -> isChangeWithId(revision, targetChangeId));
30   }
31
32   private static boolean isChangeWithId(@NotNull Revision revision, long targetChangeId) {
33     return revision instanceof ChangeRevision && ((ChangeRevision)revision).containsChangeWithId(targetChangeId);
34   }
35 }