private void applyLineMappings()

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);
      }
    }
  }