public void GenerateSrcMLFromFiles(IEnumerable<string> sourceFileNames, string xmlFileName) {
var filesByLanguage = new Dictionary<Language, List<string>>();
//determine which runner should process each source file
foreach(var sourceFile in sourceFileNames) {
var ext = Path.GetExtension(sourceFile);
if(ext != null && extensionMapping.ContainsKey(ext)) {
Language lang = extensionMapping[ext];
if(nonDefaultExecutables.ContainsKey(lang)) {
//this file should be parsed by a non-default runner
if(!filesByLanguage.ContainsKey(lang)) {
filesByLanguage[lang] = new List<string>() { sourceFile };
} else {
filesByLanguage[lang].Add(sourceFile);
}
} else {
//should be parsed by the default runner
if(!filesByLanguage.ContainsKey(Language.Any)) {
filesByLanguage[Language.Any] = new List<string>() { sourceFile };
} else {
filesByLanguage[Language.Any].Add(sourceFile);
}
}
}
}
//convert files to srcml
SrcMLFile tempArchive = null;
foreach(var kvp in filesByLanguage) {
var tempOutputFile = Path.GetTempFileName();
SrcMLFile tempResult;
if(kvp.Key == Language.Any) {
var mapForRunner = CreateExtensionMappingForRunner(defaultExecutable);
defaultExecutable.GenerateSrcMLFromFiles(kvp.Value, tempOutputFile, Language.Any, new Collection<string>(defaultArguments.ToList()), mapForRunner);
} else {
var runner = nonDefaultExecutables[kvp.Key];
var mapForRunner = CreateExtensionMappingForRunner(runner);
runner.GenerateSrcMLFromFiles(kvp.Value, tempOutputFile, kvp.Key, new Collection<string>(nonDefaultArguments[kvp.Key].ToList()), mapForRunner);
}
tempResult = new SrcMLFile(tempOutputFile);
var oldArchiveFile = tempArchive != null ? tempArchive.FileName : null;
tempArchive = tempResult.Merge(tempArchive, Path.GetTempFileName());
File.Delete(tempOutputFile);
if(oldArchiveFile != null) { File.Delete(oldArchiveFile); }
}
if(tempArchive != null) {
if(File.Exists(xmlFileName)) {
File.Delete(xmlFileName);
}
File.Move(tempArchive.FileName, xmlFileName);
}
}
/// <summary>