public void readExternal(Element element) throws InvalidDataException {
    //noinspection unchecked
    for (Element suiteElement : element.getChildren(SUITE)) {
      final CoverageRunner coverageRunner = BaseCoverageSuite.readRunnerAttribute(suiteElement);
      // skip unknown runners
      if (coverageRunner == null) {
        // collect gc
        final CoverageFileProvider fileProvider =
            BaseCoverageSuite.readDataFileProviderAttribute(suiteElement);
        if (fileProvider.isValid()) {
          // deleteCachedCoverage(fileProvider.getCoverageDataFilePath());
        }
        continue;
      }

      CoverageSuite suite = null;
      for (CoverageEngine engine : CoverageEngine.EP_NAME.getExtensions()) {
        if (coverageRunner.acceptsCoverageEngine(engine)) {
          suite = engine.createEmptyCoverageSuite(coverageRunner);
          if (suite != null) {
            break;
          }
        }
      }
      if (suite != null) {
        try {
          suite.readExternal(suiteElement);
          myCoverageSuites.add(suite);
        } catch (NumberFormatException e) {
          // try next suite
        }
      }
    }
  }
 @NotNull
 private CoverageSuite createCoverageSuite(
     final CoverageEnabledConfiguration config,
     final String name,
     final CoverageRunner coverageRunner,
     final DefaultCoverageFileProvider fileProvider) {
   CoverageSuite suite = null;
   for (CoverageEngine engine : CoverageEngine.EP_NAME.getExtensions()) {
     if (coverageRunner.acceptsCoverageEngine(engine)
         && engine.isApplicableTo(config.getConfiguration())) {
       suite = engine.createCoverageSuite(coverageRunner, name, fileProvider, config);
       if (suite != null) {
         break;
       }
     }
   }
   LOG.assertTrue(
       suite != null,
       "Cannot create coverage suite for runner: " + coverageRunner.getPresentableName());
   return suite;
 }
  @NotNull
  private CoverageSuite createCoverageSuite(
      final CoverageRunner coverageRunner,
      final String name,
      final CoverageFileProvider fileProvider,
      final String[] filters,
      final long lastCoverageTimeStamp,
      final String suiteToMergeWith,
      final boolean collectLineInfo,
      final boolean tracingEnabled) {

    CoverageSuite suite = null;
    for (CoverageEngine engine : CoverageEngine.EP_NAME.getExtensions()) {
      if (coverageRunner.acceptsCoverageEngine(engine)) {
        suite =
            engine.createCoverageSuite(
                coverageRunner,
                name,
                fileProvider,
                filters,
                lastCoverageTimeStamp,
                suiteToMergeWith,
                collectLineInfo,
                tracingEnabled,
                false,
                myProject);
        if (suite != null) {
          break;
        }
      }
    }

    LOG.assertTrue(
        suite != null,
        "Cannot create coverage suite for runner: " + coverageRunner.getPresentableName());
    return suite;
  }