| /* |
| * 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; |
| |
| /** |
| * Object that has in-memory data structures that need to be populated as a result of executing its |
| * steps. An object that implements this interface will <em>always</em> have its internal data |
| * structures initialized through this interface, regardless of whether it was built locally or read |
| * from cache. This ensures that a rule is always in the same state once {@code isRuleBuilt()} |
| * returns {@code true}. |
| * <p> |
| * Objects that implement this interface should create getter methods that delegate to |
| * {@link BuildOutputInitializer#getBuildOutput()} to access the in-memory data structures rather |
| * than have clients invoke {@link BuildOutputInitializer#getBuildOutput()} directly. This ensures |
| * that all getters go through any protections provided by |
| * {@link BuildOutputInitializer#getBuildOutput()}. |
| * <p> |
| */ |
| public interface InitializableFromDisk<T> { |
| |
| /** |
| * @param onDiskBuildInfo can be used to read metadata from disk to help initialize the rule. |
| * @return an object that has the in-memory data structures that need to be populated as a result |
| * of executing this object's steps. |
| */ |
| public T initializeFromDisk(OnDiskBuildInfo onDiskBuildInfo); |
| |
| public BuildOutputInitializer<T> getBuildOutputInitializer(); |
| } |