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

Levente Uzonyi leves at caesar.elte.hu
Wed Nov 30 08:40:00 UTC 2016


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.)

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