@Override
public Map<String, FileDescriptor> parse(FileDescriptorSource fileDescriptorSource) throws DescriptorParserException {
Map<String, char[]> input = fileDescriptorSource.getFileDescriptors();
Map<String, FileDescriptor> fileDescriptorMap = new LinkedHashMap<>(input.size());
for (Map.Entry<String, char[]> entry : input.entrySet()) {
String fileName = entry.getKey();
try {
ProtoFile protoFile = ProtoParser.parse(fileName, new CharArrayReader(entry.getValue()));
checkUniqueFileOptions(protoFile);
FileDescriptor fileDescriptor = PROTOFILE_MAPPER.map(protoFile);
fileDescriptor.setConfiguration(configuration);
fileDescriptorMap.put(fileName, fileDescriptor);
} catch (DescriptorParserException e) {
reportParsingError(fileDescriptorSource, fileDescriptorMap, fileName, e);
} catch (IOException | RuntimeException e) {
reportParsingError(fileDescriptorSource, fileDescriptorMap, fileName, new DescriptorParserException(e));
}
}
return fileDescriptorMap;
}