|  | // Copyright 2015 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; | 
|  |  | 
|  | import javax.annotation.Nullable; | 
|  |  | 
|  | /** | 
|  | * Like {@link com.google.common.base.Preconditions}, but with overloads that avoid varargs-based | 
|  | * array creation in {@link #checkArgument}, {@link #checkState}, and {@link #checkNotNull} for | 
|  | * calls that list up to seven error message arguments when {@code expression} is {@code true} (or | 
|  | * {@code reference} is non-{@code null}). | 
|  | * | 
|  | * <p>Throughout this file, functions delegate to {@link com.google.common.base.Preconditions} | 
|  | * methods of the same name for the purpose of readability and obvious semantics. | 
|  | */ | 
|  | public final class Preconditions { | 
|  | private Preconditions() {} | 
|  |  | 
|  | /** See {@link com.google.common.base.Preconditions#checkArgument(boolean)}. */ | 
|  | public static void checkArgument(boolean expression) { | 
|  | com.google.common.base.Preconditions.checkArgument(expression); | 
|  | } | 
|  |  | 
|  | /** See {@link com.google.common.base.Preconditions#checkArgument(boolean, Object)}. */ | 
|  | public static void checkArgument(boolean expression, @Nullable Object errorMessage) { | 
|  | com.google.common.base.Preconditions.checkArgument(expression, errorMessage); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * See {@link com.google.common.base.Preconditions#checkArgument(boolean, String, Object...)}. | 
|  | */ | 
|  | public static void checkArgument( | 
|  | boolean expression, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object... errorMessageArgs) { | 
|  | com.google.common.base.Preconditions.checkArgument( | 
|  | expression, errorMessageTemplate, errorMessageArgs); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkArgument(boolean, String, Object...)}. | 
|  | */ | 
|  | public static void checkArgument( | 
|  | boolean expression, @Nullable String errorMessageTemplate, @Nullable Object arg0) { | 
|  | if (!expression) { | 
|  | com.google.common.base.Preconditions.checkArgument(false, errorMessageTemplate, arg0); | 
|  | } | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding autoboxing in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkArgument(boolean, String, Object...)}. | 
|  | */ | 
|  | public static void checkArgument( | 
|  | boolean expression, @Nullable String errorMessageTemplate, int arg0) { | 
|  | if (!expression) { | 
|  | com.google.common.base.Preconditions.checkArgument(false, errorMessageTemplate, arg0); | 
|  | } | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkArgument(boolean, String, Object...)}. | 
|  | */ | 
|  | public static void checkArgument( | 
|  | boolean expression, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object arg0, | 
|  | @Nullable Object arg1) { | 
|  | if (!expression) { | 
|  | com.google.common.base.Preconditions.checkArgument(false, errorMessageTemplate, arg0, arg1); | 
|  | } | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkArgument(boolean, String, Object...)}. | 
|  | */ | 
|  | public static void checkArgument( | 
|  | boolean expression, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object arg0, | 
|  | @Nullable Object arg1, | 
|  | @Nullable Object arg2) { | 
|  | if (!expression) { | 
|  | com.google.common.base.Preconditions.checkArgument( | 
|  | false, errorMessageTemplate, arg0, arg1, arg2); | 
|  | } | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkArgument(boolean, String, Object...)}. | 
|  | */ | 
|  | public static void checkArgument( | 
|  | boolean expression, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object arg0, | 
|  | @Nullable Object arg1, | 
|  | @Nullable Object arg2, | 
|  | @Nullable Object arg3) { | 
|  | if (!expression) { | 
|  | com.google.common.base.Preconditions.checkArgument( | 
|  | false, errorMessageTemplate, arg0, arg1, arg2, arg3); | 
|  | } | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkArgument(boolean, String, Object...)}. | 
|  | */ | 
|  | public static void checkArgument( | 
|  | boolean expression, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object arg0, | 
|  | @Nullable Object arg1, | 
|  | @Nullable Object arg2, | 
|  | @Nullable Object arg3, | 
|  | @Nullable Object arg4) { | 
|  | if (!expression) { | 
|  | com.google.common.base.Preconditions.checkArgument( | 
|  | false, errorMessageTemplate, arg0, arg1, arg2, arg3, arg4); | 
|  | } | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkArgument(boolean, String, Object...)}. | 
|  | */ | 
|  | public static void checkArgument( | 
|  | boolean expression, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object arg0, | 
|  | @Nullable Object arg1, | 
|  | @Nullable Object arg2, | 
|  | @Nullable Object arg3, | 
|  | @Nullable Object arg4, | 
|  | @Nullable Object arg5) { | 
|  | if (!expression) { | 
|  | com.google.common.base.Preconditions.checkArgument( | 
|  | false, errorMessageTemplate, arg0, arg1, arg2, arg3, arg4, arg5); | 
|  | } | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkArgument(boolean, String, Object...)}. | 
|  | */ | 
|  | public static void checkArgument( | 
|  | boolean expression, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object arg0, | 
|  | @Nullable Object arg1, | 
|  | @Nullable Object arg2, | 
|  | @Nullable Object arg3, | 
|  | @Nullable Object arg4, | 
|  | @Nullable Object arg5, | 
|  | @Nullable Object arg6) { | 
|  | if (!expression) { | 
|  | com.google.common.base.Preconditions.checkArgument( | 
|  | false, errorMessageTemplate, arg0, arg1, arg2, arg3, arg4, arg5, arg6); | 
|  | } | 
|  | } | 
|  |  | 
|  | /** See {@link com.google.common.base.Preconditions#checkState(boolean)}. */ | 
|  | public static void checkState(boolean expression) { | 
|  | com.google.common.base.Preconditions.checkState(expression); | 
|  | } | 
|  |  | 
|  | /** See {@link com.google.common.base.Preconditions#checkState(boolean, Object)}. */ | 
|  | public static void checkState(boolean expression, @Nullable Object errorMessage) { | 
|  | com.google.common.base.Preconditions.checkState(expression, errorMessage); | 
|  | } | 
|  |  | 
|  | /** See {@link com.google.common.base.Preconditions#checkState(boolean, String, Object...)}. */ | 
|  | public static void checkState( | 
|  | boolean expression, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object... errorMessageArgs) { | 
|  | com.google.common.base.Preconditions.checkState( | 
|  | expression, errorMessageTemplate, errorMessageArgs); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkState(boolean, String, Object...)}. | 
|  | */ | 
|  | public static void checkState( | 
|  | boolean expression, @Nullable String errorMessageTemplate, @Nullable Object arg0) { | 
|  | if (!expression) { | 
|  | com.google.common.base.Preconditions.checkState(false, errorMessageTemplate, arg0); | 
|  | } | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkState(boolean, String, Object...)}. | 
|  | */ | 
|  | public static void checkState( | 
|  | boolean expression, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object arg0, | 
|  | @Nullable Object arg1) { | 
|  | if (!expression) { | 
|  | com.google.common.base.Preconditions.checkState(false, errorMessageTemplate, arg0, arg1); | 
|  | } | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkState(boolean, String, Object...)}. | 
|  | */ | 
|  | public static void checkState( | 
|  | boolean expression, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object arg0, | 
|  | @Nullable Object arg1, | 
|  | @Nullable Object arg2) { | 
|  | if (!expression) { | 
|  | com.google.common.base.Preconditions.checkState( | 
|  | false, errorMessageTemplate, arg0, arg1, arg2); | 
|  | } | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkState(boolean, String, Object...)}. | 
|  | */ | 
|  | public static void checkState( | 
|  | boolean expression, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object arg0, | 
|  | @Nullable Object arg1, | 
|  | @Nullable Object arg2, | 
|  | @Nullable Object arg3) { | 
|  | if (!expression) { | 
|  | com.google.common.base.Preconditions.checkState( | 
|  | false, errorMessageTemplate, arg0, arg1, arg2, arg3); | 
|  | } | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkState(boolean, String, Object...)}. | 
|  | */ | 
|  | public static void checkState( | 
|  | boolean expression, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object arg0, | 
|  | @Nullable Object arg1, | 
|  | @Nullable Object arg2, | 
|  | @Nullable Object arg3, | 
|  | @Nullable Object arg4) { | 
|  | if (!expression) { | 
|  | com.google.common.base.Preconditions.checkState( | 
|  | false, errorMessageTemplate, arg0, arg1, arg2, arg3, arg4); | 
|  | } | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkState(boolean, String, Object...)}. | 
|  | */ | 
|  | public static void checkState( | 
|  | boolean expression, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object arg0, | 
|  | @Nullable Object arg1, | 
|  | @Nullable Object arg2, | 
|  | @Nullable Object arg3, | 
|  | @Nullable Object arg4, | 
|  | @Nullable Object arg5) { | 
|  | if (!expression) { | 
|  | com.google.common.base.Preconditions.checkState( | 
|  | false, errorMessageTemplate, arg0, arg1, arg2, arg3, arg4, arg5); | 
|  | } | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkState(boolean, String, Object...)}. | 
|  | */ | 
|  | public static void checkState( | 
|  | boolean expression, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object arg0, | 
|  | @Nullable Object arg1, | 
|  | @Nullable Object arg2, | 
|  | @Nullable Object arg3, | 
|  | @Nullable Object arg4, | 
|  | @Nullable Object arg5, | 
|  | @Nullable Object arg6) { | 
|  | if (!expression) { | 
|  | com.google.common.base.Preconditions.checkState( | 
|  | false, errorMessageTemplate, arg0, arg1, arg2, arg3, arg4, arg5, arg6); | 
|  | } | 
|  | } | 
|  |  | 
|  | /** See {@link com.google.common.base.Preconditions#checkNotNull(Object)}. */ | 
|  | public static <T> T checkNotNull(T reference) { | 
|  | return com.google.common.base.Preconditions.checkNotNull(reference); | 
|  | } | 
|  |  | 
|  | /** See {@link com.google.common.base.Preconditions#checkNotNull(Object, Object)}. */ | 
|  | public static <T> T checkNotNull(T reference, @Nullable Object errorMessage) { | 
|  | return com.google.common.base.Preconditions.checkNotNull(reference, errorMessage); | 
|  | } | 
|  |  | 
|  | /** See {@link com.google.common.base.Preconditions#checkNotNull(Object, String, Object...)}. */ | 
|  | public static <T> T checkNotNull( | 
|  | T reference, @Nullable String errorMessageTemplate, @Nullable Object... errorMessageArgs) { | 
|  | return com.google.common.base.Preconditions.checkNotNull( | 
|  | reference, errorMessageTemplate, errorMessageArgs); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkNotNull(Object, String, Object...)}. | 
|  | */ | 
|  | public static <T> T checkNotNull( | 
|  | T reference, @Nullable String errorMessageTemplate, @Nullable Object arg0) { | 
|  | if (reference == null) { | 
|  | com.google.common.base.Preconditions.checkNotNull(null, errorMessageTemplate, arg0); | 
|  | } | 
|  | return reference; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkNotNull(Object, String, Object...)}. | 
|  | */ | 
|  | public static <T> T checkNotNull( | 
|  | T reference, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object arg0, | 
|  | @Nullable Object arg1) { | 
|  | if (reference == null) { | 
|  | com.google.common.base.Preconditions.checkNotNull(null, errorMessageTemplate, arg0, arg1); | 
|  | } | 
|  | return reference; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkNotNull(Object, String, Object...)}. | 
|  | */ | 
|  | public static <T> T checkNotNull( | 
|  | T reference, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object arg0, | 
|  | @Nullable Object arg1, | 
|  | @Nullable Object arg2) { | 
|  | if (reference == null) { | 
|  | com.google.common.base.Preconditions.checkNotNull( | 
|  | null, errorMessageTemplate, arg0, arg1, arg2); | 
|  | } | 
|  | return reference; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkNotNull(Object, String, Object...)}. | 
|  | */ | 
|  | public static <T> T checkNotNull( | 
|  | T reference, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object arg0, | 
|  | @Nullable Object arg1, | 
|  | @Nullable Object arg2, | 
|  | @Nullable Object arg3) { | 
|  | if (reference == null) { | 
|  | com.google.common.base.Preconditions.checkNotNull( | 
|  | null, errorMessageTemplate, arg0, arg1, arg2, arg3); | 
|  | } | 
|  | return reference; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkNotNull(Object, String, Object...)}. | 
|  | */ | 
|  | public static <T> T checkNotNull( | 
|  | T reference, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object arg0, | 
|  | @Nullable Object arg1, | 
|  | @Nullable Object arg2, | 
|  | @Nullable Object arg3, | 
|  | @Nullable Object arg4) { | 
|  | if (reference == null) { | 
|  | com.google.common.base.Preconditions.checkNotNull( | 
|  | null, errorMessageTemplate, arg0, arg1, arg2, arg3, arg4); | 
|  | } | 
|  | return reference; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkNotNull(Object, String, Object...)}. | 
|  | */ | 
|  | public static <T> T checkNotNull( | 
|  | T reference, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object arg0, | 
|  | @Nullable Object arg1, | 
|  | @Nullable Object arg2, | 
|  | @Nullable Object arg3, | 
|  | @Nullable Object arg4, | 
|  | @Nullable Object arg5) { | 
|  | if (reference == null) { | 
|  | com.google.common.base.Preconditions.checkNotNull( | 
|  | null, errorMessageTemplate, arg0, arg1, arg2, arg3, arg4, arg5); | 
|  | } | 
|  | return reference; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Conditionally forwards to the {@link com.google.common.base.Preconditions} method of the same | 
|  | * name, avoiding varargs-based array creation in the unexceptional case. | 
|  | * | 
|  | * <p>See {@link com.google.common.base.Preconditions#checkNotNull(Object, String, Object...)}. | 
|  | */ | 
|  | public static <T> T checkNotNull( | 
|  | T reference, | 
|  | @Nullable String errorMessageTemplate, | 
|  | @Nullable Object arg0, | 
|  | @Nullable Object arg1, | 
|  | @Nullable Object arg2, | 
|  | @Nullable Object arg3, | 
|  | @Nullable Object arg4, | 
|  | @Nullable Object arg5, | 
|  | @Nullable Object arg6) { | 
|  | if (reference == null) { | 
|  | com.google.common.base.Preconditions.checkNotNull( | 
|  | null, errorMessageTemplate, arg0, arg1, arg2, arg3, arg4, arg5, arg6); | 
|  | } | 
|  | return reference; | 
|  | } | 
|  | } |