| // 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.actions; | |
| import static java.nio.charset.StandardCharsets.ISO_8859_1; | |
| import com.google.common.base.Preconditions; | |
| import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType; | |
| import java.nio.charset.Charset; | |
| import java.util.Objects; | |
| import javax.annotation.concurrent.Immutable; | |
| /** | |
| * An object that encapsulates how a params file should be constructed: what is the filetype, | |
| * what charset to use and what prefix (typically "@") to use. | |
| */ | |
| @Immutable | |
| public final class ParamFileInfo { | |
| private final ParameterFileType fileType; | |
| private final Charset charset; | |
| private final String flagFormatString; | |
| private final boolean always; | |
| private ParamFileInfo( | |
| ParameterFileType fileType, | |
| Charset charset, | |
| String flagFormatString, | |
| boolean always) { | |
| this.fileType = Preconditions.checkNotNull(fileType); | |
| this.charset = Preconditions.checkNotNull(charset); | |
| this.flagFormatString = Preconditions.checkNotNull(flagFormatString); | |
| this.always = always; | |
| } | |
| /** | |
| * Returns the file type. | |
| */ | |
| public ParameterFileType getFileType() { | |
| return fileType; | |
| } | |
| /** | |
| * Returns the charset. | |
| */ | |
| public Charset getCharset() { | |
| return charset; | |
| } | |
| /** Returns the format string for the params filename on the command line (typically "@%s"). */ | |
| public String getFlagFormatString() { | |
| return flagFormatString; | |
| } | |
| /** Returns true if a params file should always be used. */ | |
| public boolean always() { | |
| return always; | |
| } | |
| @Override | |
| public int hashCode() { | |
| return Objects.hash(charset, flagFormatString, fileType, always); | |
| } | |
| @Override | |
| public boolean equals(Object obj) { | |
| if (this == obj) { | |
| return true; | |
| } | |
| if (!(obj instanceof ParamFileInfo)) { | |
| return false; | |
| } | |
| ParamFileInfo other = (ParamFileInfo) obj; | |
| return fileType.equals(other.fileType) | |
| && charset.equals(other.charset) | |
| && flagFormatString.equals(other.flagFormatString) | |
| && always == other.always; | |
| } | |
| public static Builder builder(ParameterFileType parameterFileType) { | |
| return new Builder(parameterFileType); | |
| } | |
| /** Builder for a ParamFileInfo. */ | |
| public static class Builder { | |
| private final ParameterFileType fileType; | |
| private Charset charset = ISO_8859_1; | |
| private String flagFormatString = "@%s"; | |
| private boolean always; | |
| private Builder(ParameterFileType fileType) { | |
| this.fileType = fileType; | |
| } | |
| /** Sets the encoding to write the parameter file with. */ | |
| public Builder setCharset(Charset charset) { | |
| this.charset = charset; | |
| return this; | |
| } | |
| /** | |
| * Sets a format string to use for the flag that is passed to original command. | |
| * | |
| * <p>The format string must have a single "%s" that will be replaced by the execution path to | |
| * the param file. | |
| */ | |
| public Builder setFlagFormatString(String flagFormatString) { | |
| this.flagFormatString = flagFormatString; | |
| return this; | |
| } | |
| /** Set whether the parameter file is always used, regardless of parameter file length. */ | |
| public Builder setUseAlways(boolean always) { | |
| this.always = always; | |
| return this; | |
| } | |
| public ParamFileInfo build() { | |
| return new ParamFileInfo(fileType, charset, flagFormatString, always); | |
| } | |
| } | |
| } |