[squeak-dev] The Trunk: Tools-topa.721.mcz

Tobias Pape Das.Linux at gmx.de
Wed Nov 30 10:16:36 UTC 2016


On 30.11.2016, at 09:40, Levente Uzonyi <leves at caesar.elte.hu> wrote:

> On Wed, 30 Nov 2016, Tobias Pape wrote:
> 
>> 
>> On 30.11.2016, at 00:34, Chris Muller <asqueaker at gmail.com> wrote:
>> 
>>> Hey Tobias, it looks like you added a <generated> tag too.
>>> Traditionally, the purpose of such a tag is used by code-generating
>>> applications to let programmers know that a particular piece of code
>>> is the purview of the framework which generated it, so they would know
>>> not to change it since it could very likely be regenerated in the
>>> future, blowing away any custom changes they might make there.
>>> But none of that is the case here.  This is not to improve cooperation
>>> with a mysterious framework, but invoked directly by the developer out
>>> for a one-time convenience, just like when they use the clipboard.
>>> Such a tag could actually confuse or deter future developers from
>>> adding; e.g., lazy-initialization into the method, because its not
>>> part of a code-generating application.
>>> IMO, we should not put a <generated> tag in one-time-generated getters
>>> and setters.
>> 
>> 
>> ¯\_(ツ)_/¯
>> 
>> what about <autoaccessor>?
>> I'd rather to have a way to identify non-human made code, whether transient
>> or permanent.
> 
> Why is that for this case?
> 
> (I would rather not use pragmas in these methods, because I don't see if they would ever be used. If I were really want to mark these methods, I'd use a different author or a category other than accessing.)

yeah, but its IMHO more appropriate to have "proper" metadata. 
I actually intended to make a new icon marker for those methods :)


> 
> Levente
> 
>> 
>> 	-t
>> 
>> 
>> 
>>> On Tue, Nov 29, 2016 at 8:31 AM,  <commits at source.squeak.org> wrote:
>>>> Tobias Pape uploaded a new version of Tools to project The Trunk:
>>>> http://source.squeak.org/trunk/Tools-topa.721.mcz
>>>> ==================== Summary ====================
>>>> Name: Tools-topa.721
>>>> Author: topa
>>>> Time: 29 November 2016, 3:27:14.942944 pm
>>>> UUID: 2d64a7b9-8dcb-46fd-9371-c9dcb3f9cfd1
>>>> Ancestors: Tools-mt.720
>>>> Accessor generation.
>>>> Makes for a nice class hook and pushes responsibility to the class.
>>>> =============== Diff against Tools-mt.720 ===============
>>>> Item was added:
>>>> + ----- Method: Behavior>>createGetterFor: (in category '*Tools-Browser-accessors') -----
>>>> + createGetterFor: aName
>>>> +
>>>> +       | code |
>>>> +       code := '{1}\   <generated>\\   ^ {1}\' withCRs format: {aName.}.
>>>> +       self compile: code classified: #accessing notifying: nil.!
>>>> Item was added:
>>>> + ----- Method: Behavior>>createInstVarAccessors (in category '*Tools-Browser-accessors') -----
>>>> + createInstVarAccessors
>>>> +       "Create getters and setters for all inst vars defined here,
>>>> +        except do NOT clobber or override any selectors already understood by me"
>>>> +
>>>> +       self instVarNames
>>>> +               collect: [:each | each asSymbol]
>>>> +               thenDo: [:instVar |
>>>> +                       (self canUnderstand: instVar) ifFalse: [self createGetterFor: instVar].
>>>> +                       (self canUnderstand: instVar asMutator) ifFalse: [self createSetterFor: instVar]].
>>>> +
>>>> + !
>>>> Item was added:
>>>> + ----- Method: Behavior>>createSetterFor: (in category '*Tools-Browser-accessors') -----
>>>> + createSetterFor: aName
>>>> +
>>>> +       | code |
>>>> +       code := '{1}: anObject\ <generated>\\   {2}{1} := anObject.\' withCRs
>>>> +               format: {aName. self settersReturnValue ifTrue: ['^ '] ifFalse: [''].}.
>>>> +       self compile: code classified: #accessing notifying: nil.!
>>>> Item was changed:
>>>> ----- Method: Browser>>createInstVarAccessors (in category 'class functions') -----
>>>> createInstVarAccessors
>>>> -       "Create getters and setters for all inst vars defined at the level of the current class selection,
>>>> -        except do NOT clobber or override any selectors already understood by the instances of the selected class"
>>>> +       self selectedClassOrMetaClass
>>>> +               ifNotNil: [:aClass | aClass createInstVarAccessors].
>>>> + !
>>>> -       self selectedClassOrMetaClass ifNotNil:
>>>> -               [:aClass| | cr |
>>>> -               cr := String with: Character cr.
>>>> -               aClass instVarNames do:
>>>> -                       [:aName | | newMessage setter |
>>>> -                       (aClass canUnderstand: aName asSymbol) ifFalse:
>>>> -                               [newMessage :=
>>>> -                                       aName, cr, cr,
>>>> -                                       '       ^ ', aName.
>>>> -                               aClass compile: newMessage classified: #accessing notifying: nil].
>>>> -                       (aClass canUnderstand: (setter := aName, ':') asSymbol) ifFalse:
>>>> -                               [newMessage :=
>>>> -                                       setter, ' anObject', cr, cr,
>>>> -                                               (aClass settersReturnValue ifTrue: ['   ^'] ifFalse: [' ']),
>>>> -                                               aName, ' := anObject'.
>>>> -                               aClass compile: newMessage classified: #accessing notifying: nil]]]!



More information about the Squeak-dev mailing list