Skip to content

Commit

Permalink
This PR cleans a bit the CDAbstractClassDefinitionParser hierarchy
Browse files Browse the repository at this point in the history
- add subclassResponsibility
- make sure that the categories are in sync in the hierarchy
- push pu #fromASTNode:
  • Loading branch information
MarcusDenker committed Feb 3, 2022
1 parent 0dcaae2 commit b1aca06
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 27 deletions.
46 changes: 42 additions & 4 deletions src/ClassParser/CDAbstractClassDefinitionParser.class.st
Expand Up @@ -11,6 +11,18 @@ Class {
#category : #'ClassParser-Parser'
}

{ #category : #parsing }
CDAbstractClassDefinitionParser class >> fromASTNode: aNode [

^ self new parseRootNode: aNode
]

{ #category : #testing }
CDAbstractClassDefinitionParser class >> isAbstract [

^ self == CDAbstractClassDefinitionParser
]

{ #category : #'instance creation' }
CDAbstractClassDefinitionParser class >> parse: aString [

Expand Down Expand Up @@ -81,8 +93,9 @@ CDAbstractClassDefinitionParser >> handleInstanceVariablesFromNode: aNode [
CDAbstractClassDefinitionParser >> handleMetaclassName: aNode [
"we are in situation ClassX class << ClassZ class
slots: {xxxx} so grab the class"

aNode handleMetaclassName: self

"| className classNode node |
node := aNode receiver arguments first.
className := node receiver binding value class name.
Expand All @@ -93,13 +106,18 @@ CDAbstractClassDefinitionParser >> handleMetaclassName: aNode [
"
]

{ #category : #accessing }
{ #category : #parsing }
CDAbstractClassDefinitionParser >> handlePackage: aNode [

classDefinition packageNameNode: aNode astNode: aNode
]

{ #category : #accessing }
{ #category : #parsing }
CDAbstractClassDefinitionParser >> handleSharedPoolsFromNode: aNode [
^ self subclassResponsibility
]

{ #category : #parsing }
CDAbstractClassDefinitionParser >> handleSharedVariableNames: aNode [

| slots slotNodes classVariablesString |
Expand Down Expand Up @@ -181,6 +199,11 @@ CDAbstractClassDefinitionParser >> handleSlotsNodesFromArrayNode: aRBArrayNode [
self handleSlotNode: slotStatement ]
]

{ #category : #parsing }
CDAbstractClassDefinitionParser >> handleSuperclassNode: aNode [
^ self subclassResponsibility
]

{ #category : #parsing }
CDAbstractClassDefinitionParser >> handleTraitUsesFromNode: aNode [

Expand All @@ -200,7 +223,17 @@ CDAbstractClassDefinitionParser >> parse: aString [
^ self parseRootNode: expressionTree
]

{ #category : #hooks }
{ #category : #parsing }
CDAbstractClassDefinitionParser >> parseRootNode: aNode [
^ self subclassResponsibility
]

{ #category : #parsing }
CDAbstractClassDefinitionParser >> parseSelectorPart: aString withArgument: aNode [
^ self subclassResponsibility
]

{ #category : #'private - class factory' }
CDAbstractClassDefinitionParser >> parserClass [
^ RBParser
]
Expand All @@ -220,3 +253,8 @@ CDAbstractClassDefinitionParser >> slotInitializationNodeClass [
CDAbstractClassDefinitionParser >> slotNodeClass [
^ CDSlotNode
]

{ #category : #parsing }
CDAbstractClassDefinitionParser >> visitMessageNode: aNode [
^ self subclassResponsibility
]
6 changes: 0 additions & 6 deletions src/ClassParser/CDClassDefinitionParser.class.st
Expand Up @@ -12,12 +12,6 @@ Class {
#category : #'ClassParser-Parser'
}

{ #category : #parsing }
CDClassDefinitionParser class >> fromASTNode: aNode [

^ self new parseRootNode: aNode
]

{ #category : #parsing }
CDClassDefinitionParser >> handleClassName: aNode withType: aSymbol [
| layoutClass |
Expand Down
28 changes: 11 additions & 17 deletions src/ClassParser/CDFluidClassDefinitionParser.class.st
Expand Up @@ -43,24 +43,18 @@ Class {
}

{ #category : #parsing }
CDFluidClassDefinitionParser class >> fromASTNode: aNode [

^ self new parseRootNode: aNode
]

{ #category : #'handling nodes' }
CDFluidClassDefinitionParser >> handleClassAndSuperclassOf: aNode [

superclassNode ifNotNil: [ self handleSuperclassNode: superclassNode ].
self handleClassName: classNameNode.
]

{ #category : #'handling nodes' }
{ #category : #parsing }
CDFluidClassDefinitionParser >> handleLayout: aNode [
classDefinition layoutClass: aNode binding value
]

{ #category : #metaclass }
{ #category : #parsing }
CDFluidClassDefinitionParser >> handleMetaclassNameFromCascade: aRBCascadeNode [

| className classNode node |
Expand All @@ -72,7 +66,7 @@ CDFluidClassDefinitionParser >> handleMetaclassNameFromCascade: aRBCascadeNode [
classDefinition className: node astNode: classNode
]

{ #category : #metaclass }
{ #category : #parsing }
CDFluidClassDefinitionParser >> handleMetaclassNameFromMessage: aNode [

| className classNode node |
Expand All @@ -84,7 +78,7 @@ CDFluidClassDefinitionParser >> handleMetaclassNameFromMessage: aNode [
classDefinition className: node astNode: classNode
]

{ #category : #'handling nodes' }
{ #category : #parsing }
CDFluidClassDefinitionParser >> handleSharedPoolsFromNode: aNode [
| sharedPoolNodes |
sharedPoolNodes := aNode children
Expand All @@ -98,7 +92,7 @@ CDFluidClassDefinitionParser >> handleSharedPoolsFromNode: aNode [
classDefinition sharedPools: sharedPoolNodes
]

{ #category : #'handling nodes' }
{ #category : #parsing }
CDFluidClassDefinitionParser >> handleSharedVariableNames: aNode [

| slotNodes classVariablesString |
Expand All @@ -117,7 +111,7 @@ CDFluidClassDefinitionParser >> handleSharedVariableNames: aNode [
classDefinition sharedSlots: slotNodes
]

{ #category : #'handling nodes' }
{ #category : #parsing }
CDFluidClassDefinitionParser >> handleSuperclassNode: aSuperclassNode [
| aSuperclassName newSuperclassNode |

Expand All @@ -132,13 +126,13 @@ CDFluidClassDefinitionParser >> handleSuperclassNode: aSuperclassNode [
astNode: newSuperclassNode
]

{ #category : #'handling nodes' }
{ #category : #parsing }
CDFluidClassDefinitionParser >> handleTag: aNode [

classDefinition tag: (CDClassTagNode new name: aNode value)
]

{ #category : #'parsing-internal' }
{ #category : #parsing }
CDFluidClassDefinitionParser >> parseRootNode: expressionTree [

| searcher |
Expand All @@ -165,7 +159,7 @@ CDFluidClassDefinitionParser >> parseRootNode: expressionTree [
^ classDefinition
]

{ #category : #'parsing-internal' }
{ #category : #parsing }
CDFluidClassDefinitionParser >> parseSelectorPart: aString withArgument: aNode [
"We could do this with reflection, or with a dictionary and closures.
I chose to use a series of if for readability only."
Expand All @@ -191,7 +185,7 @@ CDFluidClassDefinitionParser >> parseSelectorPart: aString withArgument: aNode [
signal
]

{ #category : #'parsing-internal' }
{ #category : #parsing }
CDFluidClassDefinitionParser >> visitCascadeNode: aRBCascadeNode [
"See class comment. Here we handle the cascade version of the class definition."
"
Expand All @@ -209,7 +203,7 @@ CDFluidClassDefinitionParser >> visitCascadeNode: aRBCascadeNode [
self parseSelectorPart: selectorPart withArgument: argument ] ]
]

{ #category : #'parsing-internal' }
{ #category : #parsing }
CDFluidClassDefinitionParser >> visitMessageNode: aRBMessageNode [
"See class comment. Here we handle the cascade version of the class definition."
"
Expand Down

0 comments on commit b1aca06

Please sign in to comment.