content: package com.airbnb.lottie.model;
  
  import static androidx.annotation.RestrictTo.Scope.LIBRARY;
  
  import androidx.annotation.Nullable;
  import androidx.annotation.RestrictTo;
  
  import com.airbnb.lottie.value.LottieValueCallback;
  
  import java.util.List;
  
  /**
   * Any item that can be a part of a {@link KeyPath} should implement this.
   */
  @RestrictTo(LIBRARY)
  public interface KeyPathElement {
  
    /**
     * Called recursively during keypath resolution.
     * <p>
     * The overridden method should just call:
     * MiscUtils.resolveKeyPath(keyPath, depth, accumulator, currentPartialKeyPath, this);
     *
     * @param keyPath               The full keypath being resolved.
     * @param depth                 The current depth that this element should be checked at in the keypath.
     * @param accumulator           A list of fully resolved keypaths. If this element fully matches the
     *                              keypath then it should add itself to this list.
     * @param currentPartialKeyPath A keypath that contains all parent element of this one.
     *                              This element should create a copy of this and append itself
     *                              with KeyPath#addKey when it adds itself to the accumulator
     *                              or propagates resolution to its children.
     */
    void resolveKeyPath(
        KeyPath keyPath, int depth, List<KeyPath> accumulator, KeyPath currentPartialKeyPath);
  
    /**
     * The overridden method should handle appropriate properties and set value callbacks on their
     * animations.
     */
    <T> void addValueCallback(T property, @Nullable LottieValueCallback<T> callback);
  }