blob: ea039fa83968d98686ef5233c63551b6ddaf72e4 [file] [log] [blame]
/*
* Copyright 2015 Google Inc.
*
* 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.googlejavaformat;
import com.google.common.base.MoreObjects;
import com.google.common.collect.Range;
import com.google.googlejavaformat.OpsBuilder.BlankLineWanted;
import java.util.Optional;
/** An output from the formatter. */
public abstract class Output extends InputOutput {
/** Unique identifier for a break. */
public static final class BreakTag {
Optional<Boolean> taken = Optional.empty();
public void recordBroken(boolean broken) {
// TODO(cushon): enforce invariants.
// Currently we rely on setting Breaks multiple times, e.g. when deciding
// whether a Level should be flowed. Using separate data structures
// instead of mutation or adding an explicit 'reset' step would allow
// a useful invariant to be enforced here.
taken = Optional.of(broken);
}
public boolean wasBreakTaken() {
return taken.orElse(false);
}
}
/**
* Indent by outputting {@code indent} spaces.
*
* @param indent the current indent
*/
public abstract void indent(int indent);
/**
* Output a string.
*
* @param text the string
* @param range the {@link Range} corresponding to the string
*/
public abstract void append(String text, Range<Integer> range);
/**
* A blank line is or is not wanted here.
*
* @param k the {@link Input.Tok} index
* @param wanted whether a blank line is wanted here
*/
public abstract void blankLine(int k, BlankLineWanted wanted);
/** Marks a region that can be partially formatted. */
public abstract void markForPartialFormat(Input.Token start, Input.Token end);
/**
* Get the {@link CommentsHelper}.
*
* @return the {@link CommentsHelper}
*/
public abstract CommentsHelper getCommentsHelper();
@Override
public String toString() {
return MoreObjects.toStringHelper(this).add("super", super.toString()).toString();
}
}