Kernel-Announcements.js 35 KB

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