/* * Copyright 2015-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.model.BuildTarget; import java.util.stream.Stream; /** * Provides a facility for a rule to list dependencies it'll need at runtime. * * <p>Consider the case of a Java test. The {@link com.facebook.buck.jvm.java.JavaTest} rule itself * is just a {@link com.facebook.buck.jvm.java.DefaultJavaLibrary} and so only lists its immediate * compile time deps as its normal first-order dependencies. However, to actually run a Java test, * we need it's entire transitive dependency tree locally on disk. Since this is outside the * contract of normal build dependencies (e.g. a top-down build engine may decide not to pull a * dependency locally if the top-level target can be pulled from cache, and therefore won't need to * be built), we need some other way to convey to the build engine that a set of rules that need to * be on disk by the end of the build. * * <p>Enter this interface. While it serves an important purpose, its long-term semantics aren't * entirely clear yet, so expect how we model this and how the build engine uses this to change in * the future. */ public interface HasRuntimeDeps extends BuildRule { Stream<BuildTarget> getRuntimeDeps(); }