diff --git a/src/Calypso-SystemPlugins-Reflectivity-Queries/BreakpointAnnouncement.extension.st b/src/Calypso-SystemPlugins-Reflectivity-Queries/BreakpointAnnouncement.extension.st new file mode 100644 index 00000000000..375e25410b9 --- /dev/null +++ b/src/Calypso-SystemPlugins-Reflectivity-Queries/BreakpointAnnouncement.extension.st @@ -0,0 +1,8 @@ +Extension { #name : #BreakpointAnnouncement } + +{ #category : #'*Calypso-SystemPlugins-Reflectivity-Queries' } +BreakpointAnnouncement >> canAffectResultOfMethodQuery: aMethodQuery [ + + ^ self link methods anySatisfy: [:each | + aMethodQuery isAffectedByChangedMethod: each ] +] diff --git a/src/Reflectivity-Tools-Tests/BreakpointObserverTest.class.st b/src/Reflectivity-Tools-Tests/BreakpointObserverTest.class.st index 9a070476f05..392cbe1b198 100644 --- a/src/Reflectivity-Tools-Tests/BreakpointObserverTest.class.st +++ b/src/Reflectivity-Tools-Tests/BreakpointObserverTest.class.st @@ -6,7 +6,8 @@ Class { 'breakpoint', 'cls', 'previousBreakpoints', - 'observer' + 'observer', + 'oldSystemAnnouncer' ], #category : #'Reflectivity-Tools-Tests' } @@ -26,8 +27,8 @@ BreakpointObserverTest >> setUp [ super setUp. previousBreakpoints := Breakpoint all copy. - oldObservers := Breakpoint observers copy. - Breakpoint observers removeAll. + oldSystemAnnouncer := SystemAnnouncer uniqueInstance. + SystemAnnouncer announcer: nil. cls := self newDummyClass. breakpoint := Breakpoint new. cls compile: 'dummy ^42'. @@ -40,31 +41,30 @@ BreakpointObserverTest >> setUp [ { #category : #running } BreakpointObserverTest >> tearDown [ |pkg| - Breakpoint observers removeAll. - Breakpoint observers addAll: oldObservers. cls ifNotNil: [ cls isObsolete ifFalse: [ cls removeFromSystem ] ]. pkg := 'DummyPackage' asPackageIfAbsent: [ ]. pkg ifNotNil: [ pkg removeFromSystem ]. Breakpoint removeAll. Breakpoint all addAll: previousBreakpoints. + SystemAnnouncer announcer: oldSystemAnnouncer. super tearDown ] { #category : #tests } BreakpointObserverTest >> testNotifyBreakpointAdded [ - Breakpoint registerObserver: observer. + SystemAnnouncer uniqueInstance when: BreakpointAdded send: #update: to: observer. breakpoint install. - self assert: observer tag class equals: BreakpointAddedNotification. + self assert: observer tag class equals: BreakpointAdded. self assert: observer tag breakpoint identicalTo: breakpoint. self assertCollection: observer tag nodes equals: { (cls >> #dummy) ast } asSet ] { #category : #tests } BreakpointObserverTest >> testNotifyBreakpointHit [ - Breakpoint registerObserver: observer. + SystemAnnouncer uniqueInstance when: BreakpointHit send: #update: to: observer. breakpoint install. self should: [cls new dummy] raise: Break. - self assert: observer tag class equals: BreakpointHitNotification. + self assert: observer tag class equals: BreakpointHit. self assert: observer tag breakpoint identicalTo: breakpoint. self assert: observer tag valueOrNil isNil @@ -73,26 +73,9 @@ BreakpointObserverTest >> testNotifyBreakpointHit [ { #category : #tests } BreakpointObserverTest >> testNotifyBreakpointRemoved [ breakpoint install. - Breakpoint registerObserver: observer. + SystemAnnouncer uniqueInstance when: BreakpointRemoved send: #update: to: observer. breakpoint remove. - self assert: observer tag class equals: BreakpointRemovedNotification. + self assert: observer tag class equals: BreakpointRemoved. self assert: observer tag breakpoint identicalTo: breakpoint. self assertCollection: observer tag nodes equals: { (cls >> #dummy) ast } asSet ] - -{ #category : #tests } -BreakpointObserverTest >> testRegisterObserver [ - |obs| - obs := DummyBreakpointObserver new. - Breakpoint registerObserver: obs. - self assertCollection: Breakpoint observers includesAll: {obs} -] - -{ #category : #tests } -BreakpointObserverTest >> testUnregisterObserver [ - |obs| - obs := DummyBreakpointObserver new. - Breakpoint registerObserver: obs. - Breakpoint unregisterObserver: obs. - self assertEmpty: Breakpoint observers -] diff --git a/src/Reflectivity/BreakpointAddedNotification.class.st b/src/Reflectivity/BreakpointAddedNotification.class.st index 0c3bbe544c3..c46d92287ec 100644 --- a/src/Reflectivity/BreakpointAddedNotification.class.st +++ b/src/Reflectivity/BreakpointAddedNotification.class.st @@ -1,4 +1,6 @@ " +DEPRECATED: use BreakpointAnnouncement and its subclasses instead + A trivial breakpoint added notification. " Class { diff --git a/src/Reflectivity/BreakpointAnnouncement.class.st b/src/Reflectivity/BreakpointAnnouncement.class.st index c482c133f07..22aaf710032 100644 --- a/src/Reflectivity/BreakpointAnnouncement.class.st +++ b/src/Reflectivity/BreakpointAnnouncement.class.st @@ -16,6 +16,30 @@ BreakpointAnnouncement class >> on: aBreakpoint nodes: nodes [ yourself ] +{ #category : #accessing } +BreakpointAnnouncement >> affectsMethod: aMethod [ + + ^ self link methods anySatisfy: [:each | each compiledMethod == aMethod compiledMethod ] +] + +{ #category : #accessing } +BreakpointAnnouncement >> affectsMethods [ + ^true +] + +{ #category : #accessing } +BreakpointAnnouncement >> affectsMethodsDefinedInClass: aClass [ + ^ self link methods + anySatisfy: [ :each | each methodClass isNotNil and: [ each origin == aClass ] ] +] + +{ #category : #accessing } +BreakpointAnnouncement >> affectsMethodsDefinedInPackage: aPackage [ + ^ self link methods + anySatisfy: + [ :each | each methodClass isNotNil and: [ each package == aPackage ] ] +] + { #category : #accessing } BreakpointAnnouncement >> breakpoint [ ^ breakpoint @@ -26,6 +50,11 @@ BreakpointAnnouncement >> breakpoint: anObject [ breakpoint := anObject ] +{ #category : #accessing } +BreakpointAnnouncement >> link [ + ^ self breakpoint link +] + { #category : #accessing } BreakpointAnnouncement >> nodes [ ^ nodes diff --git a/src/Reflectivity/BreakpointHitNotification.class.st b/src/Reflectivity/BreakpointHitNotification.class.st index afc8e4bf5cf..8a2f2c88350 100644 --- a/src/Reflectivity/BreakpointHitNotification.class.st +++ b/src/Reflectivity/BreakpointHitNotification.class.st @@ -1,4 +1,6 @@ " +DEPRECATED: use BreakpointAnnouncement and its subclasses instead + I am a notification sent to Breakpoint observers when a breakpoint is hit. I can hold a value from the execution context the breakpoint was hit. " diff --git a/src/Reflectivity/BreakpointNotification.class.st b/src/Reflectivity/BreakpointNotification.class.st index a3a9b1453e9..f4d1e57bc38 100644 --- a/src/Reflectivity/BreakpointNotification.class.st +++ b/src/Reflectivity/BreakpointNotification.class.st @@ -1,4 +1,6 @@ " +DEPRECATED: use BreakpointAnnouncement and its subclasses instead + Trivial abtract breakpoint notification. I hold the affected breakpoint and a collection of nodes on which it is installed or removed from. " @@ -14,7 +16,7 @@ Class { { #category : #testing } BreakpointNotification class >> isDeprecated [ - "Replaed by BreakpointAnnouncement and its subclasses" + "Replaced by BreakpointAnnouncement and its subclasses" ^ true ] diff --git a/src/Reflectivity/BreakpointRemovedNotification.class.st b/src/Reflectivity/BreakpointRemovedNotification.class.st index cbd136fc205..3158803e88c 100644 --- a/src/Reflectivity/BreakpointRemovedNotification.class.st +++ b/src/Reflectivity/BreakpointRemovedNotification.class.st @@ -1,4 +1,6 @@ " +DEPRECATED: use BreakpointAnnouncement and its subclasses instead + A trivial breakpoint removed notification. " Class {