Kernel-Announcements.js 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137
  1. define("amber_core/Kernel-Announcements", ["amber/boot", "amber_core/Kernel-Objects"], function($boot){"use strict";
  2. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  3. $core.addPackage('Kernel-Announcements');
  4. $core.packages["Kernel-Announcements"].innerEval = function (expr) { return eval(expr); };
  5. $core.packages["Kernel-Announcements"].transport = {"type":"amd","amdNamespace":"amber_core"};
  6. $core.addClass('AnnouncementSubscription', $globals.Object, ['valuable', 'announcementClass'], 'Kernel-Announcements');
  7. //>>excludeStart("ide", pragmas.excludeIdeData);
  8. $globals.AnnouncementSubscription.comment="I am a single entry in a subscription registry of an `Announcer`.\x0aSeveral subscriptions by the same object is possible.";
  9. //>>excludeEnd("ide");
  10. $core.addMethod(
  11. $core.method({
  12. selector: "announcementClass",
  13. protocol: 'accessing',
  14. fn: function (){
  15. var self=this;
  16. return self["@announcementClass"];
  17. },
  18. //>>excludeStart("ide", pragmas.excludeIdeData);
  19. args: [],
  20. source: "announcementClass\x0a\x09^ announcementClass",
  21. referencedClasses: [],
  22. //>>excludeEnd("ide");
  23. messageSends: []
  24. }),
  25. $globals.AnnouncementSubscription);
  26. $core.addMethod(
  27. $core.method({
  28. selector: "announcementClass:",
  29. protocol: 'accessing',
  30. fn: function (aClass){
  31. var self=this;
  32. self["@announcementClass"]=aClass;
  33. return self;
  34. },
  35. //>>excludeStart("ide", pragmas.excludeIdeData);
  36. args: ["aClass"],
  37. source: "announcementClass: aClass\x0a\x09announcementClass := aClass",
  38. referencedClasses: [],
  39. //>>excludeEnd("ide");
  40. messageSends: []
  41. }),
  42. $globals.AnnouncementSubscription);
  43. $core.addMethod(
  44. $core.method({
  45. selector: "deliver:",
  46. protocol: 'announcing',
  47. fn: function (anAnnouncement){
  48. var self=this;
  49. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50. return $core.withContext(function($ctx1) {
  51. //>>excludeEnd("ctx");
  52. var $1;
  53. $1=self._handlesAnnouncement_(anAnnouncement);
  54. if($core.assert($1)){
  55. $recv(self._valuable())._value_(anAnnouncement);
  56. };
  57. return self;
  58. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59. }, function($ctx1) {$ctx1.fill(self,"deliver:",{anAnnouncement:anAnnouncement},$globals.AnnouncementSubscription)});
  60. //>>excludeEnd("ctx");
  61. },
  62. //>>excludeStart("ide", pragmas.excludeIdeData);
  63. args: ["anAnnouncement"],
  64. source: "deliver: anAnnouncement\x0a\x09(self handlesAnnouncement: anAnnouncement)\x0a\x09\x09ifTrue: [ self valuable value: anAnnouncement ]",
  65. referencedClasses: [],
  66. //>>excludeEnd("ide");
  67. messageSends: ["ifTrue:", "handlesAnnouncement:", "value:", "valuable"]
  68. }),
  69. $globals.AnnouncementSubscription);
  70. $core.addMethod(
  71. $core.method({
  72. selector: "handlesAnnouncement:",
  73. protocol: 'announcing',
  74. fn: function (anAnnouncement){
  75. var self=this;
  76. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77. return $core.withContext(function($ctx1) {
  78. //>>excludeEnd("ctx");
  79. var $2,$3,$1,$receiver;
  80. $2=$recv($globals.Smalltalk)._globals();
  81. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  82. $ctx1.sendIdx["globals"]=1;
  83. //>>excludeEnd("ctx");
  84. $3=$recv(self._announcementClass())._name();
  85. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  86. $ctx1.sendIdx["name"]=1;
  87. //>>excludeEnd("ctx");
  88. $1=$recv($2)._at_($3);
  89. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  90. $ctx1.sendIdx["at:"]=1;
  91. //>>excludeEnd("ctx");
  92. if(($receiver = $1) == null || $receiver.isNil){
  93. return false;
  94. } else {
  95. var class_;
  96. class_=$receiver;
  97. return $recv($recv($recv($globals.Smalltalk)._globals())._at_($recv($recv($recv(anAnnouncement)._class())._theNonMetaClass())._name()))._includesBehavior_(class_);
  98. };
  99. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  100. }, function($ctx1) {$ctx1.fill(self,"handlesAnnouncement:",{anAnnouncement:anAnnouncement},$globals.AnnouncementSubscription)});
  101. //>>excludeEnd("ctx");
  102. },
  103. //>>excludeStart("ide", pragmas.excludeIdeData);
  104. args: ["anAnnouncement"],
  105. source: "handlesAnnouncement: anAnnouncement\x0a\x09\x22anAnnouncement might be announced from within another Amber environment\x22\x0a\x09\x0a\x09^ (Smalltalk globals at: self announcementClass name)\x0a\x09\x09ifNil: [ ^ false ]\x0a\x09\x09ifNotNil: [ :class |\x0a\x09\x09(Smalltalk globals at: anAnnouncement class theNonMetaClass name) includesBehavior: class ]",
  106. referencedClasses: ["Smalltalk"],
  107. //>>excludeEnd("ide");
  108. messageSends: ["ifNil:ifNotNil:", "at:", "globals", "name", "announcementClass", "includesBehavior:", "theNonMetaClass", "class"]
  109. }),
  110. $globals.AnnouncementSubscription);
  111. $core.addMethod(
  112. $core.method({
  113. selector: "receiver",
  114. protocol: 'accessing',
  115. fn: function (){
  116. var self=this;
  117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  118. return $core.withContext(function($ctx1) {
  119. //>>excludeEnd("ctx");
  120. return $recv(self._valuable())._receiver();
  121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  122. }, function($ctx1) {$ctx1.fill(self,"receiver",{},$globals.AnnouncementSubscription)});
  123. //>>excludeEnd("ctx");
  124. },
  125. //>>excludeStart("ide", pragmas.excludeIdeData);
  126. args: [],
  127. source: "receiver\x0a\x09^ self valuable receiver",
  128. referencedClasses: [],
  129. //>>excludeEnd("ide");
  130. messageSends: ["receiver", "valuable"]
  131. }),
  132. $globals.AnnouncementSubscription);
  133. $core.addMethod(
  134. $core.method({
  135. selector: "valuable",
  136. protocol: 'accessing',
  137. fn: function (){
  138. var self=this;
  139. return self["@valuable"];
  140. },
  141. //>>excludeStart("ide", pragmas.excludeIdeData);
  142. args: [],
  143. source: "valuable\x0a\x09^ valuable",
  144. referencedClasses: [],
  145. //>>excludeEnd("ide");
  146. messageSends: []
  147. }),
  148. $globals.AnnouncementSubscription);
  149. $core.addMethod(
  150. $core.method({
  151. selector: "valuable:",
  152. protocol: 'accessing',
  153. fn: function (aValuable){
  154. var self=this;
  155. self["@valuable"]=aValuable;
  156. return self;
  157. },
  158. //>>excludeStart("ide", pragmas.excludeIdeData);
  159. args: ["aValuable"],
  160. source: "valuable: aValuable\x0a\x09valuable := aValuable",
  161. referencedClasses: [],
  162. //>>excludeEnd("ide");
  163. messageSends: []
  164. }),
  165. $globals.AnnouncementSubscription);
  166. $core.addClass('AnnouncementValuable', $globals.Object, ['valuable', 'receiver'], 'Kernel-Announcements');
  167. //>>excludeStart("ide", pragmas.excludeIdeData);
  168. $globals.AnnouncementValuable.comment="I wrap `valuable` objects (typically instances of `BlockClosure`) with a `receiver` to be able to unregister subscriptions based on a `receiver`.";
  169. //>>excludeEnd("ide");
  170. $core.addMethod(
  171. $core.method({
  172. selector: "receiver",
  173. protocol: 'accessing',
  174. fn: function (){
  175. var self=this;
  176. return self["@receiver"];
  177. },
  178. //>>excludeStart("ide", pragmas.excludeIdeData);
  179. args: [],
  180. source: "receiver\x0a\x09^ receiver",
  181. referencedClasses: [],
  182. //>>excludeEnd("ide");
  183. messageSends: []
  184. }),
  185. $globals.AnnouncementValuable);
  186. $core.addMethod(
  187. $core.method({
  188. selector: "receiver:",
  189. protocol: 'accessing',
  190. fn: function (anObject){
  191. var self=this;
  192. self["@receiver"]=anObject;
  193. return self;
  194. },
  195. //>>excludeStart("ide", pragmas.excludeIdeData);
  196. args: ["anObject"],
  197. source: "receiver: anObject\x0a\x09receiver := anObject",
  198. referencedClasses: [],
  199. //>>excludeEnd("ide");
  200. messageSends: []
  201. }),
  202. $globals.AnnouncementValuable);
  203. $core.addMethod(
  204. $core.method({
  205. selector: "valuable",
  206. protocol: 'accessing',
  207. fn: function (){
  208. var self=this;
  209. return self["@valuable"];
  210. },
  211. //>>excludeStart("ide", pragmas.excludeIdeData);
  212. args: [],
  213. source: "valuable\x0a\x09^ valuable",
  214. referencedClasses: [],
  215. //>>excludeEnd("ide");
  216. messageSends: []
  217. }),
  218. $globals.AnnouncementValuable);
  219. $core.addMethod(
  220. $core.method({
  221. selector: "valuable:",
  222. protocol: 'accessing',
  223. fn: function (anObject){
  224. var self=this;
  225. self["@valuable"]=anObject;
  226. return self;
  227. },
  228. //>>excludeStart("ide", pragmas.excludeIdeData);
  229. args: ["anObject"],
  230. source: "valuable: anObject\x0a\x09valuable := anObject",
  231. referencedClasses: [],
  232. //>>excludeEnd("ide");
  233. messageSends: []
  234. }),
  235. $globals.AnnouncementValuable);
  236. $core.addMethod(
  237. $core.method({
  238. selector: "value",
  239. protocol: 'evaluating',
  240. fn: function (){
  241. var self=this;
  242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  243. return $core.withContext(function($ctx1) {
  244. //>>excludeEnd("ctx");
  245. return $recv(self._valuable())._value();
  246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  247. }, function($ctx1) {$ctx1.fill(self,"value",{},$globals.AnnouncementValuable)});
  248. //>>excludeEnd("ctx");
  249. },
  250. //>>excludeStart("ide", pragmas.excludeIdeData);
  251. args: [],
  252. source: "value\x0a\x09^ self valuable value",
  253. referencedClasses: [],
  254. //>>excludeEnd("ide");
  255. messageSends: ["value", "valuable"]
  256. }),
  257. $globals.AnnouncementValuable);
  258. $core.addMethod(
  259. $core.method({
  260. selector: "value:",
  261. protocol: 'evaluating',
  262. fn: function (anObject){
  263. var self=this;
  264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  265. return $core.withContext(function($ctx1) {
  266. //>>excludeEnd("ctx");
  267. return $recv(self._valuable())._value_(anObject);
  268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  269. }, function($ctx1) {$ctx1.fill(self,"value:",{anObject:anObject},$globals.AnnouncementValuable)});
  270. //>>excludeEnd("ctx");
  271. },
  272. //>>excludeStart("ide", pragmas.excludeIdeData);
  273. args: ["anObject"],
  274. source: "value: anObject\x0a\x09^ self valuable value: anObject",
  275. referencedClasses: [],
  276. //>>excludeEnd("ide");
  277. messageSends: ["value:", "valuable"]
  278. }),
  279. $globals.AnnouncementValuable);
  280. $core.addClass('Announcer', $globals.Object, ['registry', 'subscriptions'], 'Kernel-Announcements');
  281. //>>excludeStart("ide", pragmas.excludeIdeData);
  282. $globals.Announcer.comment="I hold annoncement subscriptions (instances of `AnnouncementSubscription`) in a private registry.\x0aI announce (trigger) announces, which are then dispatched to all subscriptions.\x0a\x0aThe code is based on the announcements as [described by Vassili Bykov](http://www.cincomsmalltalk.com/userblogs/vbykov/blogView?searchCategory=Announcements%20Framework).\x0a\x0a## API\x0a\x0aUse `#announce:` to trigger an announcement.\x0a\x0aUse `#on:do:` or `#on:send:to:` to register subscriptions.\x0a\x0aWhen using `#on:send:to:`, unregistration can be done with `#unregister:`.\x0a\x0a## Usage example:\x0a\x0a SystemAnnouncer current\x0a on: ClassAdded\x0a do: [ :ann | window alert: ann theClass name, ' added' ].";
  283. //>>excludeEnd("ide");
  284. $core.addMethod(
  285. $core.method({
  286. selector: "announce:",
  287. protocol: 'announcing',
  288. fn: function (anAnnouncement){
  289. var self=this;
  290. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  291. return $core.withContext(function($ctx1) {
  292. //>>excludeEnd("ctx");
  293. $recv(self["@subscriptions"])._do_((function(each){
  294. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  295. return $core.withContext(function($ctx2) {
  296. //>>excludeEnd("ctx");
  297. return $recv(each)._deliver_(anAnnouncement);
  298. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  299. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  300. //>>excludeEnd("ctx");
  301. }));
  302. return self;
  303. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  304. }, function($ctx1) {$ctx1.fill(self,"announce:",{anAnnouncement:anAnnouncement},$globals.Announcer)});
  305. //>>excludeEnd("ctx");
  306. },
  307. //>>excludeStart("ide", pragmas.excludeIdeData);
  308. args: ["anAnnouncement"],
  309. source: "announce: anAnnouncement\x0a\x09subscriptions do: [ :each |\x0a\x09\x09each deliver: anAnnouncement ]",
  310. referencedClasses: [],
  311. //>>excludeEnd("ide");
  312. messageSends: ["do:", "deliver:"]
  313. }),
  314. $globals.Announcer);
  315. $core.addMethod(
  316. $core.method({
  317. selector: "initialize",
  318. protocol: 'initialization',
  319. fn: function (){
  320. var self=this;
  321. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  322. return $core.withContext(function($ctx1) {
  323. //>>excludeEnd("ctx");
  324. (
  325. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  326. $ctx1.supercall = true,
  327. //>>excludeEnd("ctx");
  328. ($globals.Announcer.superclass||$boot.nilAsClass).fn.prototype._initialize.apply($recv(self), []));
  329. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  330. $ctx1.supercall = false;
  331. //>>excludeEnd("ctx");;
  332. self["@subscriptions"]=$recv($globals.OrderedCollection)._new();
  333. return self;
  334. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  335. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Announcer)});
  336. //>>excludeEnd("ctx");
  337. },
  338. //>>excludeStart("ide", pragmas.excludeIdeData);
  339. args: [],
  340. source: "initialize\x0a\x09super initialize.\x0a\x09subscriptions := OrderedCollection new",
  341. referencedClasses: ["OrderedCollection"],
  342. //>>excludeEnd("ide");
  343. messageSends: ["initialize", "new"]
  344. }),
  345. $globals.Announcer);
  346. $core.addMethod(
  347. $core.method({
  348. selector: "on:do:",
  349. protocol: 'subscribing',
  350. fn: function (aClass,aBlock){
  351. var self=this;
  352. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  353. return $core.withContext(function($ctx1) {
  354. //>>excludeEnd("ctx");
  355. self._on_do_for_(aClass,aBlock,nil);
  356. return self;
  357. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  358. }, function($ctx1) {$ctx1.fill(self,"on:do:",{aClass:aClass,aBlock:aBlock},$globals.Announcer)});
  359. //>>excludeEnd("ctx");
  360. },
  361. //>>excludeStart("ide", pragmas.excludeIdeData);
  362. args: ["aClass", "aBlock"],
  363. source: "on: aClass do: aBlock\x0a\x09self on: aClass do: aBlock for: nil",
  364. referencedClasses: [],
  365. //>>excludeEnd("ide");
  366. messageSends: ["on:do:for:"]
  367. }),
  368. $globals.Announcer);
  369. $core.addMethod(
  370. $core.method({
  371. selector: "on:do:for:",
  372. protocol: 'subscribing',
  373. fn: function (aClass,aBlock,aReceiver){
  374. var self=this;
  375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  376. return $core.withContext(function($ctx1) {
  377. //>>excludeEnd("ctx");
  378. var $1,$3,$5,$6,$4,$2;
  379. $1=self["@subscriptions"];
  380. $3=$recv($globals.AnnouncementSubscription)._new();
  381. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  382. $ctx1.sendIdx["new"]=1;
  383. //>>excludeEnd("ctx");
  384. $5=$recv($globals.AnnouncementValuable)._new();
  385. $recv($5)._valuable_(aBlock);
  386. $recv($5)._receiver_(aReceiver);
  387. $6=$recv($5)._yourself();
  388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  389. $ctx1.sendIdx["yourself"]=1;
  390. //>>excludeEnd("ctx");
  391. $4=$6;
  392. $recv($3)._valuable_($4);
  393. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  394. $ctx1.sendIdx["valuable:"]=1;
  395. //>>excludeEnd("ctx");
  396. $recv($3)._announcementClass_(aClass);
  397. $2=$recv($3)._yourself();
  398. $recv($1)._add_($2);
  399. return self;
  400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  401. }, function($ctx1) {$ctx1.fill(self,"on:do:for:",{aClass:aClass,aBlock:aBlock,aReceiver:aReceiver},$globals.Announcer)});
  402. //>>excludeEnd("ctx");
  403. },
  404. //>>excludeStart("ide", pragmas.excludeIdeData);
  405. args: ["aClass", "aBlock", "aReceiver"],
  406. source: "on: aClass do: aBlock for: aReceiver\x0a\x09subscriptions add: (AnnouncementSubscription new\x0a\x09\x09valuable: (AnnouncementValuable new\x0a\x09\x09\x09valuable: aBlock;\x0a\x09\x09\x09receiver: aReceiver;\x0a\x09\x09\x09yourself);\x0a\x09\x09announcementClass: aClass;\x0a\x09\x09yourself)",
  407. referencedClasses: ["AnnouncementSubscription", "AnnouncementValuable"],
  408. //>>excludeEnd("ide");
  409. messageSends: ["add:", "valuable:", "new", "receiver:", "yourself", "announcementClass:"]
  410. }),
  411. $globals.Announcer);
  412. $core.addMethod(
  413. $core.method({
  414. selector: "on:doOnce:",
  415. protocol: 'subscribing',
  416. fn: function (aClass,aBlock){
  417. var self=this;
  418. var subscription;
  419. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  420. return $core.withContext(function($ctx1) {
  421. //>>excludeEnd("ctx");
  422. var $1;
  423. $1=$recv($globals.AnnouncementSubscription)._new();
  424. $recv($1)._announcementClass_(aClass);
  425. subscription=$recv($1)._yourself();
  426. $recv(subscription)._valuable_((function(ann){
  427. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  428. return $core.withContext(function($ctx2) {
  429. //>>excludeEnd("ctx");
  430. $recv(self["@subscriptions"])._remove_(subscription);
  431. return $recv(aBlock)._value_(ann);
  432. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  433. }, function($ctx2) {$ctx2.fillBlock({ann:ann},$ctx1,1)});
  434. //>>excludeEnd("ctx");
  435. }));
  436. $recv(self["@subscriptions"])._add_(subscription);
  437. return self;
  438. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  439. }, function($ctx1) {$ctx1.fill(self,"on:doOnce:",{aClass:aClass,aBlock:aBlock,subscription:subscription},$globals.Announcer)});
  440. //>>excludeEnd("ctx");
  441. },
  442. //>>excludeStart("ide", pragmas.excludeIdeData);
  443. args: ["aClass", "aBlock"],
  444. source: "on: aClass doOnce: aBlock\x0a\x09| subscription |\x0a\x09\x0a\x09subscription := AnnouncementSubscription new\x0a\x09\x09announcementClass: aClass;\x0a\x09\x09yourself.\x0a\x09subscription valuable: [ :ann |\x0a\x09\x09subscriptions remove: subscription.\x0a\x09\x09aBlock value: ann ].\x0a\x0a\x09subscriptions add: subscription",
  445. referencedClasses: ["AnnouncementSubscription"],
  446. //>>excludeEnd("ide");
  447. messageSends: ["announcementClass:", "new", "yourself", "valuable:", "remove:", "value:", "add:"]
  448. }),
  449. $globals.Announcer);
  450. $core.addMethod(
  451. $core.method({
  452. selector: "on:send:to:",
  453. protocol: 'subscribing',
  454. fn: function (aClass,aSelector,anObject){
  455. var self=this;
  456. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  457. return $core.withContext(function($ctx1) {
  458. //>>excludeEnd("ctx");
  459. var $1,$3,$5,$6,$4,$2;
  460. $1=self["@subscriptions"];
  461. $3=$recv($globals.AnnouncementSubscription)._new();
  462. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  463. $ctx1.sendIdx["new"]=1;
  464. //>>excludeEnd("ctx");
  465. $5=$recv($globals.MessageSend)._new();
  466. $recv($5)._receiver_(anObject);
  467. $recv($5)._selector_(aSelector);
  468. $6=$recv($5)._yourself();
  469. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  470. $ctx1.sendIdx["yourself"]=1;
  471. //>>excludeEnd("ctx");
  472. $4=$6;
  473. $recv($3)._valuable_($4);
  474. $recv($3)._announcementClass_(aClass);
  475. $2=$recv($3)._yourself();
  476. $recv($1)._add_($2);
  477. return self;
  478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  479. }, function($ctx1) {$ctx1.fill(self,"on:send:to:",{aClass:aClass,aSelector:aSelector,anObject:anObject},$globals.Announcer)});
  480. //>>excludeEnd("ctx");
  481. },
  482. //>>excludeStart("ide", pragmas.excludeIdeData);
  483. args: ["aClass", "aSelector", "anObject"],
  484. source: "on: aClass send: aSelector to: anObject\x0a\x09subscriptions add: (AnnouncementSubscription new\x0a\x09\x09valuable: (MessageSend new\x0a\x09\x09\x09receiver: anObject;\x0a\x09\x09\x09selector: aSelector;\x0a\x09\x09\x09yourself);\x0a\x09\x09announcementClass: aClass;\x0a\x09\x09yourself)",
  485. referencedClasses: ["AnnouncementSubscription", "MessageSend"],
  486. //>>excludeEnd("ide");
  487. messageSends: ["add:", "valuable:", "new", "receiver:", "selector:", "yourself", "announcementClass:"]
  488. }),
  489. $globals.Announcer);
  490. $core.addMethod(
  491. $core.method({
  492. selector: "unsubscribe:",
  493. protocol: 'subscribing',
  494. fn: function (anObject){
  495. var self=this;
  496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  497. return $core.withContext(function($ctx1) {
  498. //>>excludeEnd("ctx");
  499. self["@subscriptions"]=$recv(self["@subscriptions"])._reject_((function(each){
  500. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  501. return $core.withContext(function($ctx2) {
  502. //>>excludeEnd("ctx");
  503. return $recv($recv(each)._receiver()).__eq(anObject);
  504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  505. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  506. //>>excludeEnd("ctx");
  507. }));
  508. return self;
  509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  510. }, function($ctx1) {$ctx1.fill(self,"unsubscribe:",{anObject:anObject},$globals.Announcer)});
  511. //>>excludeEnd("ctx");
  512. },
  513. //>>excludeStart("ide", pragmas.excludeIdeData);
  514. args: ["anObject"],
  515. source: "unsubscribe: anObject\x0a\x09subscriptions := subscriptions reject: [ :each |\x0a\x09\x09each receiver = anObject ]",
  516. referencedClasses: [],
  517. //>>excludeEnd("ide");
  518. messageSends: ["reject:", "=", "receiver"]
  519. }),
  520. $globals.Announcer);
  521. $core.addClass('SystemAnnouncer', $globals.Announcer, [], 'Kernel-Announcements');
  522. //>>excludeStart("ide", pragmas.excludeIdeData);
  523. $globals.SystemAnnouncer.comment="My unique instance is the global announcer handling all Amber system-related announces.\x0a\x0a## API\x0a\x0aAccess to the unique instance is done via `#current`";
  524. //>>excludeEnd("ide");
  525. $globals.SystemAnnouncer.klass.iVarNames = ['current'];
  526. $core.addMethod(
  527. $core.method({
  528. selector: "current",
  529. protocol: 'accessing',
  530. fn: function (){
  531. var self=this;
  532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  533. return $core.withContext(function($ctx1) {
  534. //>>excludeEnd("ctx");
  535. var $1,$receiver;
  536. $1=self["@current"];
  537. if(($receiver = $1) == null || $receiver.isNil){
  538. self["@current"]=(
  539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  540. $ctx1.supercall = true,
  541. //>>excludeEnd("ctx");
  542. ($globals.SystemAnnouncer.klass.superclass||$boot.nilAsClass).fn.prototype._new.apply($recv(self), []));
  543. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  544. $ctx1.supercall = false;
  545. //>>excludeEnd("ctx");;
  546. return self["@current"];
  547. } else {
  548. return $1;
  549. };
  550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  551. }, function($ctx1) {$ctx1.fill(self,"current",{},$globals.SystemAnnouncer.klass)});
  552. //>>excludeEnd("ctx");
  553. },
  554. //>>excludeStart("ide", pragmas.excludeIdeData);
  555. args: [],
  556. source: "current\x0a\x09^ current ifNil: [ current := super new ]",
  557. referencedClasses: [],
  558. //>>excludeEnd("ide");
  559. messageSends: ["ifNil:", "new"]
  560. }),
  561. $globals.SystemAnnouncer.klass);
  562. $core.addMethod(
  563. $core.method({
  564. selector: "new",
  565. protocol: 'instance creation',
  566. fn: function (){
  567. var self=this;
  568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  569. return $core.withContext(function($ctx1) {
  570. //>>excludeEnd("ctx");
  571. self._shouldNotImplement();
  572. return self;
  573. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  574. }, function($ctx1) {$ctx1.fill(self,"new",{},$globals.SystemAnnouncer.klass)});
  575. //>>excludeEnd("ctx");
  576. },
  577. //>>excludeStart("ide", pragmas.excludeIdeData);
  578. args: [],
  579. source: "new\x0a\x09self shouldNotImplement",
  580. referencedClasses: [],
  581. //>>excludeEnd("ide");
  582. messageSends: ["shouldNotImplement"]
  583. }),
  584. $globals.SystemAnnouncer.klass);
  585. $core.addClass('SystemAnnouncement', $globals.Object, [], 'Kernel-Announcements');
  586. //>>excludeStart("ide", pragmas.excludeIdeData);
  587. $globals.SystemAnnouncement.comment="I am the superclass of all system announcements";
  588. //>>excludeEnd("ide");
  589. $core.addMethod(
  590. $core.method({
  591. selector: "classTag",
  592. protocol: 'accessing',
  593. fn: function (){
  594. var self=this;
  595. return "announcement";
  596. },
  597. //>>excludeStart("ide", pragmas.excludeIdeData);
  598. args: [],
  599. source: "classTag\x0a\x09\x22Returns a tag or general category for this class.\x0a\x09Typically used to help tools do some reflection.\x0a\x09Helios, for example, uses this to decide what icon the class should display.\x22\x0a\x09\x0a\x09^ 'announcement'",
  600. referencedClasses: [],
  601. //>>excludeEnd("ide");
  602. messageSends: []
  603. }),
  604. $globals.SystemAnnouncement.klass);
  605. $core.addClass('ClassAnnouncement', $globals.SystemAnnouncement, ['theClass'], 'Kernel-Announcements');
  606. //>>excludeStart("ide", pragmas.excludeIdeData);
  607. $globals.ClassAnnouncement.comment="I am the abstract superclass of class-related announcements.";
  608. //>>excludeEnd("ide");
  609. $core.addMethod(
  610. $core.method({
  611. selector: "theClass",
  612. protocol: 'accessing',
  613. fn: function (){
  614. var self=this;
  615. return self["@theClass"];
  616. },
  617. //>>excludeStart("ide", pragmas.excludeIdeData);
  618. args: [],
  619. source: "theClass\x0a\x09^ theClass",
  620. referencedClasses: [],
  621. //>>excludeEnd("ide");
  622. messageSends: []
  623. }),
  624. $globals.ClassAnnouncement);
  625. $core.addMethod(
  626. $core.method({
  627. selector: "theClass:",
  628. protocol: 'accessing',
  629. fn: function (aClass){
  630. var self=this;
  631. self["@theClass"]=aClass;
  632. return self;
  633. },
  634. //>>excludeStart("ide", pragmas.excludeIdeData);
  635. args: ["aClass"],
  636. source: "theClass: aClass\x0a\x09theClass := aClass",
  637. referencedClasses: [],
  638. //>>excludeEnd("ide");
  639. messageSends: []
  640. }),
  641. $globals.ClassAnnouncement);
  642. $core.addClass('ClassAdded', $globals.ClassAnnouncement, [], 'Kernel-Announcements');
  643. //>>excludeStart("ide", pragmas.excludeIdeData);
  644. $globals.ClassAdded.comment="I am emitted when a class is added to the system.\x0aSee ClassBuilder >> #addSubclassOf:... methods";
  645. //>>excludeEnd("ide");
  646. $core.addClass('ClassCommentChanged', $globals.ClassAnnouncement, [], 'Kernel-Announcements');
  647. //>>excludeStart("ide", pragmas.excludeIdeData);
  648. $globals.ClassCommentChanged.comment="I am emitted when the comment of a class changes. (Behavior >> #comment)";
  649. //>>excludeEnd("ide");
  650. $core.addClass('ClassDefinitionChanged', $globals.ClassAnnouncement, [], 'Kernel-Announcements');
  651. //>>excludeStart("ide", pragmas.excludeIdeData);
  652. $globals.ClassDefinitionChanged.comment="I am emitted when the definition of a class changes.\x0aSee ClassBuilder >> #class:instanceVariableNames:";
  653. //>>excludeEnd("ide");
  654. $core.addClass('ClassMigrated', $globals.ClassAnnouncement, ['oldClass'], 'Kernel-Announcements');
  655. //>>excludeStart("ide", pragmas.excludeIdeData);
  656. $globals.ClassMigrated.comment="I am emitted when a class is migrated.";
  657. //>>excludeEnd("ide");
  658. $core.addMethod(
  659. $core.method({
  660. selector: "oldClass",
  661. protocol: 'accessing',
  662. fn: function (){
  663. var self=this;
  664. return self["@oldClass"];
  665. },
  666. //>>excludeStart("ide", pragmas.excludeIdeData);
  667. args: [],
  668. source: "oldClass\x0a\x09^ oldClass",
  669. referencedClasses: [],
  670. //>>excludeEnd("ide");
  671. messageSends: []
  672. }),
  673. $globals.ClassMigrated);
  674. $core.addMethod(
  675. $core.method({
  676. selector: "oldClass:",
  677. protocol: 'accessing',
  678. fn: function (aClass){
  679. var self=this;
  680. self["@oldClass"]=aClass;
  681. return self;
  682. },
  683. //>>excludeStart("ide", pragmas.excludeIdeData);
  684. args: ["aClass"],
  685. source: "oldClass: aClass\x0a\x09oldClass := aClass",
  686. referencedClasses: [],
  687. //>>excludeEnd("ide");
  688. messageSends: []
  689. }),
  690. $globals.ClassMigrated);
  691. $core.addClass('ClassMoved', $globals.ClassAnnouncement, ['oldPackage'], 'Kernel-Announcements');
  692. //>>excludeStart("ide", pragmas.excludeIdeData);
  693. $globals.ClassMoved.comment="I am emitted when a class is moved from one package to another.";
  694. //>>excludeEnd("ide");
  695. $core.addMethod(
  696. $core.method({
  697. selector: "oldPackage",
  698. protocol: 'accessing',
  699. fn: function (){
  700. var self=this;
  701. return self["@oldPackage"];
  702. },
  703. //>>excludeStart("ide", pragmas.excludeIdeData);
  704. args: [],
  705. source: "oldPackage\x0a\x09^ oldPackage",
  706. referencedClasses: [],
  707. //>>excludeEnd("ide");
  708. messageSends: []
  709. }),
  710. $globals.ClassMoved);
  711. $core.addMethod(
  712. $core.method({
  713. selector: "oldPackage:",
  714. protocol: 'accessing',
  715. fn: function (aPackage){
  716. var self=this;
  717. self["@oldPackage"]=aPackage;
  718. return self;
  719. },
  720. //>>excludeStart("ide", pragmas.excludeIdeData);
  721. args: ["aPackage"],
  722. source: "oldPackage: aPackage\x0a\x09oldPackage := aPackage",
  723. referencedClasses: [],
  724. //>>excludeEnd("ide");
  725. messageSends: []
  726. }),
  727. $globals.ClassMoved);
  728. $core.addClass('ClassRemoved', $globals.ClassAnnouncement, [], 'Kernel-Announcements');
  729. //>>excludeStart("ide", pragmas.excludeIdeData);
  730. $globals.ClassRemoved.comment="I am emitted when a class is removed.\x0aSee Smalltalk >> #removeClass:";
  731. //>>excludeEnd("ide");
  732. $core.addClass('ClassRenamed', $globals.ClassAnnouncement, [], 'Kernel-Announcements');
  733. //>>excludeStart("ide", pragmas.excludeIdeData);
  734. $globals.ClassRenamed.comment="I am emitted when a class is renamed.\x0aSee ClassBuilder >> #renameClass:to:";
  735. //>>excludeEnd("ide");
  736. $core.addClass('MethodAnnouncement', $globals.SystemAnnouncement, ['method'], 'Kernel-Announcements');
  737. //>>excludeStart("ide", pragmas.excludeIdeData);
  738. $globals.MethodAnnouncement.comment="I am the abstract superclass of method-related announcements.";
  739. //>>excludeEnd("ide");
  740. $core.addMethod(
  741. $core.method({
  742. selector: "method",
  743. protocol: 'accessing',
  744. fn: function (){
  745. var self=this;
  746. return self["@method"];
  747. },
  748. //>>excludeStart("ide", pragmas.excludeIdeData);
  749. args: [],
  750. source: "method\x0a\x09^ method",
  751. referencedClasses: [],
  752. //>>excludeEnd("ide");
  753. messageSends: []
  754. }),
  755. $globals.MethodAnnouncement);
  756. $core.addMethod(
  757. $core.method({
  758. selector: "method:",
  759. protocol: 'accessing',
  760. fn: function (aCompiledMethod){
  761. var self=this;
  762. self["@method"]=aCompiledMethod;
  763. return self;
  764. },
  765. //>>excludeStart("ide", pragmas.excludeIdeData);
  766. args: ["aCompiledMethod"],
  767. source: "method: aCompiledMethod\x0a\x09method := aCompiledMethod",
  768. referencedClasses: [],
  769. //>>excludeEnd("ide");
  770. messageSends: []
  771. }),
  772. $globals.MethodAnnouncement);
  773. $core.addClass('MethodAdded', $globals.MethodAnnouncement, [], 'Kernel-Announcements');
  774. //>>excludeStart("ide", pragmas.excludeIdeData);
  775. $globals.MethodAdded.comment="I am emitted when a `CompiledMethod` is added to a class.";
  776. //>>excludeEnd("ide");
  777. $core.addClass('MethodModified', $globals.MethodAnnouncement, ['oldMethod'], 'Kernel-Announcements');
  778. //>>excludeStart("ide", pragmas.excludeIdeData);
  779. $globals.MethodModified.comment="I am emitted when a `CompiledMethod` is modified (a new method is installed). I hold a reference to the old method being replaced.";
  780. //>>excludeEnd("ide");
  781. $core.addMethod(
  782. $core.method({
  783. selector: "oldMethod",
  784. protocol: 'accessing',
  785. fn: function (){
  786. var self=this;
  787. return self["@oldMethod"];
  788. },
  789. //>>excludeStart("ide", pragmas.excludeIdeData);
  790. args: [],
  791. source: "oldMethod\x0a\x09^ oldMethod",
  792. referencedClasses: [],
  793. //>>excludeEnd("ide");
  794. messageSends: []
  795. }),
  796. $globals.MethodModified);
  797. $core.addMethod(
  798. $core.method({
  799. selector: "oldMethod:",
  800. protocol: 'accessing',
  801. fn: function (aMethod){
  802. var self=this;
  803. self["@oldMethod"]=aMethod;
  804. return self;
  805. },
  806. //>>excludeStart("ide", pragmas.excludeIdeData);
  807. args: ["aMethod"],
  808. source: "oldMethod: aMethod\x0a\x09oldMethod := aMethod",
  809. referencedClasses: [],
  810. //>>excludeEnd("ide");
  811. messageSends: []
  812. }),
  813. $globals.MethodModified);
  814. $core.addClass('MethodMoved', $globals.MethodAnnouncement, ['oldProtocol'], 'Kernel-Announcements');
  815. //>>excludeStart("ide", pragmas.excludeIdeData);
  816. $globals.MethodMoved.comment="I am emitted when a `CompiledMethod` is moved to another protocol. I hold a refernce to the old protocol of the method.";
  817. //>>excludeEnd("ide");
  818. $core.addMethod(
  819. $core.method({
  820. selector: "oldProtocol",
  821. protocol: 'accessing',
  822. fn: function (){
  823. var self=this;
  824. return self["@oldProtocol"];
  825. },
  826. //>>excludeStart("ide", pragmas.excludeIdeData);
  827. args: [],
  828. source: "oldProtocol\x0a\x09^ oldProtocol",
  829. referencedClasses: [],
  830. //>>excludeEnd("ide");
  831. messageSends: []
  832. }),
  833. $globals.MethodMoved);
  834. $core.addMethod(
  835. $core.method({
  836. selector: "oldProtocol:",
  837. protocol: 'accessing',
  838. fn: function (aString){
  839. var self=this;
  840. self["@oldProtocol"]=aString;
  841. return self;
  842. },
  843. //>>excludeStart("ide", pragmas.excludeIdeData);
  844. args: ["aString"],
  845. source: "oldProtocol: aString\x0a\x09oldProtocol := aString",
  846. referencedClasses: [],
  847. //>>excludeEnd("ide");
  848. messageSends: []
  849. }),
  850. $globals.MethodMoved);
  851. $core.addClass('MethodRemoved', $globals.MethodAnnouncement, [], 'Kernel-Announcements');
  852. //>>excludeStart("ide", pragmas.excludeIdeData);
  853. $globals.MethodRemoved.comment="I am emitted when a `CompiledMethod` is removed from a class.";
  854. //>>excludeEnd("ide");
  855. $core.addClass('PackageAnnouncement', $globals.SystemAnnouncement, ['package'], 'Kernel-Announcements');
  856. //>>excludeStart("ide", pragmas.excludeIdeData);
  857. $globals.PackageAnnouncement.comment="I am the abstract superclass of package-related announcements.";
  858. //>>excludeEnd("ide");
  859. $core.addMethod(
  860. $core.method({
  861. selector: "package",
  862. protocol: 'accessing',
  863. fn: function (){
  864. var self=this;
  865. return self["@package"];
  866. },
  867. //>>excludeStart("ide", pragmas.excludeIdeData);
  868. args: [],
  869. source: "package\x0a\x09^ package",
  870. referencedClasses: [],
  871. //>>excludeEnd("ide");
  872. messageSends: []
  873. }),
  874. $globals.PackageAnnouncement);
  875. $core.addMethod(
  876. $core.method({
  877. selector: "package:",
  878. protocol: 'accessing',
  879. fn: function (aPackage){
  880. var self=this;
  881. self["@package"]=aPackage;
  882. return self;
  883. },
  884. //>>excludeStart("ide", pragmas.excludeIdeData);
  885. args: ["aPackage"],
  886. source: "package: aPackage\x0a\x09package := aPackage",
  887. referencedClasses: [],
  888. //>>excludeEnd("ide");
  889. messageSends: []
  890. }),
  891. $globals.PackageAnnouncement);
  892. $core.addClass('PackageAdded', $globals.PackageAnnouncement, [], 'Kernel-Announcements');
  893. //>>excludeStart("ide", pragmas.excludeIdeData);
  894. $globals.PackageAdded.comment="I am emitted when a `Package` is added to the system.";
  895. //>>excludeEnd("ide");
  896. $core.addClass('PackageClean', $globals.PackageAnnouncement, [], 'Kernel-Announcements');
  897. //>>excludeStart("ide", pragmas.excludeIdeData);
  898. $globals.PackageClean.comment="I am emitted when a package is committed and becomes clean.";
  899. //>>excludeEnd("ide");
  900. $core.addClass('PackageDirty', $globals.PackageAnnouncement, [], 'Kernel-Announcements');
  901. //>>excludeStart("ide", pragmas.excludeIdeData);
  902. $globals.PackageDirty.comment="I am emitted when a package becomes dirty.";
  903. //>>excludeEnd("ide");
  904. $core.addClass('PackageRemoved', $globals.PackageAnnouncement, [], 'Kernel-Announcements');
  905. //>>excludeStart("ide", pragmas.excludeIdeData);
  906. $globals.PackageRemoved.comment="I am emitted when a `Package` is removed from the system.";
  907. //>>excludeEnd("ide");
  908. $core.addClass('ProtocolAnnouncement', $globals.SystemAnnouncement, ['theClass', 'protocol'], 'Kernel-Announcements');
  909. //>>excludeStart("ide", pragmas.excludeIdeData);
  910. $globals.ProtocolAnnouncement.comment="I am the abstract superclass of protocol-related announcements.";
  911. //>>excludeEnd("ide");
  912. $core.addMethod(
  913. $core.method({
  914. selector: "package",
  915. protocol: 'accessing',
  916. fn: function (){
  917. var self=this;
  918. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  919. return $core.withContext(function($ctx1) {
  920. //>>excludeEnd("ctx");
  921. var $1,$receiver;
  922. $1=self._theClass();
  923. if(($receiver = $1) == null || $receiver.isNil){
  924. return $1;
  925. } else {
  926. var class_;
  927. class_=$receiver;
  928. return $recv(class_)._packageOfProtocol_(self._protocol());
  929. };
  930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  931. }, function($ctx1) {$ctx1.fill(self,"package",{},$globals.ProtocolAnnouncement)});
  932. //>>excludeEnd("ctx");
  933. },
  934. //>>excludeStart("ide", pragmas.excludeIdeData);
  935. args: [],
  936. source: "package\x0a\x09\x0a\x09^ self theClass ifNotNil: [ :class | class packageOfProtocol: self protocol ]",
  937. referencedClasses: [],
  938. //>>excludeEnd("ide");
  939. messageSends: ["ifNotNil:", "theClass", "packageOfProtocol:", "protocol"]
  940. }),
  941. $globals.ProtocolAnnouncement);
  942. $core.addMethod(
  943. $core.method({
  944. selector: "protocol",
  945. protocol: 'accessing',
  946. fn: function (){
  947. var self=this;
  948. return self["@protocol"];
  949. },
  950. //>>excludeStart("ide", pragmas.excludeIdeData);
  951. args: [],
  952. source: "protocol\x0a\x09^ protocol",
  953. referencedClasses: [],
  954. //>>excludeEnd("ide");
  955. messageSends: []
  956. }),
  957. $globals.ProtocolAnnouncement);
  958. $core.addMethod(
  959. $core.method({
  960. selector: "protocol:",
  961. protocol: 'accessing',
  962. fn: function (aString){
  963. var self=this;
  964. self["@protocol"]=aString;
  965. return self;
  966. },
  967. //>>excludeStart("ide", pragmas.excludeIdeData);
  968. args: ["aString"],
  969. source: "protocol: aString\x0a\x09protocol := aString",
  970. referencedClasses: [],
  971. //>>excludeEnd("ide");
  972. messageSends: []
  973. }),
  974. $globals.ProtocolAnnouncement);
  975. $core.addMethod(
  976. $core.method({
  977. selector: "theClass",
  978. protocol: 'accessing',
  979. fn: function (){
  980. var self=this;
  981. return self["@theClass"];
  982. },
  983. //>>excludeStart("ide", pragmas.excludeIdeData);
  984. args: [],
  985. source: "theClass\x0a\x09^ theClass",
  986. referencedClasses: [],
  987. //>>excludeEnd("ide");
  988. messageSends: []
  989. }),
  990. $globals.ProtocolAnnouncement);
  991. $core.addMethod(
  992. $core.method({
  993. selector: "theClass:",
  994. protocol: 'accessing',
  995. fn: function (aClass){
  996. var self=this;
  997. self["@theClass"]=aClass;
  998. return self;
  999. },
  1000. //>>excludeStart("ide", pragmas.excludeIdeData);
  1001. args: ["aClass"],
  1002. source: "theClass: aClass\x0a\x09theClass := aClass",
  1003. referencedClasses: [],
  1004. //>>excludeEnd("ide");
  1005. messageSends: []
  1006. }),
  1007. $globals.ProtocolAnnouncement);
  1008. $core.addClass('ProtocolAdded', $globals.ProtocolAnnouncement, [], 'Kernel-Announcements');
  1009. //>>excludeStart("ide", pragmas.excludeIdeData);
  1010. $globals.ProtocolAdded.comment="I am emitted when a protocol is added to a class.";
  1011. //>>excludeEnd("ide");
  1012. $core.addClass('ProtocolRemoved', $globals.ProtocolAnnouncement, [], 'Kernel-Announcements');
  1013. //>>excludeStart("ide", pragmas.excludeIdeData);
  1014. $globals.ProtocolRemoved.comment="I am emitted when a protocol is removed from a class.";
  1015. //>>excludeEnd("ide");
  1016. });