"{ Package: 'stx:libscm/gitHub' }"
"{ NameSpace: Smalltalk }"
Object subclass:#GitHubSmalltalkClassReader
instanceVariableNames:'changeSet classDirectory className'
classVariableNames:''
poolDictionaries:''
category:'SCM-GitHub-Package-Reader'
!
!GitHubSmalltalkClassReader class methodsFor:'documentation'!
documentation
"
a q&d hack, to read packages/classes from github
read a .class definition as stored by Pharo/Squeak in gitHub.
[author:]
Claus Gittinger
[instance variables:]
[class variables:]
[see also:]
"
! !
!GitHubSmalltalkClassReader class methodsFor:'reading'!
readClassFrom:aClassDirectory
"read a .class folder; return a changeSet for that class"
^ self new
classDirectory:aClassDirectory;
readClass;
changeSet.
"Created: / 30-06-2018 / 18:14:12 / Claus Gittinger"
! !
!GitHubSmalltalkClassReader methodsFor:'accessing'!
changeSet
^ changeSet
"Created: / 30-06-2018 / 17:56:18 / Claus Gittinger"
!
changeSet:aChangeSet
changeSet := aChangeSet
"Created: / 30-06-2018 / 18:17:27 / Claus Gittinger"
!
classDirectory:aFilenameOrString
classDirectory := aFilenameOrString asFilename
"Created: / 30-06-2018 / 17:46:01 / Claus Gittinger"
! !
!GitHubSmalltalkClassReader methodsFor:'private'!
addChange:aChange
changeSet isNil ifTrue:[
changeSet := ChangeSet new.
].
changeSet add:aChange
"Created: / 30-06-2018 / 17:53:44 / Claus Gittinger"
!
addClassDefinitionChange:classChange
self addChange:classChange
"Created: / 30-06-2018 / 17:53:19 / Claus Gittinger"
! !
!GitHubSmalltalkClassReader methodsFor:'reading'!
readClass
|props classChange|
props := JSONReader fromJSON:(classDirectory / 'properties.json') contentsOfEntireFile.
classChange := ClassDefinitionChange new.
classChange category:(props at:'category').
classChange instanceVariableNames:(props at:'instvars').
classChange classInstanceVariableNames:(props at:'classinstvars').
classChange classVariableNames:(props at:'classvars').
classChange className:(className := props at:'name').
classChange superClassName:(props at:'super').
classChange poolDictionaries:((props at:'pools') asStringWith:' ').
(props at:'type') = 'normal' ifFalse:[
self halt.
].
self addClassDefinitionChange:classChange.
self readClassMethods.
self readInstanceMethods.
"
|changes|
changes := self new
classDirectory:'/Users/cg/work/stx/goodies/smaCC/SmaCC-master/SmaCC-Cucumber.package/CucumberParserTests.class';
readClass;
changeSet.
ChangeSetBrowser openOn:changes
"
"Created: / 30-06-2018 / 17:47:48 / Claus Gittinger"
!
readClassMethods
|change classDir|
(classDir := (classDirectory / 'class')) exists ifTrue:[
classDir filesDo:[:eachFile |
change := self readMethodFrom:eachFile forClassNamed:(className,' class').
self addChange:change.
].
].
"
|changes|
changes := self new
classDirectory:'/Users/cg/work/stx/goodies/smaCC/SmaCC-master/SmaCC-Cucumber.package/CucumberParserTests.class';
readClass;
changeSet.
ChangeSetBrowser openOn:changes
"
"Created: / 30-06-2018 / 17:58:06 / Claus Gittinger"
!
readInstanceMethods
|change instanceDir|
(instanceDir := (classDirectory / 'instance')) exists ifTrue:[
instanceDir filesDo:[:eachFile |
change := self readMethodFrom:eachFile forClassNamed:className.
self addChange:change.
].
].
"
|changes|
changes := self new
classDirectory:'/Users/cg/work/stx/goodies/smaCC/SmaCC-master/SmaCC-Cucumber.package/CucumberParserTests.class';
readClass;
changeSet.
ChangeSetBrowser openOn:changes
"
"Created: / 30-06-2018 / 17:58:16 / Claus Gittinger"
!
readMethodFrom:aFilename forClassNamed:className
|category source change selector|
aFilename readingFileDo:[:in |
category := in nextLine withoutSeparators.
source := in upToEnd.
].
selector := Parser new parseSelector:source.
change := MethodChange
className:className
selector:selector
source:source
category:category.
^ change
"
|changes|
changes := self new
classDirectory:'/Users/cg/work/stx/goodies/smaCC/SmaCC-master/SmaCC-Cucumber.package/CucumberParserTests.class';
readClass;
changeSet.
ChangeSetBrowser openOn:changes
"
"Created: / 30-06-2018 / 18:10:13 / Claus Gittinger"
! !
!GitHubSmalltalkClassReader class methodsFor:'documentation'!
version
^ '$Header$'
!
version_CVS
^ '$Header$'
! !