All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.javascript.refactoring.CodeReplacement Maven / Gradle / Ivy

Go to download

Closure Compiler is a JavaScript optimizing compiler. It parses your JavaScript, analyzes it, removes dead code and rewrites and minimizes what's left. It also checks syntax, variable references, and types, and warns about common JavaScript pitfalls. It is used in many of Google's JavaScript apps, including Gmail, Google Web Search, Google Maps, and Google Docs. This binary checks for style issues such as incorrect or missing JSDoc usage, and missing goog.require() statements. It does not do more advanced checks such as typechecking.

There is a newer version: v20200830
Show newest version
/*
 * Copyright 2014 The Closure Compiler Authors.
 *
 * 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.javascript.refactoring;

import java.util.Objects;

/**
 * Class that represents a set of changes to make to the code.
 *
 * @author [email protected] (Mark Knichel)
 */
public final class CodeReplacement {

  private final int startPosition;
  private final int length;
  private final String newContent;

  // Used for sorting a list of CodeReplacements, in case of a "tie": two replacements with the
  // same startPosition.
  private final String sortKey;

  CodeReplacement(int startPosition, int length, String newContent) {
    this(startPosition, length, newContent, "");
  }

  CodeReplacement(int startPosition, int length, String newContent, String sortKey) {
    this.startPosition = startPosition;
    this.length = length;
    this.newContent = newContent;
    this.sortKey = sortKey;
  }

  /**
   * Returns the start position within the file that the modification
   * should be applied starting at.
   */
  public int getStartPosition() {
    return startPosition;
  }

  /**
   * Returns how many characters the new content should replace in the
   * original content.
   */
  public int getLength() {
    return length;
  }

  /**
   * Returns the end position within the file that the modification
   * should be applied starting at.
   */
  public int getEndPosition() {
    return startPosition + length;
  }

  /**
   * Returns the new content that should be inserted into the file.
   */
  public String getNewContent() {
    return newContent;
  }

  /**
   * Returns an additional String key that can be used to sort replacements using lexical ordering.
   */
  public String getSortKey() {
    return sortKey;
  }

  @Override public String toString() {
    return String.format(
        "Start position: %d\nLength: %d\nNew Content: \"%s\"", startPosition, length, newContent);
  }

  @Override public boolean equals(Object o) {
    if (o == this) {
      return true;
    }
    if (!(o instanceof CodeReplacement)) {
      return false;
    }
    CodeReplacement other = (CodeReplacement) o;
    return startPosition == other.startPosition
        && length == other.length
        && newContent.equals(other.newContent);
  }

  @Override public int hashCode() {
    return Objects.hash(startPosition, length, newContent);
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy