Tools__ClassSorter.st
changeset 9995 febbd7fc31a0
child 12123 4bde08cebd48
child 17602 36908309a12c
equal deleted inserted replaced
9994:a72e069aabfb 9995:febbd7fc31a0
       
     1 "
       
     2  COPYRIGHT (c) 2006 by eXept Software AG
       
     3 	      All Rights Reserved
       
     4 
       
     5  This software is furnished under a license and may be used
       
     6  only in accordance with the terms of that license and with the
       
     7  inclusion of the above copyright notice.   This software may not
       
     8  be provided or otherwise made available to, or used by, any
       
     9  other person.  No title to or ownership of the software is
       
    10  hereby transferred.
       
    11 "
       
    12 "{ Package: 'stx:libtool' }"
       
    13 
       
    14 "{ NameSpace: Tools }"
       
    15 
       
    16 Object subclass:#ClassSorter
       
    17 	instanceVariableNames:'indents order'
       
    18 	classVariableNames:''
       
    19 	poolDictionaries:''
       
    20 	category:'Interface-Browsers-New'
       
    21 !
       
    22 
       
    23 !ClassSorter class methodsFor:'documentation'!
       
    24 
       
    25 copyright
       
    26 "
       
    27  COPYRIGHT (c) 2006 by eXept Software AG
       
    28 	      All Rights Reserved
       
    29 
       
    30  This software is furnished under a license and may be used
       
    31  only in accordance with the terms of that license and with the
       
    32  inclusion of the above copyright notice.   This software may not
       
    33  be provided or otherwise made available to, or used by, any
       
    34  other person.  No title to or ownership of the software is
       
    35  hereby transferred.
       
    36 "
       
    37 ! !
       
    38 
       
    39 !ClassSorter class methodsFor:'sorting'!
       
    40 
       
    41 sort: classes
       
    42 
       
    43     ^self new sort: classes
       
    44 
       
    45     "Created: / 21-01-2008 / 19:40:19 / janfrog"
       
    46 ! !
       
    47 
       
    48 !ClassSorter methodsFor:'filtering'!
       
    49 
       
    50 sort: classes
       
    51         "Sort nodes according to their position in the class hierarchy"
       
    52 
       
    53         | supersChain |
       
    54         self initializeResults.
       
    55         classes do: 
       
    56                 [:class | 
       
    57                 supersChain := class  withAllSuperclasses reversed.
       
    58                 supersChain removeAllSuchThat: [:cl | (classes includes: cl) not].
       
    59                 order add: supersChain "contents" -> class].
       
    60         self buildIndentIndex.
       
    61         ^self collectSortedClasses
       
    62 
       
    63     "Modified: / 21-01-2008 / 19:43:24 / janfrog"
       
    64 ! !
       
    65 
       
    66 !ClassSorter methodsFor:'private'!
       
    67 
       
    68 buildIndentIndex
       
    69 	indents := IdentityDictionary new.
       
    70 	order do: [:assoc | indents at: assoc value put: assoc key size - 1].
       
    71 !
       
    72 
       
    73 collectSortedClasses
       
    74         ^order asArray collect: [:assoc | assoc value]
       
    75 
       
    76     "Created: / 21-01-2008 / 19:41:54 / janfrog"
       
    77 !
       
    78 
       
    79 initializeResults
       
    80 	| i chain2 chain1 result max |
       
    81 	order := SortedCollection sortBlock: 
       
    82 					[:assoc1 :assoc2 | 
       
    83 					result := nil.
       
    84 					chain1 := assoc1 key.
       
    85 					chain2 := assoc2 key.
       
    86 					max := chain1 size min: chain2 size.
       
    87 					i := 1.
       
    88 					[result isNil and: [i <= max]] whileTrue: 
       
    89 							[(chain1 at: i) = (chain2 at: i) 
       
    90 								ifTrue: [i := i + 1]
       
    91 								ifFalse: [result := (chain1 at: i) name < (chain2 at: i) name]].
       
    92 					result isNil ifTrue: [chain1 size < chain2 size] ifFalse: [result]]
       
    93 ! !
       
    94 
       
    95 !ClassSorter class methodsFor:'documentation'!
       
    96 
       
    97 version_CVS
       
    98     ^ '$Header: /cvs/stx/stx/libtool/Tools__ClassSorter.st,v 1.1 2011-07-01 13:28:45 cg Exp $'
       
    99 !
       
   100 
       
   101 version_SVN
       
   102     ^ '§Id: Tools__ClassSorter.st 7486 2009-10-26 22:06:24Z vranyj1 §'
       
   103 ! !