1
0

Kernel-Announcements.js 36 KB

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