// Copyright 2014 The Bazel Authors. 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.devtools.build.lib.util;

/**
 * This class serves as a base implementation for a {@code CharSequence}
 * that delay string construction (mostly till the execution phase).
 *
 * They are not full implementations, they lack {@code #charAt(int)} and
 * {@code #subSequence(int, int)}.
 */
public abstract class LazyString implements CharSequence {

  @Override
  public char charAt(int index) {
    throw new UnsupportedOperationException();
  }

  @Override
  public int length() {
    return toString().length();
  }

  @Override
  public CharSequence subSequence(int start, int end) {
    throw new UnsupportedOperationException();
  }

}
