Kernel-Announcements.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539
  1. smalltalk.addPackage('Kernel-Announcements');
  2. smalltalk.addClass('AnnouncementSubscription', smalltalk.Object, ['block', 'announcementClass'], 'Kernel-Announcements');
  3. smalltalk.AnnouncementSubscription.comment="The subscription is a single entry in a subscription registry of an `Announcer`.\x0aSeveral subscriptions by the same object is possible."
  4. smalltalk.addMethod(
  5. "_announcementClass",
  6. smalltalk.method({
  7. selector: "announcementClass",
  8. category: 'accessing',
  9. fn: function (){
  10. var self=this;
  11. return smalltalk.withContext(function($ctx1) {
  12. var $1;
  13. $1=self["@announcementClass"];
  14. return $1;
  15. }, function($ctx1) {$ctx1.fill(self,"announcementClass",{},smalltalk.AnnouncementSubscription)})},
  16. args: [],
  17. source: "announcementClass\x0a\x09^announcementClass",
  18. messageSends: [],
  19. referencedClasses: []
  20. }),
  21. smalltalk.AnnouncementSubscription);
  22. smalltalk.addMethod(
  23. "_announcementClass_",
  24. smalltalk.method({
  25. selector: "announcementClass:",
  26. category: 'accessing',
  27. fn: function (aClass){
  28. var self=this;
  29. return smalltalk.withContext(function($ctx1) {
  30. self["@announcementClass"]=aClass;
  31. return self}, function($ctx1) {$ctx1.fill(self,"announcementClass:",{aClass:aClass},smalltalk.AnnouncementSubscription)})},
  32. args: ["aClass"],
  33. source: "announcementClass: aClass\x0a\x09announcementClass := aClass",
  34. messageSends: [],
  35. referencedClasses: []
  36. }),
  37. smalltalk.AnnouncementSubscription);
  38. smalltalk.addMethod(
  39. "_block",
  40. smalltalk.method({
  41. selector: "block",
  42. category: 'accessing',
  43. fn: function (){
  44. var self=this;
  45. return smalltalk.withContext(function($ctx1) {
  46. var $1;
  47. $1=self["@block"];
  48. return $1;
  49. }, function($ctx1) {$ctx1.fill(self,"block",{},smalltalk.AnnouncementSubscription)})},
  50. args: [],
  51. source: "block\x0a\x09^block",
  52. messageSends: [],
  53. referencedClasses: []
  54. }),
  55. smalltalk.AnnouncementSubscription);
  56. smalltalk.addMethod(
  57. "_block_",
  58. smalltalk.method({
  59. selector: "block:",
  60. category: 'accessing',
  61. fn: function (aBlock){
  62. var self=this;
  63. return smalltalk.withContext(function($ctx1) {
  64. self["@block"]=aBlock;
  65. return self}, function($ctx1) {$ctx1.fill(self,"block:",{aBlock:aBlock},smalltalk.AnnouncementSubscription)})},
  66. args: ["aBlock"],
  67. source: "block: aBlock\x0a\x09block := aBlock",
  68. messageSends: [],
  69. referencedClasses: []
  70. }),
  71. smalltalk.AnnouncementSubscription);
  72. smalltalk.addMethod(
  73. "_deliver_",
  74. smalltalk.method({
  75. selector: "deliver:",
  76. category: 'announcing',
  77. fn: function (anAnnouncement){
  78. var self=this;
  79. return smalltalk.withContext(function($ctx1) {
  80. var $1;
  81. $1=_st(self)._handlesAnnouncement_(anAnnouncement);
  82. if(smalltalk.assert($1)){
  83. _st(_st(self)._block())._value_(anAnnouncement);
  84. };
  85. return self}, function($ctx1) {$ctx1.fill(self,"deliver:",{anAnnouncement:anAnnouncement},smalltalk.AnnouncementSubscription)})},
  86. args: ["anAnnouncement"],
  87. source: "deliver: anAnnouncement\x0a\x09(self handlesAnnouncement: anAnnouncement)\x0a\x09\x09ifTrue: [self block value: anAnnouncement]",
  88. messageSends: ["ifTrue:", "value:", "block", "handlesAnnouncement:"],
  89. referencedClasses: []
  90. }),
  91. smalltalk.AnnouncementSubscription);
  92. smalltalk.addMethod(
  93. "_handlesAnnouncement_",
  94. smalltalk.method({
  95. selector: "handlesAnnouncement:",
  96. category: 'announcing',
  97. fn: function (anAnnouncement){
  98. var self=this;
  99. return smalltalk.withContext(function($ctx1) {
  100. var $1;
  101. $1=_st(anAnnouncement)._isKindOf_(_st(self)._announcementClass());
  102. return $1;
  103. }, function($ctx1) {$ctx1.fill(self,"handlesAnnouncement:",{anAnnouncement:anAnnouncement},smalltalk.AnnouncementSubscription)})},
  104. args: ["anAnnouncement"],
  105. source: "handlesAnnouncement: anAnnouncement\x0a\x09^anAnnouncement isKindOf: self announcementClass",
  106. messageSends: ["isKindOf:", "announcementClass"],
  107. referencedClasses: []
  108. }),
  109. smalltalk.AnnouncementSubscription);
  110. smalltalk.addClass('Announcer', smalltalk.Object, ['registry', 'subscriptions'], 'Kernel-Announcements');
  111. smalltalk.Announcer.comment="The code is based on the announcements as [described by Vassili Bykov](http://www.cincomsmalltalk.com/userblogs/vbykov/blogView?searchCategory=Announcements%20Framework).\x0aThe Announcer holds annoncement subscriptions (`AnnouncementSubscription`) in a private registry.\x0a\x0aUse `#on:do:` to register subscriptions."
  112. smalltalk.addMethod(
  113. "_announce_",
  114. smalltalk.method({
  115. selector: "announce:",
  116. category: 'announcing',
  117. fn: function (anAnnouncement){
  118. var self=this;
  119. return smalltalk.withContext(function($ctx1) {
  120. _st(self["@subscriptions"])._do_((function(each){
  121. return smalltalk.withContext(function($ctx2) {
  122. return _st(each)._deliver_(anAnnouncement);
  123. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1)})}));
  124. return self}, function($ctx1) {$ctx1.fill(self,"announce:",{anAnnouncement:anAnnouncement},smalltalk.Announcer)})},
  125. args: ["anAnnouncement"],
  126. source: "announce: anAnnouncement\x0a\x09subscriptions do: [:each |\x0a\x09\x09each deliver: anAnnouncement]",
  127. messageSends: ["do:", "deliver:"],
  128. referencedClasses: []
  129. }),
  130. smalltalk.Announcer);
  131. smalltalk.addMethod(
  132. "_initialize",
  133. smalltalk.method({
  134. selector: "initialize",
  135. category: 'initialization',
  136. fn: function (){
  137. var self=this;
  138. function $Array(){return smalltalk.Array||(typeof Array=="undefined"?nil:Array)}
  139. return smalltalk.withContext(function($ctx1) {
  140. smalltalk.Object.fn.prototype._initialize.apply(_st(self), []);
  141. self["@subscriptions"]=_st($Array())._new();
  142. return self}, function($ctx1) {$ctx1.fill(self,"initialize",{},smalltalk.Announcer)})},
  143. args: [],
  144. source: "initialize\x0a\x09super initialize.\x0a\x09subscriptions := Array new",
  145. messageSends: ["initialize", "new"],
  146. referencedClasses: ["Array"]
  147. }),
  148. smalltalk.Announcer);
  149. smalltalk.addMethod(
  150. "_on_do_",
  151. smalltalk.method({
  152. selector: "on:do:",
  153. category: 'subscribing',
  154. fn: function (aClass,aBlock){
  155. var self=this;
  156. function $AnnouncementSubscription(){return smalltalk.AnnouncementSubscription||(typeof AnnouncementSubscription=="undefined"?nil:AnnouncementSubscription)}
  157. return smalltalk.withContext(function($ctx1) {
  158. var $1,$2;
  159. $1=_st($AnnouncementSubscription())._new();
  160. _st($1)._block_(aBlock);
  161. _st($1)._announcementClass_(aClass);
  162. $2=_st($1)._yourself();
  163. _st(self["@subscriptions"])._add_($2);
  164. return self}, function($ctx1) {$ctx1.fill(self,"on:do:",{aClass:aClass,aBlock:aBlock},smalltalk.Announcer)})},
  165. args: ["aClass", "aBlock"],
  166. source: "on: aClass do: aBlock\x0a\x09subscriptions add: (AnnouncementSubscription new\x0a\x09\x09block: aBlock;\x0a\x09\x09announcementClass: aClass;\x0a\x09\x09yourself)",
  167. messageSends: ["add:", "block:", "new", "announcementClass:", "yourself"],
  168. referencedClasses: ["AnnouncementSubscription"]
  169. }),
  170. smalltalk.Announcer);
  171. smalltalk.addClass('SystemAnnouncer', smalltalk.Announcer, [], 'Kernel-Announcements');
  172. smalltalk.SystemAnnouncer.comment="My unique instance #current is the global announcer handling all Amber system-related announces"
  173. smalltalk.SystemAnnouncer.klass.iVarNames = ['current'];
  174. smalltalk.addMethod(
  175. "_current",
  176. smalltalk.method({
  177. selector: "current",
  178. category: 'accessing',
  179. fn: function (){
  180. var self=this;
  181. return smalltalk.withContext(function($ctx1) {
  182. var $2,$1;
  183. $2=self["@current"];
  184. if(($receiver = $2) == nil || $receiver == undefined){
  185. self["@current"]=smalltalk.Announcer.klass.fn.prototype._new.apply(_st(self), []);
  186. $1=self["@current"];
  187. } else {
  188. $1=$2;
  189. };
  190. return $1;
  191. }, function($ctx1) {$ctx1.fill(self,"current",{},smalltalk.SystemAnnouncer.klass)})},
  192. args: [],
  193. source: "current\x0a\x09^ current ifNil: [ current := super new ]",
  194. messageSends: ["ifNil:", "new"],
  195. referencedClasses: []
  196. }),
  197. smalltalk.SystemAnnouncer.klass);
  198. smalltalk.addMethod(
  199. "_new",
  200. smalltalk.method({
  201. selector: "new",
  202. category: 'instance creation',
  203. fn: function (){
  204. var self=this;
  205. return smalltalk.withContext(function($ctx1) {
  206. _st(self)._shouldNotImplement();
  207. return self}, function($ctx1) {$ctx1.fill(self,"new",{},smalltalk.SystemAnnouncer.klass)})},
  208. args: [],
  209. source: "new\x0a\x09self shouldNotImplement",
  210. messageSends: ["shouldNotImplement"],
  211. referencedClasses: []
  212. }),
  213. smalltalk.SystemAnnouncer.klass);
  214. smalltalk.addClass('SystemAnnouncement', smalltalk.Object, ['theClass'], 'Kernel-Announcements');
  215. smalltalk.SystemAnnouncement.comment="I am the superclass of all system announcements"
  216. smalltalk.addMethod(
  217. "_theClass",
  218. smalltalk.method({
  219. selector: "theClass",
  220. category: 'accessing',
  221. fn: function (){
  222. var self=this;
  223. return smalltalk.withContext(function($ctx1) {
  224. var $1;
  225. $1=self["@theClass"];
  226. return $1;
  227. }, function($ctx1) {$ctx1.fill(self,"theClass",{},smalltalk.SystemAnnouncement)})},
  228. args: [],
  229. source: "theClass\x0a\x09^ theClass",
  230. messageSends: [],
  231. referencedClasses: []
  232. }),
  233. smalltalk.SystemAnnouncement);
  234. smalltalk.addMethod(
  235. "_theClass_",
  236. smalltalk.method({
  237. selector: "theClass:",
  238. category: 'accessing',
  239. fn: function (aClass){
  240. var self=this;
  241. return smalltalk.withContext(function($ctx1) {
  242. self["@theClass"]=aClass;
  243. return self}, function($ctx1) {$ctx1.fill(self,"theClass:",{aClass:aClass},smalltalk.SystemAnnouncement)})},
  244. args: ["aClass"],
  245. source: "theClass: aClass\x0a\x09theClass := aClass",
  246. messageSends: [],
  247. referencedClasses: []
  248. }),
  249. smalltalk.SystemAnnouncement);
  250. smalltalk.addClass('ClassAnnouncement', smalltalk.SystemAnnouncement, ['theClass'], 'Kernel-Announcements');
  251. smalltalk.addMethod(
  252. "_theClass",
  253. smalltalk.method({
  254. selector: "theClass",
  255. category: 'accessing',
  256. fn: function (){
  257. var self=this;
  258. return smalltalk.withContext(function($ctx1) {
  259. var $1;
  260. $1=self["@theClass"];
  261. return $1;
  262. }, function($ctx1) {$ctx1.fill(self,"theClass",{},smalltalk.ClassAnnouncement)})},
  263. args: [],
  264. source: "theClass\x0a\x09^ theClass",
  265. messageSends: [],
  266. referencedClasses: []
  267. }),
  268. smalltalk.ClassAnnouncement);
  269. smalltalk.addMethod(
  270. "_theClass_",
  271. smalltalk.method({
  272. selector: "theClass:",
  273. category: 'accessing',
  274. fn: function (aClass){
  275. var self=this;
  276. return smalltalk.withContext(function($ctx1) {
  277. self["@theClass"]=aClass;
  278. return self}, function($ctx1) {$ctx1.fill(self,"theClass:",{aClass:aClass},smalltalk.ClassAnnouncement)})},
  279. args: ["aClass"],
  280. source: "theClass: aClass\x0a\x09theClass := aClass",
  281. messageSends: [],
  282. referencedClasses: []
  283. }),
  284. smalltalk.ClassAnnouncement);
  285. smalltalk.addClass('ClassAdded', smalltalk.ClassAnnouncement, [], 'Kernel-Announcements');
  286. smalltalk.ClassAdded.comment="I am emitted when a class is added to the system.\x0aSee ClassBuilder >> #addSubclassOf:... methods"
  287. smalltalk.addClass('ClassCommentChanged', smalltalk.ClassAnnouncement, [], 'Kernel-Announcements');
  288. smalltalk.ClassCommentChanged.comment="I am emitted when the comment of a class changes. (Behavior >> #comment)"
  289. smalltalk.addClass('ClassDefinitionChanged', smalltalk.ClassAnnouncement, [], 'Kernel-Announcements');
  290. smalltalk.ClassDefinitionChanged.comment="I am emitted when the defintion of a class changes.\x0aSee ClassBuilder >> #class:instanceVariableNames:"
  291. smalltalk.addClass('ClassRemoved', smalltalk.ClassAnnouncement, [], 'Kernel-Announcements');
  292. smalltalk.ClassRemoved.comment="I am emitted when a class is removed.\x0aSee Smalltalk >> #removeClass:"
  293. smalltalk.addClass('ClassRenamed', smalltalk.ClassAnnouncement, [], 'Kernel-Announcements');
  294. smalltalk.ClassRenamed.comment="I am emitted when a class is renamed.\x0aSee ClassBuilder >> #renameClass:to:"
  295. smalltalk.addClass('MethodAnnouncement', smalltalk.SystemAnnouncement, ['method'], 'Kernel-Announcements');
  296. smalltalk.addMethod(
  297. "_method",
  298. smalltalk.method({
  299. selector: "method",
  300. category: 'accessing',
  301. fn: function (){
  302. var self=this;
  303. return smalltalk.withContext(function($ctx1) {
  304. var $1;
  305. $1=self["@method"];
  306. return $1;
  307. }, function($ctx1) {$ctx1.fill(self,"method",{},smalltalk.MethodAnnouncement)})},
  308. args: [],
  309. source: "method\x0a\x09^ method",
  310. messageSends: [],
  311. referencedClasses: []
  312. }),
  313. smalltalk.MethodAnnouncement);
  314. smalltalk.addMethod(
  315. "_method_",
  316. smalltalk.method({
  317. selector: "method:",
  318. category: 'accessing',
  319. fn: function (aCompiledMethod){
  320. var self=this;
  321. return smalltalk.withContext(function($ctx1) {
  322. self["@method"]=aCompiledMethod;
  323. return self}, function($ctx1) {$ctx1.fill(self,"method:",{aCompiledMethod:aCompiledMethod},smalltalk.MethodAnnouncement)})},
  324. args: ["aCompiledMethod"],
  325. source: "method: aCompiledMethod\x0a\x09method := aCompiledMethod",
  326. messageSends: [],
  327. referencedClasses: []
  328. }),
  329. smalltalk.MethodAnnouncement);
  330. smalltalk.addClass('MethodAdded', smalltalk.MethodAnnouncement, [], 'Kernel-Announcements');
  331. smalltalk.addClass('MethodModified', smalltalk.MethodAnnouncement, ['oldMethod'], 'Kernel-Announcements');
  332. smalltalk.addMethod(
  333. "_oldMethod",
  334. smalltalk.method({
  335. selector: "oldMethod",
  336. category: 'accessing',
  337. fn: function (){
  338. var self=this;
  339. return smalltalk.withContext(function($ctx1) {
  340. var $1;
  341. $1=self["@oldMethod"];
  342. return $1;
  343. }, function($ctx1) {$ctx1.fill(self,"oldMethod",{},smalltalk.MethodModified)})},
  344. args: [],
  345. source: "oldMethod\x0a\x09^ oldMethod",
  346. messageSends: [],
  347. referencedClasses: []
  348. }),
  349. smalltalk.MethodModified);
  350. smalltalk.addMethod(
  351. "_oldMethod_",
  352. smalltalk.method({
  353. selector: "oldMethod:",
  354. category: 'accessing',
  355. fn: function (aMethod){
  356. var self=this;
  357. return smalltalk.withContext(function($ctx1) {
  358. self["@oldMethod"]=aMethod;
  359. return self}, function($ctx1) {$ctx1.fill(self,"oldMethod:",{aMethod:aMethod},smalltalk.MethodModified)})},
  360. args: ["aMethod"],
  361. source: "oldMethod: aMethod\x0a\x09oldMethod := aMethod",
  362. messageSends: [],
  363. referencedClasses: []
  364. }),
  365. smalltalk.MethodModified);
  366. smalltalk.addClass('MethodRemoved', smalltalk.MethodAnnouncement, [], 'Kernel-Announcements');
  367. smalltalk.addClass('PackageAnnouncement', smalltalk.SystemAnnouncement, ['package'], 'Kernel-Announcements');
  368. smalltalk.addMethod(
  369. "_package",
  370. smalltalk.method({
  371. selector: "package",
  372. category: 'accessing',
  373. fn: function (){
  374. var self=this;
  375. return smalltalk.withContext(function($ctx1) {
  376. var $1;
  377. $1=self["@package"];
  378. return $1;
  379. }, function($ctx1) {$ctx1.fill(self,"package",{},smalltalk.PackageAnnouncement)})},
  380. args: [],
  381. source: "package\x0a\x09^ package",
  382. messageSends: [],
  383. referencedClasses: []
  384. }),
  385. smalltalk.PackageAnnouncement);
  386. smalltalk.addMethod(
  387. "_package_",
  388. smalltalk.method({
  389. selector: "package:",
  390. category: 'accessing',
  391. fn: function (aPackage){
  392. var self=this;
  393. return smalltalk.withContext(function($ctx1) {
  394. self["@package"]=aPackage;
  395. return self}, function($ctx1) {$ctx1.fill(self,"package:",{aPackage:aPackage},smalltalk.PackageAnnouncement)})},
  396. args: ["aPackage"],
  397. source: "package: aPackage\x0a\x09package := aPackage",
  398. messageSends: [],
  399. referencedClasses: []
  400. }),
  401. smalltalk.PackageAnnouncement);
  402. smalltalk.addClass('PackageAdded', smalltalk.PackageAnnouncement, [], 'Kernel-Announcements');
  403. smalltalk.addClass('PackageRemoved', smalltalk.PackageAnnouncement, [], 'Kernel-Announcements');
  404. smalltalk.addClass('ProtocolAnnouncement', smalltalk.SystemAnnouncement, ['theClass', 'protocol'], 'Kernel-Announcements');
  405. smalltalk.addMethod(
  406. "_protocol",
  407. smalltalk.method({
  408. selector: "protocol",
  409. category: 'accessing',
  410. fn: function (){
  411. var self=this;
  412. return smalltalk.withContext(function($ctx1) {
  413. var $1;
  414. $1=self["@protocol"];
  415. return $1;
  416. }, function($ctx1) {$ctx1.fill(self,"protocol",{},smalltalk.ProtocolAnnouncement)})},
  417. args: [],
  418. source: "protocol\x0a\x09^ protocol",
  419. messageSends: [],
  420. referencedClasses: []
  421. }),
  422. smalltalk.ProtocolAnnouncement);
  423. smalltalk.addMethod(
  424. "_protocol_",
  425. smalltalk.method({
  426. selector: "protocol:",
  427. category: 'accessing',
  428. fn: function (aString){
  429. var self=this;
  430. return smalltalk.withContext(function($ctx1) {
  431. self["@protocol"]=aString;
  432. return self}, function($ctx1) {$ctx1.fill(self,"protocol:",{aString:aString},smalltalk.ProtocolAnnouncement)})},
  433. args: ["aString"],
  434. source: "protocol: aString\x0a\x09protocol := aString",
  435. messageSends: [],
  436. referencedClasses: []
  437. }),
  438. smalltalk.ProtocolAnnouncement);
  439. smalltalk.addMethod(
  440. "_theClass",
  441. smalltalk.method({
  442. selector: "theClass",
  443. category: 'accessing',
  444. fn: function (){
  445. var self=this;
  446. return smalltalk.withContext(function($ctx1) {
  447. var $1;
  448. $1=self["@theClass"];
  449. return $1;
  450. }, function($ctx1) {$ctx1.fill(self,"theClass",{},smalltalk.ProtocolAnnouncement)})},
  451. args: [],
  452. source: "theClass\x0a\x09^ theClass",
  453. messageSends: [],
  454. referencedClasses: []
  455. }),
  456. smalltalk.ProtocolAnnouncement);
  457. smalltalk.addMethod(
  458. "_theClass_",
  459. smalltalk.method({
  460. selector: "theClass:",
  461. category: 'accessing',
  462. fn: function (aClass){
  463. var self=this;
  464. return smalltalk.withContext(function($ctx1) {
  465. self["@theClass"]=aClass;
  466. return self}, function($ctx1) {$ctx1.fill(self,"theClass:",{aClass:aClass},smalltalk.ProtocolAnnouncement)})},
  467. args: ["aClass"],
  468. source: "theClass: aClass\x0a\x09theClass := aClass",
  469. messageSends: [],
  470. referencedClasses: []
  471. }),
  472. smalltalk.ProtocolAnnouncement);
  473. smalltalk.addClass('ProtocolAdded', smalltalk.ProtocolAnnouncement, [], 'Kernel-Announcements');
  474. smalltalk.addClass('ProtocolRemoved', smalltalk.ProtocolAnnouncement, [], 'Kernel-Announcements');