/* * Copyright 2011 Google Inc. All Rights Reserved. * * 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.google.errorprone.fixes; import static com.google.common.base.Preconditions.checkArgument; import com.google.auto.value.AutoValue; import com.google.common.collect.Range; /** A replaced section of a source file. */ @AutoValue public abstract class Replacement { /** * Creates a {@link Replacement}. Start and end positions are represented as code unit indices * in a Unicode 16-bit string. * * @param startPosition the beginning of the replacement * @param endPosition the end of the replacement, exclusive * @param replaceWith the replacement text */ public static Replacement create(int startPosition, int endPosition, String replaceWith) { checkArgument(startPosition >= 0, "invalid startPosition: %s", startPosition); return new AutoValue_Replacement(Range.closedOpen(startPosition, endPosition), replaceWith); } /** The beginning of the replacement range. */ public int startPosition() { return range().lowerEndpoint(); } /** The length of the input text to be replaced. */ public int length() { return endPosition() - startPosition(); } /** The end of the replacement range, exclusive. */ public int endPosition() { return range().upperEndpoint(); } /** The {@link Range} to be replaced. */ public abstract Range<Integer> range(); /** The source text to appear in the output. */ public abstract String replaceWith(); }