Kernel-Announcements.js 37 KB

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