Kernel-Announcements.st 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. Smalltalk current createPackage: 'Kernel-Announcements' properties: #{}!
  2. Object subclass: #AnnouncementSubscription
  3. instanceVariableNames: 'block announcementClass'
  4. package: 'Kernel-Announcements'!
  5. !AnnouncementSubscription methodsFor: 'accessing'!
  6. announcementClass
  7. ^announcementClass
  8. !
  9. announcementClass: aClass
  10. announcementClass := aClass
  11. !
  12. block
  13. ^block
  14. !
  15. block: aBlock
  16. block := aBlock
  17. ! !
  18. !AnnouncementSubscription methodsFor: 'announcing'!
  19. deliver: anAnnouncement
  20. (self handlesAnnouncement: anAnnouncement)
  21. ifTrue: [self block value: anAnnouncement]
  22. !
  23. handlesAnnouncement: anAnnouncement
  24. ^anAnnouncement isKindOf: self announcementClass
  25. ! !
  26. Object subclass: #Announcer
  27. instanceVariableNames: 'registry subscriptions'
  28. package: 'Kernel-Announcements'!
  29. !Announcer methodsFor: 'announcing'!
  30. announce: anAnnouncement
  31. subscriptions do: [:each |
  32. each deliver: anAnnouncement]
  33. ! !
  34. !Announcer methodsFor: 'initialization'!
  35. initialize
  36. super initialize.
  37. subscriptions := Array new
  38. ! !
  39. !Announcer methodsFor: 'subscribing'!
  40. on: aClass do: aBlock
  41. subscriptions add: (AnnouncementSubscription new
  42. block: aBlock;
  43. announcementClass: aClass;
  44. yourself)
  45. ! !
  46. Announcer subclass: #SystemAnnouncer
  47. instanceVariableNames: ''
  48. package: 'Kernel-Announcements'!
  49. SystemAnnouncer class instanceVariableNames: 'current'!
  50. !SystemAnnouncer class methodsFor: 'accessing'!
  51. current
  52. ^ current ifNil: [ current := super new ]
  53. ! !
  54. !SystemAnnouncer class methodsFor: 'instance creation'!
  55. new
  56. self shouldNotImplement
  57. ! !
  58. Object subclass: #SystemAnnouncement
  59. instanceVariableNames: 'theClass'
  60. package: 'Kernel-Announcements'!
  61. !SystemAnnouncement methodsFor: 'accessing'!
  62. theClass
  63. ^ theClass
  64. !
  65. theClass: aClass
  66. theClass := aClass
  67. ! !
  68. SystemAnnouncement subclass: #ClassAdded
  69. instanceVariableNames: ''
  70. package: 'Kernel-Announcements'!
  71. SystemAnnouncement subclass: #ClassCommentChanged
  72. instanceVariableNames: ''
  73. package: 'Kernel-Announcements'!
  74. SystemAnnouncement subclass: #ClassDefinitionChanged
  75. instanceVariableNames: ''
  76. package: 'Kernel-Announcements'!
  77. SystemAnnouncement subclass: #ClassRemoved
  78. instanceVariableNames: ''
  79. package: 'Kernel-Announcements'!
  80. SystemAnnouncement subclass: #ClassRenamed
  81. instanceVariableNames: ''
  82. package: 'Kernel-Announcements'!
  83. SystemAnnouncement subclass: #MethodAnnouncement
  84. instanceVariableNames: 'method'
  85. package: 'Kernel-Announcements'!
  86. !MethodAnnouncement methodsFor: 'accessing'!
  87. method
  88. ^ method
  89. !
  90. method: aCompiledMethod
  91. method := aCompiledMethod
  92. ! !
  93. MethodAnnouncement subclass: #MethodAdded
  94. instanceVariableNames: ''
  95. package: 'Kernel-Announcements'!
  96. MethodAnnouncement subclass: #MethodRemoved
  97. instanceVariableNames: ''
  98. package: 'Kernel-Announcements'!