
package com.facebook.buck.android;

import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;

import java.nio.file.Path;
import java.util.Set;

/**
 * Metadata about an AndroidBinaryRule's transitive Java dependencies as it relates to dexing.
 * Specifically, when creating the classes.dex for an APK, the AndroidBinaryRule needs to know
 * all of the .class files that need to be included in the DEX, as well as an optional set of
 * .class files to exclude from the DEX.
 */
public class AndroidDexTransitiveDependencies {
  public final ImmutableSet<String> classpathEntriesToDex;
  public final ImmutableSet<String> noDxClasspathEntries;
  public final ImmutableSet<String> pathsToThirdPartyJars;

  /**
   * If present, identifies a directory that contains the .class files that were generated as a
   * result of compiling R.java files.
   */
  public final Optional<Path> pathToCompiledRDotJavaFiles;

  public AndroidDexTransitiveDependencies(Set<String> pathsToDex,
                                          Set<String> pathsToThirdPartyJars,
                                          ImmutableSet<String> noDxClasspathEntries,
                                          Optional<Path> pathToCompiledRDotJavaFiles) {
    this.classpathEntriesToDex = ImmutableSet.copyOf(pathsToDex);
    this.pathsToThirdPartyJars = ImmutableSet.copyOf(pathsToThirdPartyJars);
    this.noDxClasspathEntries = ImmutableSet.copyOf(noDxClasspathEntries);
    this.pathToCompiledRDotJavaFiles = Preconditions.checkNotNull(pathToCompiledRDotJavaFiles);
  }
}
