/* * Copyright 2013-present Facebook, 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.facebook.buck.rules; import com.facebook.buck.artifact_cache.CacheResult; import javax.annotation.Nullable; /** * This is a union type that represents either a success or a failure. This exists so that {@code * com.facebook.buck.rules.CachingBuildEngine#buildOnceDepsAreBuilt()} can return a strongly typed * value. */ public class BuildResult { private final BuildRule rule; private final BuildRuleStatus status; private final CacheResult cacheResult; @Nullable private final BuildRuleSuccessType success; @Nullable private final Throwable failure; private BuildResult( BuildRule rule, BuildRuleStatus status, CacheResult cacheResult, @Nullable BuildRuleSuccessType success, @Nullable Throwable failure) { this.rule = rule; this.status = status; this.cacheResult = cacheResult; this.success = success; this.failure = failure; } public static BuildResult success( BuildRule rule, BuildRuleSuccessType success, CacheResult cacheResult) { return new BuildResult(rule, BuildRuleStatus.SUCCESS, cacheResult, success, null); } public static BuildResult failure(BuildRule rule, Throwable failure) { return new BuildResult(rule, BuildRuleStatus.FAIL, CacheResult.miss(), null, failure); } public static BuildResult canceled(BuildRule rule, Throwable failure) { return new BuildResult(rule, BuildRuleStatus.CANCELED, CacheResult.miss(), null, failure); } public BuildRule getRule() { return rule; } BuildRuleStatus getStatus() { return status; } CacheResult getCacheResult() { return cacheResult; } @Nullable public BuildRuleSuccessType getSuccess() { return success; } @Nullable public Throwable getFailure() { return failure; } }