public void RegisterExecutable(string executableDirectory, IEnumerable<Language> languages, IEnumerable<string> namespaceArguments) {
if(nonDefaultExecutables == null) {
nonDefaultExecutables = new Dictionary<Language, Src2SrcMLRunner2>();
}
var langList = languages.ToList();
var dupLanguages = langList.Intersect(nonDefaultExecutables.Keys);
if(dupLanguages.Any()) {
var oldExec = nonDefaultExecutables[dupLanguages.First()];
throw new InvalidOperationException(string.Format("Executable already registered for language {0}: {1}", dupLanguages.First(), oldExec.ExecutablePath));
}
var runner = new Src2SrcMLRunner2(executableDirectory);
foreach(var lang in languages) {
nonDefaultExecutables[lang] = runner;
if(namespaceArguments != null) {
nonDefaultArguments[lang] = namespaceArguments.ToArray();
}
}
}