# HG changeset patch # User Claus Gittinger # Date 1459513444 -7200 # Node ID 870714c59ff847f24590c72aba3705fe56f53345 # Parent 4fdd7ae6c84a845bf660e07e1e4595dd89e8fe1f #REFACTORING class: MetricsReporter added:5 methods diff -r 4fdd7ae6c84a -r 870714c59ff8 MetricsReporter.st --- a/MetricsReporter.st Fri Apr 01 14:23:52 2016 +0200 +++ b/MetricsReporter.st Fri Apr 01 14:24:04 2016 +0200 @@ -431,6 +431,122 @@ ^ self reportXml_xradar ! ! +!MetricsReporter methodsFor:'reporting - xml-xradar'! + +reportXml_xradar + "invoked via perform, if the formatSymbol is #xml_xradar" + + " + self new + stream:Transcript; + packages:#( 'exept:workflow' ); + reportXml_xradar + " + + "/ need the exept-metrics package + Smalltalk loadPackage:'exept:programming/oom'. + + packages do:[:eachPackageID | + "/ if the package is a matchPattern, generate metrics for all loaded packages + "/ which match that pattern. + "/ Otherwise, make sure that this package is loaded and generate metrics for that + "/ one only. + eachPackageID includesMatchCharacters ifFalse:[ + Smalltalk loadPackage:eachPackageID. + ]. + ]. + + stream nextPutLine: ''; + nextPutLine: ''. + + packages do:[:eachPackageID | + "/ if the package is a matchPattern, generate metrics for all loaded packages + "/ which match that pattern. + "/ Otherwise, make sure that this package is loaded and generate metrics for that + "/ one only. + self reportXml_xradar_forPackage:eachPackageID + ]. + stream nextPutLine: ''. +! + +reportXml_xradar_forClass:aClass + stream nextPutLine: ' '. + stream nextPutLine: (' %1' bindWith:aClass name). + + self methodMetricNames notEmptyOrNil ifTrue:[ + aClass instAndClassMethodsDo:[:eachMethod | + self reportXml_xradar_forMethod:eachMethod + ]. + ]. + + self classMetricNames notEmptyOrNil ifTrue:[ + self reportXml_xradar_values:(self generateClassMetricsFor:aClass). + ]. + + stream nextPutLine: ' '. +! + +reportXml_xradar_forMethod:aMethod + stream nextPutLine: ' '. + stream nextPutLine:(' %1' bindWith:aMethod selector). + + self reportXml_xradar_values:(self generateMethodMetricsFor:aMethod). + + stream nextPutLine: ' '. +! + +reportXml_xradar_forPackage:aPackageIDOrPattern + |genMetricsForClass| + + genMetricsForClass := + [:aClass | + Autoload autoloadFailedSignal handle:[:ex | + ] do:[ + aClass autoload. + self reportXml_xradar_forClass:aClass + ] + ]. + + stream nextPutLine: ' '. + stream nextPutLine: (' %1' bindWith:aPackageIDOrPattern). + + (self classMetricNames notEmptyOrNil + or:[self methodMetricNames notEmptyOrNil]) ifTrue:[ + aPackageIDOrPattern includesMatchCharacters ifTrue:[ + Smalltalk allClasses do:[:eachClass | + (eachClass package matches:aPackageIDOrPattern) ifTrue:[ + genMetricsForClass value:eachClass + ]. + ]. + ] ifFalse:[ + Smalltalk allClassesInPackage:aPackageIDOrPattern do:genMetricsForClass. + ]. + ]. + + self reportXml_xradar_values:(self generatePackageMetricsFor:aPackageIDOrPattern). + + stream nextPutLine: ' '. +! + +reportXml_xradar_values:metricValues + |metricShortName metricLongName metricValue possibleErrorMessage| + + metricValues do:[:eachMetricInfo | + metricShortName := eachMetricInfo shortName. + metricLongName := eachMetricInfo longName. + metricValue := eachMetricInfo metricValue. + possibleErrorMessage := eachMetricInfo errorMessage. + possibleErrorMessage notNil ifTrue:[ + metricLongName := metricLongName , '(Error: ',possibleErrorMessage,')'. + ]. + + stream nextPutLine: ' '. + stream nextPutLine: (' %1' bindWith:metricShortName). + stream nextPutLine: (' %1' bindWith:metricLongName). + stream nextPutLine: (' %1' bindWith:metricValue). + stream nextPutLine: ' '. + ] +! ! !MetricsReporter methodsFor:'reporting-private'!