MCMethodDefinition.st
author Claus Gittinger <cg@exept.de>
Mon, 14 May 2018 02:21:18 +0200
changeset 1048 582b3a028cbc
parent 1024 0224846a4acc
permissions -rw-r--r--
#FEATURE by cg class: MCMethodDefinition changed: #postloadOver:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1024
0224846a4acc #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 941
diff changeset
     1
"{ Encoding: utf8 }"
0224846a4acc #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 941
diff changeset
     2
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"{ Package: 'stx:goodies/monticello' }"
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
1024
0224846a4acc #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 941
diff changeset
     5
"{ NameSpace: Smalltalk }"
0224846a4acc #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 941
diff changeset
     6
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
MCDefinition subclass:#MCMethodDefinition
937
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
     8
	instanceVariableNames:'classIsMeta source category selector className timeStamp'
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
	classVariableNames:'Definitions'
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
	poolDictionaries:''
642
89416ce27278 category change
Claus Gittinger <cg@exept.de>
parents: 574
diff changeset
    11
	category:'SCM-Monticello-Modeling'
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
!MCMethodDefinition class methodsFor:'as yet unclassified'!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
cachedDefinitions
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
    18
        Definitions ifNil: [Definitions := WeakIdentityDictionary new.  WeakArray addDependent: Definitions].
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
    19
        ^ Definitions
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
    20
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
    21
    "Modified: / 26-08-2009 / 12:20:45 / Jaroslav Havlin <havlij6@fel.cvut.cz>"
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
className: classString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
classIsMeta: metaBoolean
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
selector: selectorString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
category: catString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
timeStamp: timeString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
source: sourceString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
	^ self instanceLike:
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
		(self new initializeWithClassName: classString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
					classIsMeta: metaBoolean
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
					selector: selectorString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
					category: catString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
					timeStamp: timeString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
					source: sourceString)
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
className: classString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
selector: selectorString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
category: catString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
timeStamp: timeString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
source: sourceString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
	^ self	className: classString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
			classIsMeta: false
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
			selector: selectorString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
			category: catString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
			timeStamp: timeString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
			source: sourceString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
forMethodReference: aMethodReference
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
	| definition |
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
	definition := self cachedDefinitions at: aMethodReference compiledMethod ifAbsent: [].
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
	(definition isNil
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
		or: [definition selector ~= aMethodReference methodSymbol]
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
		or: [definition className ~= aMethodReference classSymbol]
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
		or: [definition classIsMeta ~= aMethodReference classIsMeta]
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
		or: [definition category ~= aMethodReference category])
937
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
    60
			ifTrue: [definition := self
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
						className: aMethodReference classSymbol
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
						classIsMeta: aMethodReference classIsMeta
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
						selector: aMethodReference methodSymbol
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
						category: aMethodReference category
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
						timeStamp: aMethodReference timeStamp
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
						source: aMethodReference source.
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
					self cachedDefinitions at: aMethodReference compiledMethod put: definition].
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
	^ definition
937
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
    69
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
initialize
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
    73
    "
146
e92158173b96 more porting (but still unfinished)
Claus Gittinger <cg@exept.de>
parents: 52
diff changeset
    74
        Smalltalk addToShutDownList: self
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
    75
    "
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
    76
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
    77
    "Modified: / 13-10-2010 / 14:12:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
shutDown
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
	WeakArray removeWeakDependent: Definitions.
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
    82
	Definitions := nil.
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
! !
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
!MCMethodDefinition methodsFor:'accessing'!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
actualClass
937
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
    88
    ^ Smalltalk
892
1922021ef56b Removed instvar installedClassName and make it an object attribute.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 864
diff changeset
    89
        at:(self installedClassName ? className) asSymbol
937
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
    90
        ifPresent: [:class |
1024
0224846a4acc #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 941
diff changeset
    91
            (class notNil and:[classIsMeta])
937
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
    92
                ifTrue: [class theMetaclass "classSide"]
471
6ade6cb144aa support namespace override
Claus Gittinger <cg@exept.de>
parents: 465
diff changeset
    93
                ifFalse: [class]
6ade6cb144aa support namespace override
Claus Gittinger <cg@exept.de>
parents: 465
diff changeset
    94
        ]
465
82d9af7f73d5 changed: #actualClass
Claus Gittinger <cg@exept.de>
parents: 269
diff changeset
    95
487
e7bdc9fb797e changed: #actualClass
Claus Gittinger <cg@exept.de>
parents: 486
diff changeset
    96
    "Modified: / 07-09-2011 / 15:23:45 / cg"
892
1922021ef56b Removed instvar installedClassName and make it an object attribute.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 864
diff changeset
    97
    "Modified: / 12-08-2013 / 01:34:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
category
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
	^ category
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
864
33600db0c775 More improvements in pre-write transformations.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 718
diff changeset
   104
category:something
33600db0c775 More improvements in pre-write transformations.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 718
diff changeset
   105
    category := something.
33600db0c775 More improvements in pre-write transformations.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 718
diff changeset
   106
!
33600db0c775 More improvements in pre-write transformations.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 718
diff changeset
   107
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
classIsMeta
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
	^ classIsMeta
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
className
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
	^className
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
718
f3d724f6bd3e category changes
Claus Gittinger <cg@exept.de>
parents: 642
diff changeset
   116
description
937
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
   117
	^ Array
718
f3d724f6bd3e category changes
Claus Gittinger <cg@exept.de>
parents: 642
diff changeset
   118
		with: className
f3d724f6bd3e category changes
Claus Gittinger <cg@exept.de>
parents: 642
diff changeset
   119
		with: selector
f3d724f6bd3e category changes
Claus Gittinger <cg@exept.de>
parents: 642
diff changeset
   120
		with: classIsMeta
f3d724f6bd3e category changes
Claus Gittinger <cg@exept.de>
parents: 642
diff changeset
   121
!
f3d724f6bd3e category changes
Claus Gittinger <cg@exept.de>
parents: 642
diff changeset
   122
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
fullTimeStamp
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   124
	^Timestamp fromMethodTimeStamp: timeStamp
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
471
6ade6cb144aa support namespace override
Claus Gittinger <cg@exept.de>
parents: 465
diff changeset
   127
installedClassName
892
1922021ef56b Removed instvar installedClassName and make it an object attribute.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 864
diff changeset
   128
    | installedClassName |
1922021ef56b Removed instvar installedClassName and make it an object attribute.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 864
diff changeset
   129
1922021ef56b Removed instvar installedClassName and make it an object attribute.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 864
diff changeset
   130
    installedClassName :=  self objectAttributeAt: #installedClassName.
1922021ef56b Removed instvar installedClassName and make it an object attribute.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 864
diff changeset
   131
    ^ installedClassName ? className
471
6ade6cb144aa support namespace override
Claus Gittinger <cg@exept.de>
parents: 465
diff changeset
   132
6ade6cb144aa support namespace override
Claus Gittinger <cg@exept.de>
parents: 465
diff changeset
   133
    "Created: / 07-09-2011 / 13:36:37 / cg"
892
1922021ef56b Removed instvar installedClassName and make it an object attribute.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 864
diff changeset
   134
    "Modified: / 12-08-2013 / 01:37:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1922021ef56b Removed instvar installedClassName and make it an object attribute.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 864
diff changeset
   135
!
1922021ef56b Removed instvar installedClassName and make it an object attribute.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 864
diff changeset
   136
1922021ef56b Removed instvar installedClassName and make it an object attribute.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 864
diff changeset
   137
installedClassName:aString
1922021ef56b Removed instvar installedClassName and make it an object attribute.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 864
diff changeset
   138
    self objectAttributeAt: #installedClassName put: aString.
1922021ef56b Removed instvar installedClassName and make it an object attribute.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 864
diff changeset
   139
1922021ef56b Removed instvar installedClassName and make it an object attribute.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 864
diff changeset
   140
    "Modified: / 12-08-2013 / 01:37:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
471
6ade6cb144aa support namespace override
Claus Gittinger <cg@exept.de>
parents: 465
diff changeset
   141
!
6ade6cb144aa support namespace override
Claus Gittinger <cg@exept.de>
parents: 465
diff changeset
   142
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
selector
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
	^selector
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
source
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
	^ source
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
937
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
   151
source: something
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
   152
	source := something
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
   153
!
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
   154
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
timeStamp
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
	^ timeStamp
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
! !
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
!MCMethodDefinition methodsFor:'annotations'!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
printAnnotations: requests on: aStream
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
	"Add a string for an annotation pane, trying to fulfill the annotation requests.
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
	These might include anything that
937
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
   164
		Preferences defaultAnnotationRequests
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
	might return. Which includes anything in
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
		Preferences annotationInfo
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
	To edit these, use:"
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
	"Preferences editAnnotations"
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
	requests do: [ :aRequest |
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
		aRequest == #timeStamp ifTrue: [ aStream nextPutAll: self timeStamp ].
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
		aRequest == #messageCategory ifTrue: [ aStream nextPutAll: self category ].
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
		aRequest == #requirements ifTrue: [
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
			self requirements do: [ :req |
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
				aStream nextPutAll: req ] separatedBy: [ aStream space ]].
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
	] separatedBy: [ aStream space ].
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
! !
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
!MCMethodDefinition methodsFor:'comparing'!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
= aDefinition
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   182
        ^(super = aDefinition)
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   183
                and: [aDefinition source = self source
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   184
                and: [aDefinition category = self category
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   185
                "and: [aDefinition timeStamp = self timeStamp]"]]
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   186
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   187
    "Modified: / 18-08-2009 / 10:18:43 / Jan Vrany <vranyj1@fel.cvut.cz>"
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   188
    "Modified: / 14-09-2010 / 19:03:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
hash
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
	| hash |
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   193
	hash := String stringHash: classIsMeta asString initialHash: 0.
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   194
	hash := String stringHash: source initialHash: hash.
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   195
	hash := String stringHash: category initialHash: hash.
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   196
	hash := String stringHash: className initialHash: hash.
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
	^ hash
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
requirements
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
	^ Array with: className
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
sortKey
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
	^ self className, '.', (self classIsMeta ifTrue: ['meta'] ifFalse: ['nonmeta']), '.', self selector
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
! !
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   208
!MCMethodDefinition methodsFor:'converting'!
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   209
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   210
asChange
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   211
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   212
    ^MethodDefinitionChange new
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   213
        mcDefinition: self;
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   214
        className: className , (classIsMeta ifTrue:[' class'] ifFalse:['']);
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   215
        selector: selector;
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   216
        source: source asStringWithNativeLineEndings;
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   217
        category: category;
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   218
        yourself
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   219
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   220
    "Created: / 13-10-2010 / 17:17:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   221
    "Modified: / 08-11-2010 / 17:56:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   222
! !
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   223
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
!MCMethodDefinition methodsFor:'installing'!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
isExtensionMethod
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
	^ category beginsWith: '*'
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
isOverrideMethod
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
	"this oughta check the package"
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
	^ self isExtensionMethod and: [category endsWith: '-override']
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   235
load
574
0e10d6dcac7d changed: #load
Claus Gittinger <cg@exept.de>
parents: 487
diff changeset
   236
    | env package oldMethod newMethod actualClass|
471
6ade6cb144aa support namespace override
Claus Gittinger <cg@exept.de>
parents: 465
diff changeset
   237
6ade6cb144aa support namespace override
Claus Gittinger <cg@exept.de>
parents: 465
diff changeset
   238
    env := MCStXNamespaceQuery query ? Smalltalk.
6ade6cb144aa support namespace override
Claus Gittinger <cg@exept.de>
parents: 465
diff changeset
   239
    (env ~~ Smalltalk) ifTrue:[
892
1922021ef56b Removed instvar installedClassName and make it an object attribute.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 864
diff changeset
   240
        self installedClassName:(env name , '::' , className) asSymbol
471
6ade6cb144aa support namespace override
Claus Gittinger <cg@exept.de>
parents: 465
diff changeset
   241
    ].
6ade6cb144aa support namespace override
Claus Gittinger <cg@exept.de>
parents: 465
diff changeset
   242
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   243
    package := MCStXPackageQuery query.
574
0e10d6dcac7d changed: #load
Claus Gittinger <cg@exept.de>
parents: 487
diff changeset
   244
    actualClass := self actualClass.
0e10d6dcac7d changed: #load
Claus Gittinger <cg@exept.de>
parents: 487
diff changeset
   245
    actualClass isNil ifTrue:[
937
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
   246
        MCCannotLoadMethodError
642
89416ce27278 category change
Claus Gittinger <cg@exept.de>
parents: 574
diff changeset
   247
            raiseRequestWith:self
89416ce27278 category change
Claus Gittinger <cg@exept.de>
parents: 574
diff changeset
   248
            errorString:('missing class: %1' bindWith:className).
574
0e10d6dcac7d changed: #load
Claus Gittinger <cg@exept.de>
parents: 487
diff changeset
   249
        ^ self "/ proceeded
0e10d6dcac7d changed: #load
Claus Gittinger <cg@exept.de>
parents: 487
diff changeset
   250
    ].
0e10d6dcac7d changed: #load
Claus Gittinger <cg@exept.de>
parents: 487
diff changeset
   251
    oldMethod := actualClass compiledMethodAt: self selector.
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   252
    (oldMethod notNil and:[oldMethod package ~= package])
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   253
        ifTrue:[Class methodRedefinitionNotification
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   254
                    raiseRequestWith: (oldMethod -> self)].
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   255
574
0e10d6dcac7d changed: #load
Claus Gittinger <cg@exept.de>
parents: 487
diff changeset
   256
    newMethod := actualClass
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   257
                compile: source asStringWithNativeLineEndings
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   258
                classified: category
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   259
                withStamp: timeStamp
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   260
                "notifying: (SyntaxError new category: category)".
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   261
    newMethod package: package
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   262
642
89416ce27278 category change
Claus Gittinger <cg@exept.de>
parents: 574
diff changeset
   263
    "Modified: / 11-09-2012 / 09:54:19 / cg"
892
1922021ef56b Removed instvar installedClassName and make it an object attribute.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 864
diff changeset
   264
    "Modified: / 12-08-2013 / 01:34:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   265
!
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   266
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   267
postloadOver: aDefinition
1048
582b3a028cbc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 1024
diff changeset
   268
        super postloadOver: aDefinition.
582b3a028cbc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 1024
diff changeset
   269
        (self isInitializer
582b3a028cbc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 1024
diff changeset
   270
                and: [ self actualClass isTrait not ]
582b3a028cbc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 1024
diff changeset
   271
                and: [ aDefinition isNil or: [ self source ~= aDefinition source ] ]) ifTrue: [
582b3a028cbc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 1024
diff changeset
   272
                        Error handle:[:ex |
582b3a028cbc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 1024
diff changeset
   273
                            Dialog warn:('Error during initialization of %1\\%2' 
582b3a028cbc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 1024
diff changeset
   274
                                        bindWith:self actualClass theNonMetaClass name
582b3a028cbc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 1024
diff changeset
   275
                                        with:ex description)
582b3a028cbc #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 1024
diff changeset
   276
                        ] do:[self actualClass theNonMetaClass initialize] ]
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
scanForPreviousVersion
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
	| position prevPos prevFileIndex preamble tokens sourceFilesCopy stamp method file methodCategory |
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   281
	method := self actualClass compiledMethodAt: selector ifAbsent: [^ nil].
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   282
	position := method filePosition.
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   283
	sourceFilesCopy := SourceFiles collect:
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
		[:x | x isNil ifTrue: [ nil ]
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
				ifFalse: [x readOnlyCopy]].
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
	[method fileIndex == 0 ifTrue: [^ nil].
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   287
	file := sourceFilesCopy at: method fileIndex.
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
	[position notNil & file notNil]
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
		whileTrue:
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
		[file position: (0 max: position-150).  "Skip back to before the preamble"
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
		[file position < (position-1)]  "then pick it up from the front"
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   292
			whileTrue: [preamble := file nextChunk].
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
		"Preamble is likely a linked method preamble, if we're in
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
			a changes file (not the sources file).  Try to parse it
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
			for prior source position and file index"
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   297
		prevPos := nil.
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   298
		stamp := ''.
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
		(preamble findString: 'methodsFor:' startingAt: 1) > 0
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   300
			ifTrue: [tokens := Scanner new scanTokens: preamble]
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   301
			ifFalse: [tokens := Array new  "ie cant be back ref"].
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
		((tokens size between: 7 and: 8)
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
			and: [(tokens at: tokens size-5) = #methodsFor:])
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
			ifTrue:
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
				[(tokens at: tokens size-3) = #stamp:
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
				ifTrue: ["New format gives change stamp and unified prior pointer"
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   307
						stamp := tokens at: tokens size-2.
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   308
						prevPos := tokens last.
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   309
						prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos.
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   310
						prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos]
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
				ifFalse: ["Old format gives no stamp; prior pointer in two parts"
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   312
						prevPos := tokens at: tokens size-2.
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   313
						prevFileIndex := tokens last].
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   314
				(prevPos = 0 or: [prevFileIndex = 0]) ifTrue: [prevPos := nil]].
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
		((tokens size between: 5 and: 6)
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
			and: [(tokens at: tokens size-3) = #methodsFor:])
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
			ifTrue:
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
				[(tokens at: tokens size-1) = #stamp:
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   319
				ifTrue: ["New format gives change stamp and unified prior pointer"
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   320
						stamp := tokens at: tokens size]].
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   321
		methodCategory := tokens after: #methodsFor: ifAbsent: ['as yet unclassifed'].
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
		methodCategory = category ifFalse:
937
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
   323
			[methodCategory = (Smalltalk
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
   324
									at: #Categorizer
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
   325
									ifAbsent: [Smalltalk at: #ClassOrganizer])
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   326
										default ifTrue: [methodCategory := methodCategory, ' '].
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
			^ ChangeRecord new file: file position: position type: #method
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
						class: className category: methodCategory meta: classIsMeta stamp: stamp].
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   329
		position := prevPos.
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   330
		prevPos notNil ifTrue:
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   331
			[file := sourceFilesCopy at: prevFileIndex]].
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
		^ nil]
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   333
			ensure: [sourceFilesCopy do: [:x | x notNil ifTrue: [x close]]]
937
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
   334
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   335
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   336
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   337
unload
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   338
        | previousVersion class |
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   339
941
29ec49f55cc2 class: MCMethodDefinition
Claus Gittinger <cg@exept.de>
parents: 937
diff changeset
   340
        #todo. "/ cg please check if the code below was not good after all
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   341
471
6ade6cb144aa support namespace override
Claus Gittinger <cg@exept.de>
parents: 465
diff changeset
   342
        self todo:'cg: why was the code below removed? see browsers previous versions code'.
941
29ec49f55cc2 class: MCMethodDefinition
Claus Gittinger <cg@exept.de>
parents: 937
diff changeset
   343
        false ifTrue:[
29ec49f55cc2 class: MCMethodDefinition
Claus Gittinger <cg@exept.de>
parents: 937
diff changeset
   344
            self isOverrideMethod ifTrue: [previousVersion := self scanForPreviousVersion].
29ec49f55cc2 class: MCMethodDefinition
Claus Gittinger <cg@exept.de>
parents: 937
diff changeset
   345
        ].
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   346
        previousVersion
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   347
                ifNil: [(class := self actualClass) ifNotNil: [class removeSelector: selector]]
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   348
                ifNotNil: [previousVersion fileIn]
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   349
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   350
    "Modified: / 11-09-2010 / 18:44:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
471
6ade6cb144aa support namespace override
Claus Gittinger <cg@exept.de>
parents: 465
diff changeset
   351
    "Modified: / 07-09-2011 / 13:39:38 / cg"
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   352
! !
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   353
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
!MCMethodDefinition methodsFor:'printing'!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   356
fullClassName
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   357
	"Using #class selector for classes for backwards compatibility"
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   358
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   359
	^ self classIsMeta
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
		ifFalse: [self className]
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   361
		ifTrue: [
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   362
			(self actualClass isNil or: [ self actualClass isTrait ])
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   363
				ifFalse: [self className, ' class']
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   364
				ifTrue: [self className, ' classSide']]
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   365
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   366
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   367
summary
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   368
	^ self fullClassName , '>>' , selector
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   369
! !
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   371
!MCMethodDefinition methodsFor:'private'!
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   372
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   373
existingMethodOrNil
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   374
    | actualClass |
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   375
    actualClass := self actualClass.
937
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
   376
    ^actualClass
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   377
        ifNil:[nil]
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   378
        ifNotNil: [actualClass compiledMethodAt:self selector]
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   379
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   380
    "Modified: / 08-11-2010 / 17:41:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   381
! !
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   382
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   383
!MCMethodDefinition methodsFor:'serializing'!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   384
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   385
initializeWithClassName: classString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   386
classIsMeta: metaBoolean
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   387
selector: selectorString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   388
category: catString
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   389
timeStamp: timeString
937
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
   390
source: sourceString
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   391
        className := classString asSymbol.
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   392
        selector := selectorString asSymbol.
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   393
        category := catString asSymbol.
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   394
        timeStamp := timeString.
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   395
        classIsMeta := metaBoolean.
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   396
        source := sourceString asStringWithSqueakLineEndings.
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   397
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   398
    "Modified: / 12-09-2010 / 16:02:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   399
! !
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   400
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   401
!MCMethodDefinition methodsFor:'testing'!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   402
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   403
isCodeDefinition
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   404
	^ true
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   405
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   406
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   407
isInitializer
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   408
	^ selector = #initialize and: [classIsMeta]
937
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
   409
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   410
!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   411
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   412
isMethodDefinition
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   413
	^true
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   414
!
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   415
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   416
isOverrideDefinition
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   417
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   418
    | oldMethod |
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   419
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   420
    oldMethod := self existingMethodOrNil.
937
8cbc9884f0cd Added source: accessor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 893
diff changeset
   421
    ^oldMethod
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   422
        ifNil:[false]
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   423
        ifNotNil:[oldMethod package ~= MCStXPackageQuery query]
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   424
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   425
    "Created: / 08-11-2010 / 17:29:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   426
! !
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   427
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   428
!MCMethodDefinition methodsFor:'visiting'!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   429
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   430
accept: aVisitor
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   431
	^ aVisitor visitMethodDefinition: self
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   432
! !
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   433
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   434
!MCMethodDefinition class methodsFor:'documentation'!
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   435
269
afcd566792e2 initial checkin
Claus Gittinger <cg@exept.de>
parents: 187
diff changeset
   436
version
1024
0224846a4acc #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 941
diff changeset
   437
    ^ '$Header$'
269
afcd566792e2 initial checkin
Claus Gittinger <cg@exept.de>
parents: 187
diff changeset
   438
!
afcd566792e2 initial checkin
Claus Gittinger <cg@exept.de>
parents: 187
diff changeset
   439
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   440
version_CVS
1024
0224846a4acc #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 941
diff changeset
   441
    ^ '$Header$'
146
e92158173b96 more porting (but still unfinished)
Claus Gittinger <cg@exept.de>
parents: 52
diff changeset
   442
!
e92158173b96 more porting (but still unfinished)
Claus Gittinger <cg@exept.de>
parents: 52
diff changeset
   443
187
fe82fa7ff57b added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 146
diff changeset
   444
version_SVN
1024
0224846a4acc #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 941
diff changeset
   445
    ^ '$Id$'
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   446
! !
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   447
718
f3d724f6bd3e category changes
Claus Gittinger <cg@exept.de>
parents: 642
diff changeset
   448
52
de0d45ac5b93 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   449
MCMethodDefinition initialize!