diff --git a/src/Pyramid-Bloc/PyramidBreakpoint.class.st b/src/Pyramid-Bloc/PyramidBreakpoint.class.st index f251f990..af3771cc 100644 --- a/src/Pyramid-Bloc/PyramidBreakpoint.class.st +++ b/src/Pyramid-Bloc/PyramidBreakpoint.class.st @@ -7,10 +7,24 @@ Class { #category : #'Pyramid-Bloc-plugin-edit-on-running' } -{ #category : #accessing } -PyramidBreakpoint class >> removeBreakpoint: aBreakpoint [ +{ #category : #removing } +PyramidBreakpoint class >> removeAllPyramidBreakpoint [ + + + | pyramidBreakpoints | + pyramidBreakpoints := self all select: [ :each | each class = self ]. + pyramidBreakpoints ifEmpty: [ ^ self ]. + pyramidBreakpoints do: [ :each | each remove ] +] + +{ #category : #removing } +PyramidBreakpoint class >> removeAllPyramidBreakpointExceptOne [ - "Do nothing" + + | pyramidBreakpoints | + pyramidBreakpoints := self all select: [ :each | each class = self ]. + pyramidBreakpoints ifEmpty: [ ^ self ]. + pyramidBreakpoints allButFirstDo: [ :each | each remove ] ] { #category : #api } diff --git a/src/Pyramid-Bloc/PyramidPluginEditOnRunning.class.st b/src/Pyramid-Bloc/PyramidPluginEditOnRunning.class.st index 0f63398f..6c9f5d17 100644 --- a/src/Pyramid-Bloc/PyramidPluginEditOnRunning.class.st +++ b/src/Pyramid-Bloc/PyramidPluginEditOnRunning.class.st @@ -29,7 +29,7 @@ PyramidPluginEditOnRunning class >> breakpoint [ ^ breakpoint ] -{ #category : #testing } +{ #category : #'as yet unclassified' } PyramidPluginEditOnRunning class >> canEditSpace: aSpace [ aSpace ifNil:[ ^ false ]. @@ -67,13 +67,13 @@ PyramidPluginEditOnRunning class >> doShortcutAction: anEvent [ named: 'Pyramid edit-on-running plugin shortcut' ] -{ #category : #accessing } +{ #category : #'as yet unclassified' } PyramidPluginEditOnRunning class >> editOnRunning [ ^ editOnRunning ifNil: [ editOnRunning := true ] ] -{ #category : #accessing } +{ #category : #'as yet unclassified' } PyramidPluginEditOnRunning class >> editOnRunning: aBoolean [ editOnRunning := aBoolean @@ -90,11 +90,13 @@ PyramidPluginEditOnRunning class >> install [ PyramidPluginEditOnRunning class >> installBreakpoint [ | node | + PyramidBreakpoint removeAllPyramidBreakpoint. node := (BlParallelUniverse methodNamed: #openSpace:) ast. breakpoint := PyramidBreakpoint new. breakpoint node: node. - breakpoint whenHitDo: [ :context | self addShortcutInSpace: context arguments first ]. + breakpoint whenHitDo: [ :context | + self addShortcutInSpace: context arguments first ]. breakpoint install ] @@ -133,5 +135,6 @@ PyramidPluginEditOnRunning class >> shortcut [ PyramidPluginEditOnRunning class >> uninstall [ "Undo some stuff here when the plugin used class oriented behavior" - self breakpoint ifNotNil: [ :b | b remove ] + PyramidBreakpoint removeAllPyramidBreakpoint. + breakpoint := nil. ] diff --git a/src/Pyramid-Tests/PyramidPluginEditOnRunningTest.class.st b/src/Pyramid-Tests/PyramidPluginEditOnRunningTest.class.st index 8eb964c0..026f73e2 100644 --- a/src/Pyramid-Tests/PyramidPluginEditOnRunningTest.class.st +++ b/src/Pyramid-Tests/PyramidPluginEditOnRunningTest.class.st @@ -96,6 +96,18 @@ PyramidPluginEditOnRunningTest >> testKeyCombination [ ] +{ #category : #tests } +PyramidPluginEditOnRunningTest >> testOnlyOnePyramidBreakpoint [ + + PyramidPluginEditOnRunning install. + PyramidPluginEditOnRunning install. + PyramidPluginEditOnRunning install. + Smalltalk image garbageCollect. + Smalltalk image garbageCollect. + Smalltalk image garbageCollect. + self assert: (PyramidBreakpoint allInstances select: #isInstalled) size equals: 1 +] + { #category : #tests } PyramidPluginEditOnRunningTest >> testShortcut [