--- a/MetricsReporter.st Thu Apr 04 19:37:02 2013 +0200
+++ b/MetricsReporter.st Tue Apr 16 20:09:01 2013 +0200
@@ -53,8 +53,35 @@
examples
"
[exBegin]
+ String streamContents:[:stream |
+ MetricsReporter
+ reportPackages:{ 'stx:libjavascript' }
+ format:#xml_metrics
+ on:stream.
+ ].
+ [exEnd]
+ [exBegin]
+ String streamContents:[:stream |
+ MetricsReporter
+ reportPackages:{ 'stx:libbasic' }
+ format:#xml_metrics
+ on:stream.
+ ].
+ [exEnd]
+ [exBegin]
+ String streamContents:[:stream |
+ MetricsReporter
+ reportPackages:{ 'stx:libbasic*' }
+ format:#xml_metrics
+ on:stream.
+ ].
+ [exEnd]
+ [exBegin]
'metrics.xml' asFilename writingFileDo:[:stream |
- MetricsReporter reportPackages:{ 'stx:libjavascript' } format:#xml_metrics on:stream.
+ MetricsReporter
+ reportPackages:{ 'stx:libjavascript' }
+ format:#xml_metrics
+ on:stream.
].
[exEnd]
@@ -72,6 +99,7 @@
].
[exEnd]
+ package metrics only:
[exBegin]
MetricsReporter new
stream: Transcript;
@@ -85,6 +113,44 @@
packageMetricNames: #( 'LOC' 'NOM' 'NOC');
reportXml_metrics.
[exEnd]
+ [exBegin]
+ MetricsReporter new
+ stream: Transcript;
+ packages:
+ {
+ 'stx:libbasic' .
+ 'stx:libbasic2' .
+ 'stx:libbasic3' .
+ };
+ classMetricNames: #();
+ methodMetricNames: #();
+ packageMetricNames: #( 'LOC' 'NOM' 'NOC');
+ reportXml_metrics.
+ [exEnd]
+ [exBegin]
+ MetricsReporter new
+ stream: Transcript;
+ packages:
+ {
+ 'stx:libbasic*' .
+ };
+ classMetricNames: #();
+ methodMetricNames: #();
+ packageMetricNames: #( 'LOC' 'NOM' 'NOC');
+ reportXml_metrics.
+ [exEnd]
+ [exBegin]
+ MetricsReporter new
+ stream: Transcript;
+ packages:
+ {
+ 'stx:*' .
+ };
+ classMetricNames: #();
+ methodMetricNames: #();
+ packageMetricNames: #( 'LOC' 'NOM' 'NOC');
+ reportXml_metrics.
+ [exEnd]
"
!
@@ -187,11 +253,27 @@
^ { metric class shortName . metric class descriptiveName . metric metricValue }
!
-packageMetricValue:metricName for:aPackageID
- |metric|
+packageMetricValue:metricName for:aPackageIDOrPattern
+ |overAllInfo|
+
+ aPackageIDOrPattern includesMatchCharacters ifTrue:[
+ Smalltalk allProjectIDs do:[:eachPackageID |
+ |thisInfo|
- metric := OOM::PackageMetrics type:metricName for:aPackageID.
- ^ self metricInfoFor:metric
+ (eachPackageID matches:aPackageIDOrPattern) ifTrue:[
+ thisInfo := self metricInfoFor:(OOM::PackageMetrics type:metricName for:eachPackageID).
+ overAllInfo isNil ifTrue:[
+ overAllInfo := thisInfo
+ ] ifFalse:[
+ "/ kludge: only works with accumulative metrics (i.e. not with averages etc.)
+ overAllInfo at:(overAllInfo size) put:(overAllInfo last + thisInfo last).
+ ].
+ ].
+ ].
+ ^ overAllInfo
+ ] ifFalse:[
+ ^ self metricInfoFor:(OOM::PackageMetrics type:metricName for:aPackageIDOrPattern).
+ ].
! !
!MetricsReporter methodsFor:'reporting'!
@@ -217,9 +299,9 @@
].
!
-generatePackageMetricsFor:aPackage
+generatePackageMetricsFor:aPackageIDOrPattern
^ self packageMetricNames collect:[:metricName |
- self packageMetricValue:metricName for:aPackage.
+ self packageMetricValue:metricName for:aPackageIDOrPattern.
].
!
@@ -247,16 +329,24 @@
reportXml_metrics
"
- Smalltalk loadPackage:'exept:programming/oom'.
+ "/ need the exept-metrics package
+ (Smalltalk loadPackage:'exept:programming/oom') ifFalse:[
+ self error:'cannot load oom package'.
+ ].
stream nextPutLine: '<?xml version="1.0"?>';
nextPutLine: '<metrics>'.
packages do:[:eachPackageID |
- Smalltalk loadPackage: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.
+ ].
self reportXml_metricsForPackage:eachPackageID
].
-
stream nextPutLine: '</metrics>'.
!
@@ -286,22 +376,35 @@
stream nextPutLine: ' </method>'.
!
-reportXml_metricsForPackage:aPackageID
+reportXml_metricsForPackage:aPackageIDOrPattern
+ |genMetricsForClass|
+
+ genMetricsForClass :=
+ [:aClass |
+ Autoload autoloadFailedSignal handle:[:ex |
+ ] do:[
+ aClass autoload.
+ self reportXml_metricsForClass:aClass
+ ]
+ ].
+
stream nextPutLine: ' <project>'.
- stream nextPutLine: (' <name>%1</name>' bindWith:aPackageID).
+ stream nextPutLine: (' <name>%1</name>' bindWith:aPackageIDOrPattern).
(self classMetricNames notEmptyOrNil
or:[self methodMetricNames notEmptyOrNil]) ifTrue:[
- Smalltalk allClassesInPackage:aPackageID do:[:eachClass |
- Autoload autoloadFailedSignal handle:[:ex |
- ] do:[
- eachClass autoload.
- self reportXml_metricsForClass:eachClass
+ aPackageIDOrPattern includesMatchCharacters ifTrue:[
+ Smalltalk allClasses do:[:eachClass |
+ (eachClass package matches:aPackageIDOrPattern) iftrue:[
+ genMetricsForClass value:eachClass
+ ].
].
+ ] ifFalse:[
+ Smalltalk allClassesInPackage:aPackageIDOrPattern do:genMetricsForClass.
].
].
- self reportXml_metricValues:(self generatePackageMetricsFor:aPackageID).
+ self reportXml_metricValues:(self generatePackageMetricsFor:aPackageIDOrPattern).
stream nextPutLine: ' </project>'.
! !
@@ -310,7 +413,7 @@
report:formatSymbol
"currently supported formatSymbols:
- xml_cobertura"
+ xml_metrics"
|reportFormatSelector|
@@ -329,9 +432,10 @@
!MetricsReporter class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/goodies/sunit/MetricsReporter.st,v 1.5 2012-11-07 21:21:56 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/goodies/sunit/MetricsReporter.st,v 1.6 2013-04-16 18:09:01 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/goodies/sunit/MetricsReporter.st,v 1.5 2012-11-07 21:21:56 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/goodies/sunit/MetricsReporter.st,v 1.6 2013-04-16 18:09:01 cg Exp $'
! !
+