/* * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.diff.fragments; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; public class LineFragmentImpl implements LineFragment { private final int myStartLine1; private final int myEndLine1; private final int myStartLine2; private final int myEndLine2; private final int myStartOffset1; private final int myEndOffset1; private final int myStartOffset2; private final int myEndOffset2; @Nullable private final List<DiffFragment> myInnerFragments; public LineFragmentImpl(int startLine1, int endLine1, int startLine2, int endLine2, int startOffset1, int endOffset1, int startOffset2, int endOffset2) { this(startLine1, endLine1, startLine2, endLine2, startOffset1, endOffset1, startOffset2, endOffset2, null); } public LineFragmentImpl(@NotNull LineFragment fragment, @Nullable List<DiffFragment> fragments) { this(fragment.getStartLine1(), fragment.getEndLine1(), fragment.getStartLine2(), fragment.getEndLine2(), fragment.getStartOffset1(), fragment.getEndOffset1(), fragment.getStartOffset2(), fragment.getEndOffset2(), fragments); } public LineFragmentImpl(int startLine1, int endLine1, int startLine2, int endLine2, int startOffset1, int endOffset1, int startOffset2, int endOffset2, @Nullable List<DiffFragment> innerFragments) { myStartLine1 = startLine1; myEndLine1 = endLine1; myStartLine2 = startLine2; myEndLine2 = endLine2; myStartOffset1 = startOffset1; myEndOffset1 = endOffset1; myStartOffset2 = startOffset2; myEndOffset2 = endOffset2; myInnerFragments = dropWholeChangedFragments(innerFragments, endOffset1 - startOffset1, endOffset2 - startOffset2); } @Override public int getStartLine1() { return myStartLine1; } @Override public int getEndLine1() { return myEndLine1; } @Override public int getStartLine2() { return myStartLine2; } @Override public int getEndLine2() { return myEndLine2; } @Override public int getStartOffset1() { return myStartOffset1; } @Override public int getEndOffset1() { return myEndOffset1; } @Override public int getStartOffset2() { return myStartOffset2; } @Override public int getEndOffset2() { return myEndOffset2; } @Nullable public List<DiffFragment> getInnerFragments() { return myInnerFragments; } @Nullable private static List<DiffFragment> dropWholeChangedFragments(@Nullable List<DiffFragment> fragments, int length1, int length2) { if (fragments != null && fragments.size() == 1) { DiffFragment diffFragment = fragments.get(0); if (diffFragment.getStartOffset1() == 0 && diffFragment.getStartOffset2() == 0 && diffFragment.getEndOffset1() == length1 && diffFragment.getEndOffset2() == length2) { return null; } } return fragments; } }