79 |
79 |
80 written jan 90 by claus |
80 written jan 90 by claus |
81 |
81 |
82 This is a very old leftover class (it was one of the very first apps in ST/X |
82 This is a very old leftover class (it was one of the very first apps in ST/X |
83 and the Merovingian has not yet detected this one ;-) |
83 and the Merovingian has not yet detected this one ;-) |
84 It will be completely replaced by the ChangeSetBrowser class in the near future. |
84 |
|
85 At the time this was originally written, I had a 2Mb machine, and every memory byte was a very valuable. |
|
86 Therefore, the original did not keep any infos in memory, but instead kept a list of change-chunk file offsets, |
|
87 and parsed the chunks over and over (eg. when searching for classname/selector etc.) |
|
88 Later, when bigger memories became available, more and more infos where cached in additional arrays (classname, |
|
89 selector, etc.) and those where finally condensed into a single changeInfo object. |
|
90 However, now that really enough memory is avail, this is really no longer useful, and we should keep |
|
91 changeSet entries instead (which hold the same info plus more). |
|
92 The ChangeSetBrowser does exactly this, but does not support all of the fancy compress/delete etc. |
|
93 operations of the ChangesBrowser, to which we got used so much. |
|
94 Thus, this one kept on living its zombie life and gets occasional features added (sigh)... |
|
95 (Well, like many workhorses, they become ugly when aged, but still do their duty) |
|
96 |
|
97 It MUST eventually be completely replaced by the ChangeSetBrowser class in the near future. |
85 |
98 |
86 |
99 |
87 [Class variables:] |
100 [Class variables:] |
88 CompressSnapshotInfo if true (the default), snapshot entries |
101 CompressSnapshotInfo if true (the default), snapshot entries |
89 are also compressed in the compress function. |
102 are also compressed in the compress function. |
1951 ask the user if all operations should be aborted..." |
1973 ask the user if all operations should be aborted..." |
1952 multipleApply := (lastNr - changeNr) > 1. |
1974 multipleApply := (lastNr - changeNr) > 1. |
1953 |
1975 |
1954 changeNr to:lastNr do:[:changeNr | |
1976 changeNr to:lastNr do:[:changeNr | |
1955 | cls sel | |
1977 | cls sel | |
|
1978 |
1956 changeListView setSelection:changeNr. |
1979 changeListView setSelection:changeNr. |
1957 |
1980 |
1958 ((cls := self classOfChange:changeNr ifAbsent:[:className| nil]) notNil |
1981 ((cls := self classOfChange:changeNr ifAbsent:[:className| nil]) notNil |
1959 and:[(sel := self selectorOfMethodChange:changeNr) notNil]) |
1982 and:[(sel := self selectorOfMethodChange:changeNr) notNil]) |
1960 ifTrue:[ |
1983 ifTrue:[ |
2074 checkinInfo := SourceCodeManagerUtilities default |
2097 checkinInfo := SourceCodeManagerUtilities default |
2075 getCheckinInfoFor:logTitle |
2098 getCheckinInfoFor:logTitle |
2076 initialAnswer:nil. |
2099 initialAnswer:nil. |
2077 checkinInfo isNil ifTrue:[^ self ]. |
2100 checkinInfo isNil ifTrue:[^ self ]. |
2078 |
2101 |
2079 changeListView setSelection:nil. |
2102 self unselect. |
2080 classes do:[:eachClass | |
2103 classes do:[:eachClass | |
2081 (SourceCodeManagerUtilities default checkinClass:eachClass withInfo:checkinInfo) |
2104 (SourceCodeManagerUtilities default checkinClass:eachClass withInfo:checkinInfo) |
2082 ifTrue:[ |
2105 ifTrue:[ |
2083 self silentDeleteChangesForClassAndPrivateClasses:eachClass name |
2106 self silentDeleteChangesForClassAndPrivateClasses:eachClass name |
2084 from:1 to:(self numberOfChanges). |
2107 from:1 to:(self numberOfChanges). |
2085 ] |
2108 ] |
2086 ]. |
2109 ]. |
2087 self setChangeList. |
2110 self updateChangeList. |
2088 ] |
2111 ] |
2089 |
2112 |
2090 "Modified: / 6.9.1995 / 17:11:16 / claus" |
2113 "Modified: / 6.9.1995 / 17:11:16 / claus" |
2091 "Modified: / 17.11.2001 / 14:21:13 / cg" |
2114 "Modified: / 17.11.2001 / 14:21:13 / cg" |
|
2115 ! |
|
2116 |
|
2117 doCleanup |
|
2118 "cleanup the changefile/changeset. |
|
2119 actions done: |
|
2120 - from the end, find changes which are equal to the current version |
|
2121 and not in the current changeset (i.e. represent the current version as built). |
|
2122 Then delete it incl. previous versions of it." |
|
2123 |
|
2124 |numChanges nextChangeNr changeNr changeSelector changeClass numDeleted| |
|
2125 |
|
2126 numChanges := self numberOfChanges. |
|
2127 self unselect. |
|
2128 |
|
2129 self withWaitCursorDo:[ |
|
2130 "/ find the last method change which is equal |
|
2131 changeNr := numChanges. |
|
2132 [changeNr > 0] whileTrue:[ |
|
2133 nextChangeNr := changeNr - 1. |
|
2134 |
|
2135 (changeClass := self classOfChange:changeNr ifAbsent:nil) notNil ifTrue:[ |
|
2136 |
|
2137 (changeInfoList at:changeNr) isMethodCategoryChange ifTrue:[ |
|
2138 (self compareChange:changeNr showResult:false) == true ifTrue:[ |
|
2139 (changeSelector := self selectorOfMethodCategoryChange:changeNr) notNil ifTrue:[ |
|
2140 (ChangeSet current includesChangeForClass:changeClass selector:changeSelector) ifFalse:[ |
|
2141 infoHolder value:('Deleting category changes for %1 >> %2' bindWith:changeClass name with:changeSelector). |
|
2142 self windowGroup repairDamage. |
|
2143 numDeleted := self |
|
2144 silentDeleteMethodCategoryChangesFor:changeClass name selector:changeSelector |
|
2145 from:1 to:changeNr. |
|
2146 "/ self selectChange:changeNr. |
|
2147 "/ self doDeleteClassSelectorOlder. |
|
2148 nextChangeNr := (changeNr - numDeleted + 1) min:self numberOfChanges. |
|
2149 ]. |
|
2150 ]. |
|
2151 ]. |
|
2152 ] ifFalse:[ |
|
2153 (changeSelector := self selectorOfMethodChange:changeNr) notNil ifTrue:[ |
|
2154 (self compareChange:changeNr showResult:false) == true ifTrue:[ |
|
2155 "/ found a method change, which is the same as the current version |
|
2156 "/ if in the current changeSet, then do not delete (needs checkin first) |
|
2157 (ChangeSet current includesChangeForClass:changeClass selector:changeSelector) ifFalse:[ |
|
2158 infoHolder value:('Deleting changes for %1 >> %2' bindWith:changeClass name with:changeSelector). |
|
2159 self windowGroup repairDamage. |
|
2160 numDeleted := self |
|
2161 silentDeleteChangesFor:changeClass name selector:changeSelector |
|
2162 from:1 to:changeNr. |
|
2163 "/ self selectChange:changeNr. |
|
2164 "/ self doDeleteClassSelectorOlder. |
|
2165 nextChangeNr := (changeNr - numDeleted + 1) min:self numberOfChanges. |
|
2166 ]. |
|
2167 ]. |
|
2168 ]. |
|
2169 ]. |
|
2170 ]. |
|
2171 changeNr := nextChangeNr. |
|
2172 ]. |
|
2173 ]. |
|
2174 self updateChangeList. |
2092 ! |
2175 ! |
2093 |
2176 |
2094 doCompare |
2177 doCompare |
2095 "compare change with current system version" |
2178 "compare change with current system version" |
2096 |
2179 |
2392 "delete changes with same class as currently selected change from the beginning |
2475 "delete changes with same class as currently selected change from the beginning |
2393 up to the selected change. |
2476 up to the selected change. |
2394 Useful to get rid of obsolete changes before a fileout or checkin entry." |
2477 Useful to get rid of obsolete changes before a fileout or checkin entry." |
2395 |
2478 |
2396 self withSingleSelectedChangeDo:[:changeNr | |
2479 self withSingleSelectedChangeDo:[:changeNr | |
2397 |classNameToDelete prevSelection numDeleted| |
2480 |classNameToDelete prevSelection numDeleted| |
2398 |
2481 |
2399 classNameToDelete := self classNameOfChange:changeNr. |
2482 classNameToDelete := self classNameOfChange:changeNr. |
2400 classNameToDelete notNil ifTrue:[ |
2483 classNameToDelete notNil ifTrue:[ |
2401 prevSelection := changeNr. |
2484 prevSelection := changeNr. |
2402 changeListView setSelection:nil. |
2485 self unselect. |
2403 numDeleted := self |
2486 numDeleted := self |
2404 silentDeleteChangesFor:classNameToDelete |
2487 silentDeleteChangesFor:classNameToDelete |
2405 from:1 |
2488 from:1 |
2406 to:changeNr. |
2489 to:changeNr. |
2407 self setChangeList. |
2490 self updateChangeList. |
2408 self autoSelectOrEnd:(changeNr + 1 - numDeleted) |
2491 self autoSelectOrEnd:(changeNr + 1 - numDeleted) |
2409 ] |
2492 ] |
2410 ]. |
2493 ]. |
2411 |
2494 |
2412 "Created: 13.12.1995 / 15:41:58 / cg" |
2495 "Created: 13.12.1995 / 15:41:58 / cg" |
2413 "Modified: 25.5.1996 / 12:26:34 / cg" |
2496 "Modified: 25.5.1996 / 12:26:34 / cg" |
2414 ! |
2497 ! |
2415 |
2498 |
2416 doDeleteClassRest |
2499 doDeleteClassRest |
2417 "delete rest of changes with same class as currently selected change" |
2500 "delete rest of changes with same class as currently selected change" |
2418 |
2501 |
2419 self withSingleSelectedChangeDo:[:changeNr | |
2502 self withSingleSelectedChangeDo:[:changeNr | |
2420 | classNameToDelete | |
2503 | classNameToDelete | |
2421 |
2504 |
2422 classNameToDelete := self classNameOfChange:changeNr. |
2505 classNameToDelete := self classNameOfChange:changeNr. |
2423 classNameToDelete notNil ifTrue:[ |
2506 classNameToDelete notNil ifTrue:[ |
2424 changeListView setSelection:nil. |
2507 self unselect. |
2425 self silentDeleteChangesFor:classNameToDelete |
2508 self silentDeleteChangesFor:classNameToDelete |
2426 from:changeNr |
2509 from:changeNr |
2427 to:(self numberOfChanges). |
2510 to:(self numberOfChanges). |
2428 self setChangeList. |
2511 self updateChangeList. |
2429 self autoSelectOrEnd:changeNr |
2512 self autoSelectOrEnd:changeNr |
2430 ] |
2513 ] |
2431 ] |
2514 ] |
2432 |
2515 |
2433 "Modified: / 18.5.1998 / 14:25:07 / cg" |
2516 "Modified: / 18.5.1998 / 14:25:07 / cg" |
2434 ! |
2517 ! |
2435 |
2518 |
2472 lastChangeNr := lastChangeNr - numDeletedBefore. |
2555 lastChangeNr := lastChangeNr - numDeletedBefore. |
2473 overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore. |
2556 overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore. |
2474 ]. |
2557 ]. |
2475 ]. |
2558 ]. |
2476 |
2559 |
2477 self setChangeList. |
2560 self updateChangeList. |
2478 self autoSelectOrEnd:lastChangeNr |
2561 self autoSelectOrEnd:lastChangeNr |
2479 |
2562 |
2480 "Created: / 13.12.1995 / 16:07:14 / cg" |
2563 "Created: / 13.12.1995 / 16:07:14 / cg" |
2481 "Modified: / 28.1.1998 / 20:42:14 / cg" |
2564 "Modified: / 28.1.1998 / 20:42:14 / cg" |
2482 ! |
2565 ! |
2483 |
2566 |
2484 doDeleteClassSelectorOlder |
2567 doDeleteClassSelectorOlder |
2485 "delete older changes with same class and selector as currently selected change(s)" |
2568 "delete this and older changes with same class and selector as currently selected change(s)" |
2486 |
2569 |
2487 |classNameSelectorPairsToDelete upToPerClassAndSelector lastChangeNr overAllNumDeletedBefore| |
2570 |classNameSelectorPairsToDelete upToPerClassAndSelector lastChangeNr overAllNumDeletedBefore| |
2488 |
2571 |
2489 lastChangeNr := -1. |
2572 lastChangeNr := -1. |
2490 classNameSelectorPairsToDelete := Set new. |
2573 classNameSelectorPairsToDelete := Set new. |
2919 findNextForWhich:aBlock startingAt:changeNrToStartSearch |
3002 findNextForWhich:aBlock startingAt:changeNrToStartSearch |
2920 "helper: select the next change for which aBlock evaluates to true" |
3003 "helper: select the next change for which aBlock evaluates to true" |
2921 |
3004 |
2922 ^ self |
3005 ^ self |
2923 findNextOrPrevious:#next |
3006 findNextOrPrevious:#next |
2924 forWhich:aBlock startingAt:changeNrToStartSearch |
3007 forWhich:aBlock |
|
3008 startingAt:changeNrToStartSearch |
2925 |
3009 |
2926 "Created: / 20-11-2006 / 16:34:06 / cg" |
3010 "Created: / 20-11-2006 / 16:34:06 / cg" |
2927 ! |
3011 ! |
2928 |
3012 |
2929 findNextOrPrevious:direction forWhich:aBlock startingAt:changeNrToStartSearch |
3013 findNextOrPrevious:direction forWhich:aBlock startingAt:changeNrToStartSearch |
3650 "Created: / 08-09-1995 / 19:32:04 / claus" |
3732 "Created: / 08-09-1995 / 19:32:04 / claus" |
3651 "Modified: / 12-11-2006 / 16:23:53 / cg" |
3733 "Modified: / 12-11-2006 / 16:23:53 / cg" |
3652 ! |
3734 ! |
3653 |
3735 |
3654 parseExpression:chunk |
3736 parseExpression:chunk |
|
3737 "parse an expression; return a parseTree" |
|
3738 |
3655 ^ self parseExpression:chunk inNameSpace:(self nameSpaceForApply). |
3739 ^ self parseExpression:chunk inNameSpace:(self nameSpaceForApply). |
3656 ! |
3740 ! |
3657 |
3741 |
3658 parseExpression:text inNameSpace:nameSpace |
3742 parseExpression:text inNameSpace:nameSpace |
3659 |parser p| |
3743 "parse an expression; return a parseTree" |
|
3744 |
|
3745 |parser parseTree| |
3660 |
3746 |
3661 "/ old: |
3747 "/ old: |
3662 "/ does not care for VW qualified names |
3748 "/ does not care for VW qualified names |
3663 "/ ^ Parser parseExpression:text inNameSpace:nameSpace. |
3749 "/ ^ Parser parseExpression:text inNameSpace:nameSpace. |
3664 |
3750 |
3666 self halt:'should no longer happen' |
3752 self halt:'should no longer happen' |
3667 ]. |
3753 ]. |
3668 |
3754 |
3669 "/ new: |
3755 "/ new: |
3670 parser := Parser for:(ReadStream on:text). |
3756 parser := Parser for:(ReadStream on:text). |
3671 parser parserFlags allowQualifiedNames:true. |
3757 parser parserFlags |
3672 parser parserFlags allowDollarInIdentifier:true. |
3758 allowQualifiedNames:true; |
3673 parser parserFlags allowParagraphInIdentifier:true. |
3759 allowDollarInIdentifier:true; |
|
3760 allowParagraphInIdentifier:true. |
|
3761 |
3674 Error handle:[:ex | |
3762 Error handle:[:ex | |
3675 ^ nil |
3763 ^ nil |
3676 ] do:[ |
3764 ] do:[ |
3677 p := parser |
3765 parseTree := parser |
3678 parseExpressionWithSelf:nil |
3766 parseExpressionWithSelf:nil |
3679 notifying:nil |
3767 notifying:nil |
3680 ignoreErrors:true |
3768 ignoreErrors:true |
3681 ignoreWarnings:true |
3769 ignoreWarnings:true |
3682 inNameSpace:nameSpace. |
3770 inNameSpace:nameSpace. |
3683 ]. |
3771 ]. |
3684 ^ p |
3772 ^ parseTree |
3685 |
3773 |
3686 "Modified: / 21-11-2016 / 23:25:48 / cg" |
3774 "Modified: / 21-11-2016 / 23:25:48 / cg" |
3687 ! |
3775 ! |
3688 |
3776 |
3689 queryCloseText |
3777 queryCloseText |
3690 "made this a method for easy redefinition in subclasses" |
3778 "made this a method for easy redefinition in subclasses" |
3691 |
3779 |
3692 ^ 'Quit without updating changeFile ?' |
3780 ^ 'Quit without updating changeFile ?' |
|
3781 ! |
|
3782 |
|
3783 selectChange:changeNr |
|
3784 changeListView setSelection:changeNr. |
|
3785 self changeSelection:changeNr. |
3693 ! |
3786 ! |
3694 |
3787 |
3695 selectedClassNames |
3788 selectedClassNames |
3696 |classes| |
3789 |classes| |
3697 |
3790 |
3708 |
3801 |
3709 "Created: / 19.11.2001 / 21:54:59 / cg" |
3802 "Created: / 19.11.2001 / 21:54:59 / cg" |
3710 ! |
3803 ! |
3711 |
3804 |
3712 setChangeList |
3805 setChangeList |
|
3806 <resource: #obsolete> |
|
3807 "update the selection-list; |
|
3808 called after the changeList has been modified" |
|
3809 |
|
3810 self updateChangeList |
|
3811 ! |
|
3812 |
|
3813 setSingleSelection:changeNr |
|
3814 changeListView multipleSelectOk ifFalse:[ |
|
3815 changeListView setSelection:changeNr. |
|
3816 ] ifTrue:[ |
|
3817 changeListView setSelection:(Array with:changeNr). |
|
3818 ]. |
|
3819 ! |
|
3820 |
|
3821 showNumberOfChanges |
|
3822 infoHolder value:(resources string:'%1 changes.' with:changeInfoList size). |
|
3823 ! |
|
3824 |
|
3825 sourceOfChange:changeNr |
|
3826 |aStream sawExcla chunk| |
|
3827 |
|
3828 aStream := self streamForChange:changeNr. |
|
3829 aStream isNil ifTrue:[ |
|
3830 ^ nil |
|
3831 ]. |
|
3832 sawExcla := aStream peekFor:(aStream class chunkSeparator). |
|
3833 chunk := aStream nextChunk. |
|
3834 sawExcla ifTrue:[ |
|
3835 chunk := aStream nextChunk |
|
3836 ]. |
|
3837 aStream close. |
|
3838 ^ chunk |
|
3839 ! |
|
3840 |
|
3841 timeStampPrintStringOf:ts |
|
3842 ^ ts printString |
|
3843 |
|
3844 " |
|
3845 self basicNew timeStampPrintStringOf:(Timestamp now) |
|
3846 " |
|
3847 |
|
3848 "Modified (format): / 05-12-2017 / 15:08:48 / cg" |
|
3849 ! |
|
3850 |
|
3851 unselect |
|
3852 "common unselect" |
|
3853 |
|
3854 changeListView setSelection:nil. |
|
3855 |
|
3856 "Modified: 25.5.1996 / 13:02:49 / cg" |
|
3857 ! |
|
3858 |
|
3859 updateChangeList |
3713 "update the selection-list; |
3860 "update the selection-list; |
3714 called after the changeList has been modified" |
3861 called after the changeList has been modified" |
3715 |
3862 |
3716 |headerList| |
3863 |headerList| |
3717 |
3864 |
3721 self showNumberOfChanges. |
3868 self showNumberOfChanges. |
3722 |
3869 |
3723 "/ changeListView deselect. |
3870 "/ changeListView deselect. |
3724 |
3871 |
3725 "Modified: / 01-05-2016 / 19:27:35 / cg" |
3872 "Modified: / 01-05-2016 / 19:27:35 / cg" |
3726 ! |
|
3727 |
|
3728 setSingleSelection:changeNr |
|
3729 changeListView multipleSelectOk ifFalse:[ |
|
3730 changeListView setSelection:changeNr. |
|
3731 ] ifTrue:[ |
|
3732 changeListView setSelection:(Array with:changeNr). |
|
3733 ]. |
|
3734 ! |
|
3735 |
|
3736 showNumberOfChanges |
|
3737 infoHolder value:(resources string:'%1 changes.' with:changeInfoList size). |
|
3738 ! |
|
3739 |
|
3740 sourceOfChange:changeNr |
|
3741 |aStream sawExcla chunk| |
|
3742 |
|
3743 aStream := self streamForChange:changeNr. |
|
3744 aStream isNil ifTrue:[ |
|
3745 ^ nil |
|
3746 ]. |
|
3747 sawExcla := aStream peekFor:(aStream class chunkSeparator). |
|
3748 chunk := aStream nextChunk. |
|
3749 sawExcla ifTrue:[ |
|
3750 chunk := aStream nextChunk |
|
3751 ]. |
|
3752 aStream close. |
|
3753 ^ chunk |
|
3754 ! |
|
3755 |
|
3756 timeStampPrintStringOf:ts |
|
3757 ^ ts printString |
|
3758 |
|
3759 " |
|
3760 self basicNew timeStampPrintStringOf:(Timestamp now) |
|
3761 " |
|
3762 |
|
3763 "Modified (format): / 05-12-2017 / 15:08:48 / cg" |
|
3764 ! |
|
3765 |
|
3766 unselect |
|
3767 "common unselect" |
|
3768 |
|
3769 changeListView setSelection:nil. |
|
3770 |
|
3771 "Modified: 25.5.1996 / 13:02:49 / cg" |
|
3772 ! |
3873 ! |
3773 |
3874 |
3774 withSelectedChangesDo:aBlock |
3875 withSelectedChangesDo:aBlock |
3775 "just a helper, check for a selected change and evaluate aBlock |
3876 "just a helper, check for a selected change and evaluate aBlock |
3776 with busy cursor" |
3877 with busy cursor" |
4307 |
4408 |
4308 "Created: / 05-11-2001 / 18:09:46 / cg" |
4409 "Created: / 05-11-2001 / 18:09:46 / cg" |
4309 "Modified: / 01-05-2016 / 19:24:53 / cg" |
4410 "Modified: / 01-05-2016 / 19:24:53 / cg" |
4310 ! |
4411 ! |
4311 |
4412 |
|
4413 selectorOfMethodCategoryChange:changeNr |
|
4414 "return a methodCategory-change's selector, |
|
4415 or nil if it's not a methodCategoryChange" |
|
4416 |
|
4417 (changeInfoList at:changeNr) isMethodCategoryChange ifFalse:[^ nil]. |
|
4418 ^ (changeInfoList at:changeNr) selector. |
|
4419 |
|
4420 "Modified: / 01-05-2016 / 19:26:21 / cg" |
|
4421 ! |
|
4422 |
4312 selectorOfMethodChange:changeNr |
4423 selectorOfMethodChange:changeNr |
4313 "return a method-changes selector, |
4424 "return a method-change's selector, |
4314 or nil if it's not a methodChange" |
4425 or nil if it's not a methodChange" |
4315 |
4426 |
4316 |sel | |
4427 |sel | |
4317 |
4428 |
4318 changeInfoList size >= changeNr ifTrue:[ |
4429 changeInfoList size >= changeNr ifTrue:[ |
|
4430 (changeInfoList at:changeNr) isMethodCategoryChange ifTrue:[^ nil]. |
4319 sel := (changeInfoList at:changeNr) selector. |
4431 sel := (changeInfoList at:changeNr) selector. |
4320 sel notNil ifTrue:[ ^ sel ]. |
4432 sel notNil ifTrue:[ ^ sel ]. |
4321 ]. |
4433 ]. |
4322 |
4434 |
4323 sel := self extractSelectorOfMethodChange:changeNr. |
4435 sel := self extractSelectorOfMethodChange:changeNr. |
4324 sel notNil ifTrue:[ |
4436 sel notNil ifTrue:[ |
|
4437 self assert:(changeInfoList at:changeNr) isMethodCategoryChange not. |
4325 (changeInfoList at:changeNr) selector:sel. |
4438 (changeInfoList at:changeNr) selector:sel. |
4326 ]. |
4439 ]. |
4327 ^ sel |
4440 ^ sel |
4328 |
4441 |
4329 "Modified: / 01-05-2016 / 19:26:21 / cg" |
4442 "Modified: / 01-05-2016 / 19:26:21 / cg" |
4912 ]. |
5025 ]. |
4913 ^ nil -> 'Unhandled receiver' |
5026 ^ nil -> 'Unhandled receiver' |
4914 ! |
5027 ! |
4915 |
5028 |
4916 compareChange:changeNr |
5029 compareChange:changeNr |
4917 "compare a change with the current (in-image) version; show the result of the compare (as dialog)" |
5030 "compare a change with the current (in-image) version; |
|
5031 show the result of the compare (as dialog)" |
4918 |
5032 |
4919 ^ self compareChange:changeNr showResult:true |
5033 ^ self compareChange:changeNr showResult:true |
4920 ! |
5034 ! |
4921 |
5035 |
4922 compareChange:changeNr showResult:doShowResult |
5036 compareChange:changeNr showResult:doShowResult |
4923 "compare a change with current version. |
5037 "compare a change with current version. |
4924 Return the result of the compare (same -> true, different -> false, uncomparable -> nil). |
5038 Return the result of the compare |
|
5039 same -> true, |
|
5040 different -> false, |
|
5041 uncomparable -> nil. |
4925 If doShowResult is true, the outcome is shown in a dialog/diffViewer." |
5042 If doShowResult is true, the outcome is shown in a dialog/diffViewer." |
4926 |
5043 |
4927 |aStream chunk sawExcla parseTree thisClass cat oldSource newSource outcome showDiff d selector isLoaded beep superClass thisClassSym varsHere varsInChange addedVars removedVars |
5044 |aStream chunk sawExcla parseTree thisClass cat oldSource newSource outcome showDiff d selector isLoaded beep superClass thisClassSym varsHere varsInChange addedVars removedVars |
4928 isSame ownerClass superClassHere superClassInChange sameAndOutcome| |
5045 isSame ownerClass superClassHere superClassInChange sameAndOutcome| |
4929 |
5046 |
5548 ]. |
5665 ]. |
5549 |
5666 |
5550 "finally delete what has been found" |
5667 "finally delete what has been found" |
5551 |
5668 |
5552 (deleteSet size > 0) ifTrue:[ |
5669 (deleteSet size > 0) ifTrue:[ |
5553 changeListView setSelection:nil. |
5670 self unselect. |
5554 index := deleteSet size. |
5671 index := deleteSet size. |
5555 [index > 0] whileTrue:[ |
5672 [index > 0] whileTrue:[ |
5556 self silentDeleteChange:(deleteSet at:index). |
5673 self silentDeleteChange:(deleteSet at:index). |
5557 index := index - 1 |
5674 index := index - 1 |
5558 ]. |
5675 ]. |
5559 self setChangeList. |
5676 self updateChangeList. |
5560 " |
5677 " |
5561 scroll back a bit, if we are left way behind the list |
5678 scroll back a bit, if we are left way behind the list |
5562 " |
5679 " |
5563 changeListView firstLineShown > self numberOfChanges ifTrue:[ |
5680 changeListView firstLineShown > self numberOfChanges ifTrue:[ |
5564 changeListView makeLineVisible:self numberOfChanges |
5681 changeListView makeLineVisible:self numberOfChanges |
5579 ! |
5696 ! |
5580 |
5697 |
5581 deleteChangesFrom:start to:stop |
5698 deleteChangesFrom:start to:stop |
5582 "delete a range of changes" |
5699 "delete a range of changes" |
5583 |
5700 |
5584 changeListView setSelection:nil. |
5701 self unselect. |
5585 stop to:start by:-1 do:[:changeNr | |
5702 stop to:start by:-1 do:[:changeNr | |
5586 self silentDeleteInternalChange:changeNr. |
5703 self silentDeleteInternalChange:changeNr. |
5587 ]. |
5704 ]. |
5588 changeListView removeFromIndex:start toIndex:stop. |
5705 changeListView removeFromIndex:start toIndex:stop. |
5589 |
5706 |
5590 "/ changeListView contentsChanged. |
5707 "/ changeListView contentsChanged. |
5591 "/ changeListView redrawFromLine:start. |
5708 "/ changeListView redrawFromLine:start. |
5716 "/ changeIsFollowupMethodChange size >= changeNr ifTrue:[changeIsFollowupMethodChange removeIndex:changeNr]. |
5833 "/ changeIsFollowupMethodChange size >= changeNr ifTrue:[changeIsFollowupMethodChange removeIndex:changeNr]. |
5717 |
5834 |
5718 "Created: / 07-03-1997 / 16:28:32 / cg" |
5835 "Created: / 07-03-1997 / 16:28:32 / cg" |
5719 "Modified: / 26-02-1998 / 18:20:48 / stefan" |
5836 "Modified: / 26-02-1998 / 18:20:48 / stefan" |
5720 "Modified: / 01-05-2016 / 19:20:59 / cg" |
5837 "Modified: / 01-05-2016 / 19:20:59 / cg" |
|
5838 ! |
|
5839 |
|
5840 silentDeleteMethodCategoryChangesFor:aClassName selector:selector from:start to:stop |
|
5841 "delete method category changes for given class/selector in a range. |
|
5842 Return the number of deleted changes." |
|
5843 |
|
5844 |thisClassName index numDeleted| |
|
5845 |
|
5846 numDeleted := 0. |
|
5847 index := stop. |
|
5848 [index >= start] whileTrue:[ |
|
5849 thisClassName := self realClassNameOfChange:index. |
|
5850 thisClassName = aClassName ifTrue:[ |
|
5851 (self selectorOfMethodCategoryChange:index) == selector ifTrue:[ |
|
5852 self silentDeleteChange:index. |
|
5853 numDeleted := numDeleted + 1. |
|
5854 ] |
|
5855 ]. |
|
5856 index := index - 1 |
|
5857 ]. |
|
5858 ^ numDeleted |
|
5859 ! |
|
5860 |
|
5861 silentDeleteMethodChangesFor:aClassName selector:selector from:start to:stop |
|
5862 "delete method changes for given class/selector in a range. |
|
5863 Return the number of deleted changes." |
|
5864 |
|
5865 |thisClassName index numDeleted| |
|
5866 |
|
5867 numDeleted := 0. |
|
5868 index := stop. |
|
5869 [index >= start] whileTrue:[ |
|
5870 thisClassName := self realClassNameOfChange:index. |
|
5871 thisClassName = aClassName ifTrue:[ |
|
5872 (self selectorOfMethodChange:index) == selector ifTrue:[ |
|
5873 self silentDeleteChange:index. |
|
5874 numDeleted := numDeleted + 1. |
|
5875 ] |
|
5876 ]. |
|
5877 index := index - 1 |
|
5878 ]. |
|
5879 ^ numDeleted |
5721 ! |
5880 ! |
5722 |
5881 |
5723 updateDiffView |
5882 updateDiffView |
5724 self withSelectedChangesDo:[:changeNr | |
5883 self withSelectedChangesDo:[:changeNr | |
5725 self updateDiffViewFor:changeNr. |
5884 self updateDiffViewFor:changeNr. |
6152 nil |
6311 nil |
6153 ] |
6312 ] |
6154 ! |
6313 ! |
6155 |
6314 |
6156 classOfChange:changeNr ifAbsent:exceptionBlock |
6315 classOfChange:changeNr ifAbsent:exceptionBlock |
6157 "answer the class that is subject to the chamge at changeNr. |
6316 "answer the class that is subject to the change at changeNr. |
6158 The classes owning class may be autoloaded, if autoloadAsRequired is true." |
6317 The classes owning class may be autoloaded, if autoloadAsRequired is true." |
6159 |
6318 |
6160 |className cls isMeta nameSpaceForApply path ownerName owner| |
6319 |className cls isMeta nameSpaceForApply path ownerName owner| |
6161 |
6320 |
6162 className := self realClassNameOfChange:changeNr. |
6321 className := self realClassNameOfChange:changeNr. |
6163 className isNil ifTrue:[ |
6322 className isNil ifTrue:[ |
6164 ^ exceptionBlock value:nil |
6323 ^ exceptionBlock valueWithOptionalArgument:nil |
6165 ]. |
6324 ]. |
6166 |
6325 |
6167 isMeta := false. |
6326 isMeta := false. |
6168 (className endsWith:' class') ifTrue:[ |
6327 (className endsWith:' class') ifTrue:[ |
6169 className := className copyButLast:6. |
6328 className := className copyButLast:6. |
6612 changeHeaderLines add:(self headerLineForChangeType:changeType changeString:changeString changeDelta:changeDelta timeStampInfo:timeStampInfo) |
6771 changeHeaderLines add:(self headerLineForChangeType:changeType changeString:changeString changeDelta:changeDelta timeStampInfo:timeStampInfo) |
6613 |
6772 |
6614 "Modified: / 01-05-2016 / 19:07:49 / cg" |
6773 "Modified: / 01-05-2016 / 19:07:49 / cg" |
6615 ! |
6774 ! |
6616 |
6775 |
|
6776 colorizeAsCommentChange:changeType |
|
6777 |c| |
|
6778 |
|
6779 NoColoring ~~ true ifTrue:[ |
|
6780 c := changeType allItalic. |
|
6781 "/ changeString := changeString allItalic. |
|
6782 c emphasisAllAdd:(#color -> UserPreferences current commentColor). |
|
6783 ^ c |
|
6784 ]. |
|
6785 ^ changeType |
|
6786 ! |
|
6787 |
6617 headerLineForChangeType:changeType changeString:changeString changeDelta:changeDelta timeStampInfo:timeStampInfo |
6788 headerLineForChangeType:changeType changeString:changeString changeDelta:changeDelta timeStampInfo:timeStampInfo |
6618 |entry| |
6789 |entry| |
6619 |
6790 |
6620 entry := MultiColListEntry new. |
6791 entry := MultiColListEntry new. |
6621 entry tabulatorSpecification:tabSpec. |
6792 entry tabulatorSpecification:tabSpec. |
6643 |
6814 |
6644 changeInfo add:(info := |
6815 changeInfo add:(info := |
6645 ChangesBrowser::ChangeInfo new |
6816 ChangesBrowser::ChangeInfo new |
6646 position:chunkPosition chunk:chunkText className:nil selector:nil headerLine:nil |
6817 position:chunkPosition chunk:chunkText className:nil selector:nil headerLine:nil |
6647 timestamp:timeStampInfo isFollowupChange:false). |
6818 timestamp:timeStampInfo isFollowupChange:false). |
6648 "/ changeChunks add:chunkText. |
|
6649 "/ changeClassNames add:nil. |
|
6650 "/ changePositions add:chunkPosition. |
|
6651 "/ changeTimeStamps add:timeStampInfo. |
|
6652 "/ changeIsFollowupMethodChange add:false. |
|
6653 |
6819 |
6654 headerLine := nil. |
6820 headerLine := nil. |
6655 changeDelta := ' '. |
6821 changeDelta := ' '. |
6656 |
6822 |
6657 sawExcla ifFalse:[ |
6823 sawExcla ifFalse:[ |
6658 self processNonMethodChunk |
6824 self processNonMethodChunk |
6659 ] ifTrue:[ |
6825 ] ifTrue:[ |
6660 self processMethodChunkIfNone: |
6826 self processMethodChunkIfNone: |
6661 [ |
6827 [ |
6662 changeInfo removeLast. |
6828 changeInfo removeLast. |
6663 "/ changeChunks removeLast. |
|
6664 "/ changeClassNames removeLast. |
|
6665 "/ changePositions removeLast. |
|
6666 "/ changeTimeStamps removeLast. |
|
6667 "/ changeIsFollowupMethodChange removeLast. |
|
6668 ] |
6829 ] |
6669 ]. |
6830 ]. |
6670 |
6831 |
6671 changeString notNil ifTrue:[ |
6832 changeString notNil ifTrue:[ |
6672 "/ self addHeaderLineForChangeType:changeType changeString:changeString changeDelta:changeDelta timeStampInfo:timeStampInfo. |
6833 "/ self addHeaderLineForChangeType:changeType changeString:changeString changeDelta:changeDelta timeStampInfo:timeStampInfo. |
6719 clsName := nameAndClass key. changeClass := nameAndClass value. |
6880 clsName := nameAndClass key. changeClass := nameAndClass value. |
6720 |
6881 |
6721 sel == #categoriesForClass ifTrue:[ |
6882 sel == #categoriesForClass ifTrue:[ |
6722 methodChunks := false. |
6883 methodChunks := false. |
6723 classCategoryChunks := true. |
6884 classCategoryChunks := true. |
6724 changeType := '(class category change)'. |
6885 changeType := self colorizeAsCommentChange:'(class category change)'. |
6725 ] ifFalse:[ |
6886 ] ifFalse:[ |
6726 sel == #categoriesFor: ifTrue:[ |
6887 sel == #categoriesFor: ifTrue:[ |
6727 methodChunks := false. |
6888 methodChunks := false. |
6728 methodCategoryChunks := true. |
6889 methodCategoryChunks := true. |
6729 changeType := '(category change)'. |
6890 changeType := self colorizeAsCommentChange:'(category change)'. |
6730 methodSelector := (p args at:1) evaluate. |
6891 methodSelector := (p args at:1) evaluate. |
6731 ] ifFalse:[ |
6892 ] ifFalse:[ |
6732 (sel numArgs == 0) ifTrue:[ |
6893 (sel numArgs == 0) ifTrue:[ |
6733 category := '* As yet uncategorized *'. |
6894 category := '* As yet uncategorized *'. |
6734 category := sel. |
6895 category := sel. |
6826 changeString := (chunkText contractTo:maxLen). |
6987 changeString := (chunkText contractTo:maxLen). |
6827 changeType := '(change)'. |
6988 changeType := '(change)'. |
6828 headerLine := chunkText , ' (change)'. |
6989 headerLine := chunkText , ' (change)'. |
6829 ] ifFalse:[ |
6990 ] ifFalse:[ |
6830 changeString := self contractClass:clsName selector:methodSelector to:maxLen. |
6991 changeString := self contractClass:clsName selector:methodSelector to:maxLen. |
6831 changeType := '{ ' , category , ' }'. |
6992 changeType := ('{ ' , category , ' }'). |
6832 headerLine := clsName , ' ' , methodSelector , ' ' , '(change category: ''' , category , ''')'. |
6993 headerLine := clsName , ' ' , methodSelector , ' ' , '(change category: ''' , category , ''')'. |
6833 ]. |
6994 ]. |
6834 |
6995 |
6835 autoCompare value ifTrue:[ |
6996 autoCompare value ifTrue:[ |
6836 changeDelta := ChangeDeltaInformation |
6997 changeDelta := ChangeDeltaInformation |
6856 |
7017 |
6857 "Modified: / 21-11-2016 / 23:32:29 / cg" |
7018 "Modified: / 21-11-2016 / 23:32:29 / cg" |
6858 ! |
7019 ! |
6859 |
7020 |
6860 processNonMethodChunk |
7021 processNonMethodChunk |
6861 |s changeClass sel cls p rec clsName ownerTree ownerName |
7022 |s changeClass sel cls parseTree rec clsName ownerTree ownerName |
6862 m nameAndClass args instVarsArg classVarsArg categoryArg| |
7023 m nameAndClass args instVarsArg classVarsArg categoryArg |
|
7024 lastInfo newCategory| |
6863 |
7025 |
6864 (chunkText startsWith:'''---- snap') ifTrue:[ |
7026 (chunkText startsWith:'''---- snap') ifTrue:[ |
6865 self processSnapshotChunk. |
7027 self processSnapshotChunk. |
6866 ^ self |
7028 ^ self |
6867 ]. |
7029 ]. |
6878 ] ifFalse:[ |
7040 ] ifFalse:[ |
6879 changeType := '(doIt)'. |
7041 changeType := '(doIt)'. |
6880 ]. |
7042 ]. |
6881 changeString := (chunkText contractTo:maxLen) withoutSeparators. |
7043 changeString := (chunkText contractTo:maxLen) withoutSeparators. |
6882 |
7044 |
6883 p := browser parseExpression:fullChunkText inNameSpace:Smalltalk. |
7045 parseTree := browser parseExpression:fullChunkText inNameSpace:Smalltalk. |
6884 (p notNil and:[p ~~ #Error]) ifTrue:[ |
7046 (parseTree notNil and:[parseTree ~~ #Error]) ifTrue:[ |
6885 p isMessage ifTrue:[ |
7047 parseTree isMessage ifTrue:[ |
6886 sel := p selector. |
7048 sel := parseTree selector. |
6887 rec := p receiver. |
7049 rec := parseTree receiver. |
6888 args := p args. |
7050 args := parseTree args. |
6889 ] |
7051 ] |
6890 ] ifFalse:[ |
7052 ] ifFalse:[ |
6891 sel := nil. |
7053 sel := nil. |
6892 (Scanner new scanTokens:fullChunkText) size == 0 ifTrue:[ |
7054 (Scanner new scanTokens:fullChunkText) size == 0 ifTrue:[ |
6893 "/ a comment only |
7055 "/ a comment only |
6894 changeType := '(comment)'. |
7056 changeType := self colorizeAsCommentChange:'(comment)'. |
6895 NoColoring ~~ true ifTrue:[ |
|
6896 changeType := changeType allItalic. |
|
6897 "/ changeString := changeString allItalic. |
|
6898 changeType emphasisAllAdd:(#color -> UserPreferences current commentColor). |
|
6899 ] |
|
6900 ] ifFalse:[ |
7057 ] ifFalse:[ |
6901 changeType := '(???)'. |
7058 changeType := '(???)'. |
6902 ] |
7059 ] |
6903 ]. |
7060 ]. |
6904 |
7061 |
6905 (sel == #comment:) ifTrue:[ |
7062 (sel == #comment:) ifTrue:[ |
6906 changeType := '(comment)'. |
7063 changeType := self colorizeAsCommentChange:'(comment)'. |
6907 clsName := rec name. |
7064 clsName := rec name. |
6908 changeClass := (self nameSpaceForApply) classNamed:clsName. |
7065 changeClass := (self nameSpaceForApply) classNamed:clsName. |
6909 (changeInfo last) className:clsName. |
7066 (changeInfo last) className:clsName. |
6910 "/ changeClassNames at:changeClassNames size put:clsName. |
7067 |
6911 NoColoring ~~ true ifTrue:[ |
|
6912 changeType := changeType allItalic. |
|
6913 changeType emphasisAllAdd:(#color -> UserPreferences current commentColor). |
|
6914 "/ changeString := clsName allItalic. |
|
6915 ]. |
|
6916 autoCompare value ifTrue:[ |
7068 autoCompare value ifTrue:[ |
6917 (changeClass isNil or:[changeClass isLoaded not]) ifTrue:[ |
7069 (changeClass isNil or:[changeClass isLoaded not]) ifTrue:[ |
6918 changeDelta := '?' |
7070 changeDelta := '?' |
6919 ] ifFalse:[ |
7071 ] ifFalse:[ |
6920 (changeClass comment = (args at:1) evaluate) ifTrue:[ |
7072 (changeClass comment = (args at:1) evaluate) ifTrue:[ |
6926 ^ self. |
7078 ^ self. |
6927 ]. |
7079 ]. |
6928 |
7080 |
6929 (sel == #removeSelector:) ifTrue:[ |
7081 (sel == #removeSelector:) ifTrue:[ |
6930 nameAndClass := self extractClassAndClassNameFromParseTree:rec. |
7082 nameAndClass := self extractClassAndClassNameFromParseTree:rec. |
6931 clsName := nameAndClass key. changeClass := nameAndClass value. |
7083 clsName := nameAndClass key. |
|
7084 changeClass := nameAndClass value. |
6932 |
7085 |
6933 sel := (args at:1) evaluate. |
7086 sel := (args at:1) evaluate. |
6934 (changeInfo last) className:clsName. |
7087 (changeInfo last) className:clsName. |
6935 "/ changeClassNames at:changeClassNames size put:clsName. |
|
6936 |
7088 |
6937 autoCompare value ifTrue:[ |
7089 autoCompare value ifTrue:[ |
6938 (changeClass isNil or:[changeClass isLoaded not]) ifTrue:[ |
7090 (changeClass isNil or:[changeClass isLoaded not]) ifTrue:[ |
6939 changeDelta := '?' |
7091 changeDelta := '?' |
6940 ] ifFalse:[ |
7092 ] ifFalse:[ |
6949 changeString := self contractClass:clsName selector:sel to:maxLen. |
7101 changeString := self contractClass:clsName selector:sel to:maxLen. |
6950 "/ sel := nil. |
7102 "/ sel := nil. |
6951 ^ self. |
7103 ^ self. |
6952 ]. |
7104 ]. |
6953 |
7105 |
6954 (p notNil |
7106 (parseTree notNil |
6955 and:[p ~~ #Error |
7107 and:[parseTree ~~ #Error |
6956 and:[p isMessage |
7108 and:[parseTree isMessage |
6957 and:[rec isMessage |
7109 and:[rec isMessage |
6958 and:[rec selector == #compiledMethodAt:]]]]) ifTrue:[ |
7110 and:[rec selector == #compiledMethodAt:]]]]) ifTrue:[ |
6959 nameAndClass := self extractClassAndClassNameFromParseTree:rec receiver. |
7111 nameAndClass := self extractClassAndClassNameFromParseTree:rec receiver. |
6960 clsName := nameAndClass key. changeClass := nameAndClass value. |
7112 clsName := nameAndClass key. |
|
7113 changeClass := nameAndClass value. |
6961 |
7114 |
6962 (sel == #category:) ifTrue:[ |
7115 (sel == #category:) ifTrue:[ |
6963 sel := (rec args at:1) evaluate. |
7116 sel := (rec args at:1) evaluate. |
6964 changeType := '(category change)'. |
7117 changeType := self colorizeAsCommentChange:'(category change)'. |
6965 changeString := self contractClass:clsName selector:sel to:maxLen. |
7118 changeString := self contractClass:clsName selector:sel to:maxLen. |
6966 (changeInfo last) className:clsName. |
7119 newCategory := (args at:1) evaluate. |
6967 "/ changeClassNames at:changeClassNames size put:clsName. |
7120 |
|
7121 "/ make it a category change |
|
7122 lastInfo := changeInfo last. |
|
7123 lastInfo className:clsName. |
|
7124 lastInfo selector:sel. |
|
7125 lastInfo categoryIfCategoryChange:newCategory. |
|
7126 |
6968 autoCompare value ifTrue:[ |
7127 autoCompare value ifTrue:[ |
6969 (changeClass isNil or:[changeClass isLoaded not]) ifTrue:[ |
7128 (changeClass isNil or:[changeClass isLoaded not]) ifTrue:[ |
6970 changeDelta := '?' |
7129 changeDelta := '?' |
6971 ] ifFalse:[ |
7130 ] ifFalse:[ |
6972 m := changeClass compiledMethodAt:sel asSymbol. |
7131 m := changeClass compiledMethodAt:sel asSymbol. |
6973 m notNil ifTrue:[ |
7132 m isNil ifTrue:[ |
6974 m category = (p args at:1) evaluate ifTrue:[ |
7133 "/ mhm - the method does not (no longer=) exist |
|
7134 changeDelta := '?' |
|
7135 ] ifFalse:[ |
|
7136 m category = newCategory ifTrue:[ |
6975 changeDelta := '='. |
7137 changeDelta := '='. |
6976 ] |
7138 ] |
6977 ] |
7139 ] |
6978 ] |
7140 ] |
6979 ]. |
7141 ]. |
6980 ^ self. |
7142 ^ self. |
6981 ]. |
7143 ]. |
|
7144 |
6982 (sel == #privacy:) ifTrue:[ |
7145 (sel == #privacy:) ifTrue:[ |
6983 sel := (rec args at:1) evaluate. |
7146 sel := (rec args at:1) evaluate. |
6984 changeType := '(privacy change)'. |
7147 changeType := '(privacy change)'. |
6985 changeString := self contractClass:clsName selector:sel to:maxLen. |
7148 changeString := self contractClass:clsName selector:sel to:maxLen. |
6986 (changeInfo last) className:clsName. |
7149 (changeInfo last) className:clsName. |
6987 "/ changeClassNames at:changeClassNames size put:clsName. |
7150 |
6988 autoCompare value ifTrue:[ |
7151 autoCompare value ifTrue:[ |
6989 (changeClass isNil or:[changeClass isLoaded not]) ifTrue:[ |
7152 (changeClass isNil or:[changeClass isLoaded not]) ifTrue:[ |
6990 changeDelta := '?' |
7153 changeDelta := '?' |
6991 ] ifFalse:[ |
7154 ] ifFalse:[ |
6992 changeDelta := ' ' |
7155 changeDelta := ' ' |
6999 |
7162 |
7000 (Class definitionSelectors includes:sel) ifTrue:[ |
7163 (Class definitionSelectors includes:sel) ifTrue:[ |
7001 changeType := '(class definition)'. |
7164 changeType := '(class definition)'. |
7002 clsName := (args at:1) evaluate. |
7165 clsName := (args at:1) evaluate. |
7003 (changeInfo last) className:clsName. |
7166 (changeInfo last) className:clsName. |
7004 "/ changeClassNames at:changeClassNames size put:clsName. |
|
7005 |
7167 |
7006 "/ is it a private-class ? |
7168 "/ is it a private-class ? |
7007 ('*privateIn:' match:sel) ifTrue:[ |
7169 ('*privateIn:' match:sel) ifTrue:[ |
7008 ownerTree := args last. |
7170 ownerTree := args last. |
7009 ownerName := ownerTree name asString. |
7171 ownerName := ownerTree name asString. |
7026 "/ could be an ST/V, VAge or Dolphin definition |
7188 "/ could be an ST/V, VAge or Dolphin definition |
7027 cls definitionSelector = (sel , 'category:') |
7189 cls definitionSelector = (sel , 'category:') |
7028 ]) |
7190 ]) |
7029 ifTrue:[ |
7191 ifTrue:[ |
7030 ((cls superclass isNil |
7192 ((cls superclass isNil |
7031 and:[p receiver isLiteral |
7193 and:[rec isLiteral |
7032 and:[p receiver evaluate isNil]]) |
7194 and:[rec evaluate isNil]]) |
7033 or:[ |
7195 or:[ |
7034 cls superclass notNil |
7196 cls superclass notNil |
7035 and:[p receiver isLiteral not |
7197 and:[rec isLiteral not |
7036 and:[cls superclass name = p receiver name]] |
7198 and:[cls superclass name = rec name]] |
7037 ]) ifTrue:[ |
7199 ]) ifTrue:[ |
7038 (sel == #'variableByteSubclass:classVariableNames:poolDictionaries:category:') |
7200 (sel == #'variableByteSubclass:classVariableNames:poolDictionaries:category:') |
7039 ifTrue:[ |
7201 ifTrue:[ |
7040 "/ VSE definition message |
7202 "/ VSE definition message |
7041 instVarsArg := ''. |
7203 instVarsArg := ''. |
7084 and:[rec selector == #class]]) ifTrue:[ |
7246 and:[rec selector == #class]]) ifTrue:[ |
7085 clsName := rec receiver name. |
7247 clsName := rec receiver name. |
7086 changeClass := (self nameSpaceForApply) classNamed:clsName. |
7248 changeClass := (self nameSpaceForApply) classNamed:clsName. |
7087 changeType := '(class definition)'. |
7249 changeType := '(class definition)'. |
7088 (changeInfo last) className:clsName. |
7250 (changeInfo last) className:clsName. |
7089 "/ changeClassNames at:changeClassNames size put:clsName. |
|
7090 |
7251 |
7091 autoCompare value ifTrue:[ |
7252 autoCompare value ifTrue:[ |
7092 changeClass isNil ifTrue:[ |
7253 changeClass isNil ifTrue:[ |
7093 changeDelta := '?'. |
7254 changeDelta := '?'. |
7094 ] ifFalse:[ |
7255 ] ifFalse:[ |
7095 s := (p args at:1) evaluate. |
7256 s := (args at:1) evaluate. |
7096 s = changeClass class instanceVariableString ifTrue:[ |
7257 s = changeClass class instanceVariableString ifTrue:[ |
7097 changeDelta := '='. |
7258 changeDelta := '='. |
7098 ] |
7259 ] |
7099 ] |
7260 ] |
7100 ]. |
7261 ]. |