package net.ayld.facade.api;
import com.google.common.collect.ImmutableSet;
import net.ayld.facade.dependency.resolver.DependencyResolver;
import net.ayld.facade.model.ClassFile;
import net.ayld.facade.model.ClassName;
import net.ayld.facade.model.SourceFile;
import net.ayld.facade.util.Components;
import java.io.IOException;
import java.util.Set;
public final class Dependencies {
private final DependencyResolver<ClassFile> classDependencyResolver = Components.CLASS_DEPENDENCY_RESOLVER.getInstance();
private final DependencyResolver<SourceFile> sourceDependencyResolver = Components.SOURCE_DEPENDENCY_RESOLVER.getInstance();
private final boolean sourceResolution;
private final Set<?> of;
private Dependencies(Set<?> of, boolean sourceResolution) {
this.sourceResolution = sourceResolution;
this.of = of;
}
public static Dependencies ofSources(Set<SourceFile> sources) {
return new Dependencies(sources, true);
}
public static Dependencies ofClasses(Set<ClassFile> classes) {
return new Dependencies(classes, false);
}
public static Dependencies ofSource(SourceFile source) {
return new Dependencies(ImmutableSet.of(source), true);
}
public static Dependencies ofClass(ClassFile clazz) {
return new Dependencies(ImmutableSet.of(clazz), false);
}
@SuppressWarnings("unchecked")
public Set<ClassName> set() {
try {
if (sourceResolution) {
return sourceDependencyResolver.resolve((Set<SourceFile>) of);
}
else {
return classDependencyResolver.resolve((Set<ClassFile>) of);
}
} catch (IOException e) {
throw new IllegalStateException(e);
}
}
}