diff --git a/eeschema/eeschema_jobs_handler.cpp b/eeschema/eeschema_jobs_handler.cpp index 1814145c79..7cd87a02c4 100644 --- a/eeschema/eeschema_jobs_handler.cpp +++ b/eeschema/eeschema_jobs_handler.cpp @@ -1183,7 +1183,7 @@ int EESCHEMA_JOBS_HANDLER::JobSchErc( JOB* aJob ) m_reporter->Report( wxString::Format( _( "Found %d violations\n" ), 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 e33fd34177..ae297661cf 100644 --- a/eeschema/erc/erc_report.cpp +++ b/eeschema/erc/erc_report.cpp @@ -35,10 +35,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 ); + } } @@ -63,14 +72,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 ); @@ -141,14 +147,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 b5096abe64..698aa3159e 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 in the C-locale. @@ -56,6 +57,7 @@ public: private: SCHEMATIC* m_sch; EDA_UNITS m_reportUnits; + std::shared_ptr m_markersProvider; };