--- a/reports/Builder__ReportSourceInfo.st Mon Jul 29 13:37:41 2013 +0200
+++ b/reports/Builder__ReportSourceInfo.st Mon Jul 29 20:25:57 2013 +0200
@@ -3,7 +3,7 @@
"{ NameSpace: Builder }"
Object subclass:#ReportSourceInfo
- instanceVariableNames:'klass filename offsets lineEnds'
+ instanceVariableNames:'offsets lineEnds package'
classVariableNames:''
poolDictionaries:''
category:'Builder-Reports-Utils'
@@ -37,25 +37,24 @@
!ReportSourceInfo class methodsFor:'instance creation'!
-for: aClass
- ^self new setClass: aClass
+forClass: class inPackage: package
+ ^ ReportClassSourceInfo new initializeWithPackage:package class:class.
- "Created: / 01-03-2013 / 17:50:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Created: / 29-07-2013 / 18:36:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+forExtensionsInPackage: package
+ ^ ReportExtensionsSourceInfo new initializeWithPackage: package
+
+ "Created: / 29-07-2013 / 18:37:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!ReportSourceInfo methodsFor:'initialization'!
-setClass: aClass
- klass := aClass theNonMetaclass.
- self setup.
-
- "Created: / 01-03-2013 / 17:49:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
setup
"To be called after class is set"
- | stream sourceF |
+ | stream |
stream := LineCountingStream new.
offsets := Dictionary new.
@@ -63,27 +62,28 @@
[
self fileOutOn: stream.
] on: AbstractSourceFileWriter methodSourceRewriteQuery do:[:rewriteQuery |
- | m |
+ | m p |
m := rewriteQuery method.
- offsets at: m put: stream position - 1.
+ offsets at: m put: stream position.
rewriteQuery proceed.
].
lineEnds := stream lineEnds.
"/Now, check if all is correct...
- offsets keysAndValuesDo:[:method :offset |
- sourceF := method package == klass package
- ifTrue:[(Smalltalk getPackageDirectoryForPackage: klass package) / ((Smalltalk fileNameForClass: klass) , '.st')]
- ifFalse:[(Smalltalk getPackageDirectoryForPackage: method package) / 'extensions.st'].
- sourceF readingFileDo:[:sourceS|
- | source |
-
- sourceS position: offset.
- source := sourceS nextChunk.
-"/ self assert: method source = source.
- ]
- ].
+"/ offsets keysAndValuesDo:[:method :offset |
+"/ sourceF := method package == klass package
+"/ ifTrue:[(Smalltalk getPackageDirectoryForPackage: klass package) / ((Smalltalk fileNameForClass: klass) , '.st')]
+"/ ifFalse:[(Smalltalk getPackageDirectoryForPackage: method package) / 'extensions.st'].
+"/ sourceF readingFileDo:[:sourceS|
+"/ | source |
+"/
+"/ sourceS position: offset.
+"/ source := sourceS nextChunk.
+"/"/ self assert: method source = source.
+"/ ]
+"/ ].
+ self validate.
@@ -93,7 +93,7 @@
"
"Created: / 01-03-2013 / 17:30:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 29-07-2013 / 12:20:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 29-07-2013 / 18:20:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!ReportSourceInfo methodsFor:'queries'!
@@ -106,7 +106,7 @@
[low > high] whileFalse:[
middle := (low + high) // 2.
element := lineEnds at:middle.
- element < offset ifTrue:[
+ element <= offset ifTrue:[
"middleelement is smaller than object"
low := middle + 1
] ifFalse:[
@@ -119,6 +119,7 @@
^line @ col.
"Created: / 03-03-2013 / 10:50:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 29-07-2013 / 18:21:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
offsetOfMethod: aMethod
@@ -129,10 +130,32 @@
!ReportSourceInfo methodsFor:'utilities'!
-fileOutOn:aStream
- klass fileOutOn: aStream withTimeStamp:false
+fileOutOn:arg
+ "raise an error: must be redefined in concrete subclass(es)"
+
+ ^ self subclassResponsibility
+!
+
+validate
+ ^ self subclassResponsibility
+
+ "Created: / 29-07-2013 / 14:52:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
- "Created: / 01-03-2013 / 17:51:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+validateAgainstReference: referenceFile
+
+ referenceFile readingFileDo:[:sourceS|
+ offsets keysAndValuesDo:[:method :offset |
+ | source |
+
+ sourceS position: offset.
+ source := sourceS nextChunk.
+"/ self assert: method source = source.
+ ]
+ ].
+
+ "Created: / 29-07-2013 / 14:52:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 29-07-2013 / 19:20:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!ReportSourceInfo::LineCountingStream class methodsFor:'instance creation'!