[squeak-dev] The Trunk: System-jr.927.mcz

Jakob Reschke jakob.reschke at student.hpi.de
Sun Jul 16 20:06:52 UTC 2017


The indenting was previously discarded in
MessageSet>>#initializeMessageList:, when the strings were parsed into
class and selector. If the input list elements are MethodReferences
already, they remain unchanged. Since all elements coming from
SystemNavigation>>#methodHierarchyBrowserForClass:selector: are now
MethodReferences, the indentation from this method appears.

2017-07-16 20:59 GMT+02:00 Chris Muller <asqueaker at gmail.com>:
> This appears to have caused, when using the the "inheritance (i)"
> function, the list of methods to have indentations which weren't there
> before and interferes with the ability to begin tracing.
>
> It appears nothing was changed with the "stringVersion" of the
> MethodReference so it's not quickly evident why it's indenting...
>
> On Sun, Mar 5, 2017 at 9:57 AM,  <commits at source.squeak.org> wrote:
>> David T. Lewis uploaded a new version of System to project The Trunk:
>> http://source.squeak.org/trunk/System-jr.927.mcz
>>
>> ==================== Summary ====================
>>
>> Name: System-jr.927
>> Author: jr
>> Time: 28 February 2017, 1:18:53.473081 am
>> UUID: 7c830682-637d-e94b-b695-9f1d7499e19b
>> Ancestors: System-ul.926
>>
>> improve environment awareness of references
>>
>> also support Text as stringVersion of MethodReference
>> (so Lexicon could use method references)
>>
>> =============== Diff against System-ul.926 ===============
>>
>> Item was changed:
>>   Object subclass: #ClassReference
>> +       instanceVariableNames: 'classSymbol stringVersion classIsMeta environment'
>> -       instanceVariableNames: 'classSymbol stringVersion classIsMeta'
>>         classVariableNames: ''
>>         poolDictionaries: ''
>>         category: 'System-Tools'!
>>
>>   !ClassReference commentStamp: '<historical>' prior: 0!
>>   A ClassReference is is a lightweight proxy for a Class's definition.  Allows class definitions to be viewed in MessageLists
>>
>>   Instance Variables
>>         classSymbol:            Symbol for method's class (without class keyword if meta)
>>         stringVersion:          the class's definition
>>
>>   !
>>
>> Item was changed:
>>   ----- Method: ClassReference>>= (in category 'comparisons') -----
>>   = anotherMethodReference
>>         "Answer whether the receiver and the argument represent the
>>          same object."
>>         ^ self species == anotherMethodReference species
>>            and: [self classSymbol = anotherMethodReference classSymbol
>> +          and: [self classIsMeta = anotherMethodReference classIsMeta
>> +          and: [self environment == anotherMethodReference environment]]]!
>> -          and: [self classIsMeta = anotherMethodReference classIsMeta]]!
>>
>> Item was changed:
>>   ----- Method: ClassReference>>actualClass (in category 'accessing') -----
>>   actualClass
>>         | actualClass |
>> +       environment ifNil: [^ nil].
>> +       actualClass := environment at: classSymbol ifAbsent: [^nil].
>> +       ^classIsMeta ifTrue: [actualClass theMetaClass] ifFalse: [actualClass]!
>> -       actualClass := Smalltalk at: classSymbol ifAbsent: [^nil].
>> -       ^classIsMeta ifTrue: [actualClass class] ifFalse: [actualClass]!
>>
>> Item was added:
>> + ----- Method: ClassReference>>environment (in category 'accessing') -----
>> + environment
>> +
>> +       ^ environment!
>>
>> Item was added:
>> + ----- Method: ClassReference>>hash (in category 'comparisons') -----
>> + hash
>> +       "Answer a SmallInteger whose value is related to the receiver's
>> +       identity."
>> +       ^ (self species hash bitXor: self classSymbol hash)
>> +               bitXor: self environment hash!
>>
>> Item was added:
>> + ----- Method: ClassReference>>printOn: (in category 'printing') -----
>> + printOn: aStream
>> +       | actualClass |
>> +       "Print the receiver on a stream"
>> +       actualClass := classSymbol asString.
>> +       classIsMeta ifTrue: [actualClass := actualClass, ' class'].
>> +       super printOn: aStream.
>> +       aStream nextPutAll: ' ', actualClass!
>>
>> Item was added:
>> + ----- Method: ClassReference>>setClassSymbol:classIsMeta:environment:stringVersion: (in category 'initialize-release') -----
>> + setClassSymbol: classSym classIsMeta: isMeta environment: anEnvironment stringVersion: aString
>> +
>> +       classSymbol := classSym.
>> +       classIsMeta := isMeta.
>> +       stringVersion := aString, ' (definition)'.
>> +       environment := anEnvironment!
>>
>> Item was changed:
>>   ----- Method: ClassReference>>setStandardClass: (in category 'initialize-release') -----
>>   setStandardClass: aClass
>>
>>         self
>>                 setClassSymbol:  aClass theNonMetaClass name
>>                 classIsMeta: aClass isMeta
>> +               environment: aClass environment
>>                 stringVersion: aClass name!
>>
>> Item was changed:
>>   ----- Method: MethodReference class>>class:selector: (in category 'instance creation') -----
>>   class: aClass selector: aSelector
>> +       ^ self class: aClass selector: aSelector environment: aClass environment.!
>> -       ^ self class: aClass selector: aSelector environment: Smalltalk globals.!
>>
>> Item was changed:
>>   ----- Method: MethodReference>>= (in category 'comparing') -----
>>   = anotherMethodReference
>>         "Answer whether the receiver and the argument represent the
>>         same object."
>>         ^ self species == anotherMethodReference species
>>                 and: [self classSymbol = anotherMethodReference classSymbol
>>                 and: [self classIsMeta = anotherMethodReference classIsMeta
>> +               and: [self methodSymbol = anotherMethodReference methodSymbol
>> +               and: [self environment == anotherMethodReference environment]]]]!
>> -               and: [self methodSymbol = anotherMethodReference methodSymbol]]]!
>>
>> Item was changed:
>>   ----- Method: MethodReference>>asString (in category 'converting') -----
>>   asString
>>
>> +       ^(stringVersion ifNil: [ self stringVersionDefault ]) asString!
>> -       ^stringVersion ifNil: [ self stringVersionDefault ]!
>>
>> Item was added:
>> + ----- Method: MethodReference>>asStringOrText (in category 'converting') -----
>> + asStringOrText
>> +
>> +       ^stringVersion ifNil: [ self stringVersionDefault ]!
>>
>> Item was changed:
>>   ----- Method: MethodReference>>setClass:methodSymbol:stringVersion: (in category 'initialize-release') -----
>>   setClass: aClass methodSymbol: methodSym stringVersion: aString
>>
>>         classSymbol := aClass theNonMetaClass name.
>>         classIsMeta := aClass isMeta.
>>         methodSymbol := methodSym.
>> +       environment := aClass environment.
>>         stringVersion := aString.!
>>
>> Item was changed:
>>   ----- Method: MethodReference>>setStandardClass:methodSymbol: (in category 'initialize-release') -----
>>   setStandardClass: aClass methodSymbol: methodSym
>>
>>         classSymbol := aClass theNonMetaClass name.
>> +       environment := aClass environment.
>>         classIsMeta := aClass isMeta.
>>         methodSymbol := methodSym.
>>         stringVersion := nil.!
>>
>> Item was changed:
>>   ----- Method: MethodReference>>stringVersion (in category 'accessing') -----
>>   stringVersion
>>
>> +       ^stringVersion ifNil: [self asStringOrText]!
>> -       ^stringVersion!
>>
>> Item was changed:
>>   ----- Method: SystemNavigation>>methodHierarchyBrowserForClass:selector: (in category 'browse') -----
>>   methodHierarchyBrowserForClass: aClass selector: selectorSymbol
>>         "Create and schedule a message set browser on all implementors of the
>>         currently selected message selector. Do nothing if no message is selected."
>>         "SystemNavigation default
>>                 methodHierarchyBrowserForClass: ParagraphEditor
>>                 selector: #isControlActive"
>>         | list aClassNonMeta isMeta tab compiledMethod window |
>>         aClass ifNil: [^ self].
>>         aClass isTrait ifTrue: [^ self].
>>         selectorSymbol ifNil: [^ self].
>>         aClassNonMeta := aClass theNonMetaClass.
>>         isMeta := aClassNonMeta ~~ aClass.
>>         list := OrderedCollection new.
>>         tab := ''.
>>         aClass allSuperclasses reverseDo:
>>                 [:cl |
>>                 (cl includesSelector: selectorSymbol) ifTrue:
>> +                       [list addLast: (MethodReference new
>> +                               setClass: cl
>> +                               methodSymbol: selectorSymbol
>> +                               stringVersion: tab , cl name, ' ', selectorSymbol)].
>> -                       [list addLast: tab , cl name, ' ', selectorSymbol].
>>                 tab := tab , '  '].
>>         aClassNonMeta allSubclassesWithLevelDo:
>>                 [:cl :level | | theClassOrMeta stab |
>>                 theClassOrMeta := isMeta ifTrue: [cl class] ifFalse: [cl].
>>                 (theClassOrMeta includesSelector: selectorSymbol) ifTrue:
>>                         [stab := ''.  1 to: level do: [:i | stab := stab , '  '].
>> +                       list addLast: (MethodReference new
>> +                               setClass: theClassOrMeta
>> +                               methodSymbol: selectorSymbol
>> +                               stringVersion: tab , stab , theClassOrMeta name, ' ', selectorSymbol)]]
>> -                       list addLast: tab , stab , theClassOrMeta name, ' ', selectorSymbol]]
>>                 startingLevel: 0.
>>         window := self browseMessageList: list name: 'Inheritance of ' , selectorSymbol.
>>         window isSystemWindow ifTrue:
>>                 [ window model
>>                         deselectAll ;
>>                         yourself.
>>                 compiledMethod := aClass compiledMethodAt: selectorSymbol ifAbsent:[nil].
>>                 compiledMethod ifNotNil: [ window model selectReference: compiledMethod methodReference ] ]!
>>
>> Item was changed:
>>   ----- Method: SystemOrganizer>>classify:under: (in category 'accessing') -----
>>   classify: element under: newCategory
>>         | oldCategory class |
>> +       self flag: #environments. "do we want notifications for classes in other environments?"
>>         oldCategory := self categoryOfElement: element.
>>         super classify: element under: newCategory.
>>         class := Smalltalk at: element ifAbsent: [^ self].
>>         self == SystemOrganization ifTrue: [
>>                 SystemChangeNotifier uniqueInstance
>>                         class: class
>>                         recategorizedFrom: oldCategory
>>                         to: newCategory]!
>>
>>
>


More information about the Squeak-dev mailing list