public interface Toolkit
For example, to compile a Project, ideally we would want to write:
Project p = new Project(); p.compile();But if
Project does not already define a compile() method and if it is not
sub-classable or has a blackbox implementation, this would not be possible. Even if Project
did include a compile() method, downstream extensions may want to change the how
'compile' works, but this is not possible without sub-classing Project or having
it expose integration hooks.
Instead a Compilable toolkit can be defined as:
public interface Compilable extends Toolkit {
void compile();
}
Now given a Project, a Compilable can be 'built' for it.
Context context = new Context(project);
Compilable compilabe = ToolkitRegistry.getToolkit(context, Compilable.class);
compilable.compile();
Extensions can plug in a ToolkitProvider and change how Compilable
works for Projects.