reports/Builder__ReportSourceInfo.st
changeset 200 e35a3f4b586b
parent 194 cea07153d29c
child 252 0543437ef38a
--- 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'!