package xsbti;

import java.io.File;

public interface AppProvider
{
	/** Returns the ScalaProvider that this AppProvider will use. */
	public ScalaProvider scalaProvider();
	/** The ID of the application that will be created by 'newMain' or 'mainClass'.*/
	public ApplicationID id();

	 public ClassLoader loader();
	/** Loads the class for the entry point for the application given by 'id'.  This method will return the same class
	* every invocation.  That is, the ClassLoader is not recreated each call.*/
	public Class<? extends AppMain> mainClass();
	/** Creates a new instance of the entry point of the application given by 'id'.
	* It is guaranteed that newMain().getClass() == mainClass()*/
	public AppMain newMain();
	
	/** The classpath from which the main class is loaded, excluding Scala jars.*/
	public File[] mainClasspath();

	public ComponentProvider components();
}
