diff --git a/eeschema/eeschema_jobs_handler.cpp b/eeschema/eeschema_jobs_handler.cpp index 25e5619358..58cb850f07 100644 --- a/eeschema/eeschema_jobs_handler.cpp +++ b/eeschema/eeschema_jobs_handler.cpp @@ -1197,7 +1197,7 @@ int EESCHEMA_JOBS_HANDLER::JobSchErc( JOB* aJob ) markersProvider->GetCount() ), RPT_SEVERITY_INFO ); - ERC_REPORT reportWriter( sch, units ); + ERC_REPORT reportWriter( sch, units, markersProvider ); bool wroteReport = false; diff --git a/eeschema/erc/erc_report.cpp b/eeschema/erc/erc_report.cpp index 425d870070..ebcc88861b 100644 --- a/eeschema/erc/erc_report.cpp +++ b/eeschema/erc/erc_report.cpp @@ -34,10 +34,19 @@ #include -ERC_REPORT::ERC_REPORT( SCHEMATIC* aSchematic, EDA_UNITS aReportUnits ) : +ERC_REPORT::ERC_REPORT( SCHEMATIC* aSchematic, EDA_UNITS aReportUnits, + std::shared_ptr aMarkersProvider ) : m_sch( aSchematic ), - m_reportUnits( aReportUnits ) + m_reportUnits( aReportUnits ), + m_markersProvider( std::move( aMarkersProvider ) ) { + if( !m_markersProvider ) + { + // When no provider is supplied, fall back to creating one with default severities. + // This allows test code to get a basic report without needing to set up a provider. + m_markersProvider = std::make_shared( m_sch ); + m_markersProvider->SetSeverities( RPT_SEVERITY_ERROR | RPT_SEVERITY_WARNING ); + } } @@ -59,14 +68,11 @@ wxString ERC_REPORT::GetTextReport() ERC_SETTINGS& settings = m_sch->ErcSettings(); - SHEETLIST_ERC_ITEMS_PROVIDER errors( m_sch ); - errors.SetSeverities( RPT_SEVERITY_ERROR | RPT_SEVERITY_WARNING ); - std::map> orderedItems; - for( int i = 0; i < errors.GetCount(); ++i ) + for( int i = 0; i < m_markersProvider->GetCount(); ++i ) { - if( auto item = dynamic_cast( errors.GetItem( i ).get() ) ) + if( auto item = dynamic_cast( m_markersProvider->GetItem( i ).get() ) ) { if( item->MainItemHasSheetPath() ) orderedItems[item->GetMainItemSheetPath()].emplace_back( item ); @@ -137,14 +143,11 @@ bool ERC_REPORT::WriteJsonReport( const wxString& aFullFileName ) ERC_SETTINGS& settings = m_sch->ErcSettings(); - SHEETLIST_ERC_ITEMS_PROVIDER errors( m_sch ); - errors.SetSeverities( RPT_SEVERITY_ERROR | RPT_SEVERITY_WARNING ); - std::map> orderedItems; - for( int i = 0; i < errors.GetCount(); ++i ) + for( int i = 0; i < m_markersProvider->GetCount(); ++i ) { - if( auto item = dynamic_cast( errors.GetItem( i ).get() ) ) + if( auto item = dynamic_cast( m_markersProvider->GetItem( i ).get() ) ) { if( item->MainItemHasSheetPath() ) orderedItems[item->GetMainItemSheetPath()].emplace_back( item ); diff --git a/eeschema/erc/erc_report.h b/eeschema/erc/erc_report.h index fc586b3ae2..300a7dc499 100644 --- a/eeschema/erc/erc_report.h +++ b/eeschema/erc/erc_report.h @@ -30,7 +30,8 @@ class RC_ITEMS_PROVIDER; class ERC_REPORT { public: - ERC_REPORT( SCHEMATIC* aSchematic, EDA_UNITS aReportUnits ); + ERC_REPORT( SCHEMATIC* aSchematic, EDA_UNITS aReportUnits, + std::shared_ptr aMarkersProvider = nullptr ); /** * Returns the ERC report in "text" (human readable) format @@ -56,6 +57,7 @@ public: private: SCHEMATIC* m_sch; EDA_UNITS m_reportUnits; + std::shared_ptr m_markersProvider; };