in instrumentation/src/com/intellij/rt/coverage/instrumentation/data/ProjectContext.java [181:218]
private void applyLineMappings(ProjectData projectData) {
if (myLinesMap == null) return;
for (Map.Entry<String, FileMapData[]> entry : myLinesMap.entrySet()) {
final String className = entry.getKey();
final ClassData classData = projectData.getClassData(className);
if (classData == null) continue;
final FileMapData[] fileData = entry.getValue();
//postpone process main file because its lines would be reset and next files won't be processed correctly
FileMapData mainData = null;
for (FileMapData aFileData : fileData) {
final String mappedClassName = getFromPool(aFileData.getClassName());
if (mappedClassName.equals(className)) {
mainData = aFileData;
continue;
}
final ClassData classInfo;
if (shouldIncludeClass(mappedClassName)) {
classInfo = projectData.getOrCreateClassData(mappedClassName);
if (getOptions().isSaveSource && classInfo.getSource() == null) {
classInfo.setSource(aFileData.getFileName());
}
} else {
// `classData` SMAP may not contain mapping to itself,
// so it's better to make sure we fairly apply this mapping
// otherwise `classData` may contain inline generated lines
classInfo = new ClassData(mappedClassName);
}
applyLineMappings(aFileData.getLines(), classInfo, classData);
InstructionsUtil.applyInstructionsSMAP(projectData, aFileData.getLines(), classInfo, classData);
}
if (mainData != null) {
applyLineMappings(mainData.getLines(), classData, classData);
InstructionsUtil.applyInstructionsSMAP(projectData, mainData.getLines(), classData, classData);
}
}
}