Browse Source

Trait class >> named:uses:package:

Herbert Vojčík 7 years ago
parent
commit
1393a78082
3 changed files with 59 additions and 2 deletions
  1. 3 0
      API-CHANGES.txt
  2. 48 2
      src/Kernel-Classes.js
  3. 8 0
      src/Kernel-Classes.st

+ 3 - 0
API-CHANGES.txt

@@ -22,6 +22,9 @@
   + theNonMetaClass
   + exportBehaviorDefinitionTo:using:
   + traitUsers
++ Trait class >>
+  + named:package:
+  + named:uses:package:
 + TraitTransformation
   + -
   + @

+ 48 - 2
src/Kernel-Classes.js

@@ -2715,6 +2715,7 @@ var self=this;
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx1) {
 //>>excludeEnd("ctx");
+var $1;
 return $recv($globals.String)._streamContents_((function(stream){
 //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 return $core.withContext(function($ctx2) {
@@ -2725,6 +2726,25 @@ $ctx2.sendIdx["write:"]=1;
 //>>excludeEnd("ctx");
 $recv(stream)._printSymbol_(self._name());
 $recv(stream)._lf();
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx2.sendIdx["lf"]=1;
+//>>excludeEnd("ctx");
+$recv(stream)._write_($recv(self._usesDefinition())._ifNotEmpty_((function(uses){
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx3) {
+//>>excludeEnd("ctx");
+$1=$recv($globals.String)._tab();
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx3.sendIdx["tab"]=1;
+//>>excludeEnd("ctx");
+return [$1,uses,$recv($globals.String)._lf()];
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx3) {$ctx3.fillBlock({uses:uses},$ctx2,2)});
+//>>excludeEnd("ctx");
+})));
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx2.sendIdx["write:"]=2;
+//>>excludeEnd("ctx");
 $recv(stream)._tab();
 $recv(stream)._write_("package: ");
 return $recv(stream)._print_(self._category());
@@ -2738,10 +2758,10 @@ return $recv(stream)._print_(self._category());
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: [],
-source: "definition\x0a\x09^ String streamContents: [ :stream | stream\x0a\x09\x09write: 'Trait named: '; printSymbol: self name; lf;\x0a\x09\x09tab; write: 'package: '; print: self category ]",
+source: "definition\x0a\x09^ String streamContents: [ :stream | stream\x0a\x09\x09write: 'Trait named: '; printSymbol: self name; lf;\x0a\x09\x09write: (self usesDefinition ifNotEmpty: [ :uses | { String tab. uses. String lf }]);\x0a\x09\x09tab; write: 'package: '; print: self category ]",
 referencedClasses: ["String"],
 //>>excludeEnd("ide");
-messageSends: ["streamContents:", "write:", "printSymbol:", "name", "lf", "tab", "print:", "category"]
+messageSends: ["streamContents:", "write:", "printSymbol:", "name", "lf", "ifNotEmpty:", "usesDefinition", "tab", "print:", "category"]
 }),
 $globals.Trait);
 
@@ -2870,6 +2890,32 @@ messageSends: []
 }),
 $globals.Trait.klass);
 
+$core.addMethod(
+$core.method({
+selector: "named:uses:package:",
+protocol: "instance creation",
+fn: function (aString,aTraitCompositionDescription,anotherString){
+var self=this;
+var trait;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+trait=self._named_package_(aString,anotherString);
+$recv(trait)._setTraitComposition_($recv(aTraitCompositionDescription)._asTraitComposition());
+return trait;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"named:uses:package:",{aString:aString,aTraitCompositionDescription:aTraitCompositionDescription,anotherString:anotherString,trait:trait},$globals.Trait.klass)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: ["aString", "aTraitCompositionDescription", "anotherString"],
+source: "named: aString uses: aTraitCompositionDescription package: anotherString\x0a\x09| trait |\x0a\x09trait := self named: aString package: anotherString.\x0a\x09trait setTraitComposition: aTraitCompositionDescription asTraitComposition.\x0a\x09^ trait",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: ["named:package:", "setTraitComposition:", "asTraitComposition"]
+}),
+$globals.Trait.klass);
+
 
 $core.addClass("ClassBuilder", $globals.Object, [], "Kernel-Classes");
 //>>excludeStart("ide", pragmas.excludeIdeData);

+ 8 - 0
src/Kernel-Classes.st

@@ -607,6 +607,7 @@ classTag
 definition
 	^ String streamContents: [ :stream | stream
 		write: 'Trait named: '; printSymbol: self name; lf;
+		write: (self usesDefinition ifNotEmpty: [ :uses | { String tab. uses. String lf }]);
 		tab; write: 'package: '; print: self category ]
 !
 
@@ -660,6 +661,13 @@ asTraitTransformation
 
 named: aString package: anotherString
 	<inlineJS: 'return $core.addTrait(aString, anotherString)'>
+!
+
+named: aString uses: aTraitCompositionDescription package: anotherString
+	| trait |
+	trait := self named: aString package: anotherString.
+	trait setTraitComposition: aTraitCompositionDescription asTraitComposition.
+	^ trait
 ! !
 
 Object subclass: #ClassBuilder