ProjectChecker.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sat, 05 Oct 2013 12:51:21 +0100
branchjv
changeset 3407 989191014bcd
parent 3405 cec1fd1367ce
child 3838 474d8ec95b33
permissions -rw-r--r--
Added new check to ProjectChecker. For each compiled class, check that it's superclass package's project definition exists. If it does not, the whole package will likely fail to compile as required package could not be compiled nor loaded.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
     1
"
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
     2
 COPYRIGHT (c) 2006 by eXept Software AG
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
     3
              All Rights Reserved
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
     4
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
     5
 This software is furnished under a license and may be used
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
     6
 only in accordance with the terms of that license and with the
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
     8
 be provided or otherwise made available to, or used by, any
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
     9
 other person.  No title to or ownership of the software is
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
    10
 hereby transferred.
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
    11
"
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    12
"{ Package: 'stx:libbasic3' }"
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    13
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    14
Object subclass:#ProjectChecker
3148
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
    15
	instanceVariableNames:'package packageDef classes methods problems phase
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
    16
		checkExtensionsOnly'
2967
c5f1d6853ad1 changed: #checkClassListConsistency (class order)
vrany
parents: 2966
diff changeset
    17
	classVariableNames:''
c5f1d6853ad1 changed: #checkClassListConsistency (class order)
vrany
parents: 2966
diff changeset
    18
	poolDictionaries:''
c5f1d6853ad1 changed: #checkClassListConsistency (class order)
vrany
parents: 2966
diff changeset
    19
	category:'System-Support-Projects'
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    20
!
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    21
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
    22
!ProjectChecker class methodsFor:'documentation'!
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
    23
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
    24
copyright
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
    25
"
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
    26
 COPYRIGHT (c) 2006 by eXept Software AG
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
    27
              All Rights Reserved
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
    28
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
    29
 This software is furnished under a license and may be used
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
    30
 only in accordance with the terms of that license and with the
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
    31
 inclusion of the above copyright notice.   This software may not
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
    32
 be provided or otherwise made available to, or used by, any
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
    33
 other person.  No title to or ownership of the software is
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
    34
 hereby transferred.
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
    35
"
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    36
!
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    37
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    38
documentation
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    39
"
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    40
    A simple project checker that can search whole projects or individual
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
    41
    classes or methods for various problems that may cause build problems such
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
    42
    as:
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
    43
        - inconsistent/messed up project definition class
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
    44
        - method code problems
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    45
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    46
    NOTE: Not yet finished. This code is meant as a single central entry for all the
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    47
    source code management tools like SCM Utilities, NewSystemBrowser ets. That code
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
    48
    will be refactored later once this tool prooves itself useful and mature enough.
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    49
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    50
    [author:]
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    51
        Jan Vrany <jan.vrany@fit.cvut.cz>
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    52
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    53
    [instance variables:]
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    54
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    55
    [class variables:]
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    56
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    57
    [see also:]
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
    58
        Tools::ProjectCheckerBrowser
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    59
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    60
"
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    61
!
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    62
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    63
examples
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    64
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    65
    "
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    66
        ProjectChecker check: 'stx:libbasic'
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
    67
        ProjectChecker check: 'stx:libtool'
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
    68
        ProjectChecker check: 'stx:libbasic3'
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    69
    "
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    70
! !
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    71
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
    72
!ProjectChecker class methodsFor:'instance creation'!
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
    73
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
    74
forPackage: packageId
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
    75
    ^self new
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
    76
        package: packageId;
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
    77
        yourself.
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
    78
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
    79
    "Created: / 25-07-2012 / 18:00:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2910
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
    80
!
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
    81
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
    82
new
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
    83
    "return an initialized instance"
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
    84
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
    85
    ^ self basicNew initialize.
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
    86
! !
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
    87
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    88
!ProjectChecker class methodsFor:'checking'!
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    89
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    90
check: package
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    91
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    92
    ^self new check: package
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    93
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    94
    "Created: / 11-01-2012 / 16:46:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    95
! !
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    96
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    97
!ProjectChecker methodsFor:'accessing'!
68860a7700c2 initial checkin
vrany
parents:
diff changeset
    98
3148
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
    99
checkExtensionsOnly:aBoolean
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   100
    checkExtensionsOnly := aBoolean.
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   101
!
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   102
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   103
classes: aCollection
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   104
    classes := aCollection.
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   105
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   106
    "Created: / 13-02-2012 / 17:06:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   107
!
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   108
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   109
methods
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   110
    ^ methods
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   111
!
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   112
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   113
methods:something
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   114
    methods := something.
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   115
!
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   116
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   117
package
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   118
    ^ package
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   119
!
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   120
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   121
package:packageId
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   122
    package := packageId asSymbol.
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   123
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   124
    "Modified: / 11-04-2012 / 16:00:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   125
!
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   126
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   127
problems
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   128
    ^ problems
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   129
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   130
    "Modified: / 23-02-2012 / 15:14:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   131
! !
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   132
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   133
!ProjectChecker methodsFor:'checking'!
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   134
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   135
check
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   136
2910
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   137
    problems removeAll.
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   138
    packageDef := ProjectDefinition definitionClassForPackage: package.
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   139
    packageDef isNil ifTrue:[
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   140
        self addProblem: 
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   141
            (ProjectProblem newProjectDefinitionDoesNotExist package: package).
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   142
        ^self    
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   143
    ].
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   144
3148
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   145
    ActivityNotification raiseRequestWith:self errorString:'Checking package...'.
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   146
    self checkPackage.
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   147
    (checkExtensionsOnly ? false) ifFalse:[
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   148
        ActivityNotification raiseRequestWith:self errorString:'Checking classes...'.
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   149
        self checkClasses.
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   150
    ].
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   151
    ActivityNotification raiseRequestWith:self errorString:'Checking methods...'.
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   152
    self checkMethods.
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   153
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   154
    "Created: / 11-01-2012 / 16:47:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   155
!
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   156
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   157
check: package
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   158
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   159
    self package: package.
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   160
    self check.
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   161
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   162
    "Created: / 11-01-2012 / 16:47:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   163
! !
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   164
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   165
!ProjectChecker methodsFor:'checks-individual'!
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   166
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   167
checkClassListConsistency
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   168
    "Checks whether all classes listed in #classNamesAndAttributes are present
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   169
    and if all present classes are listed"
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   170
2910
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   171
    |classesInImage classesInDescription classesInDescriptionChecked onlyInDescription|
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   172
    "WARNING: Copy/paste of ProjectDefinition>>validateDescription"
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   173
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   174
    classesInImage := Smalltalk allClasses select:[:cls | (cls package = self package) and:[cls isPrivate not]].
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   175
    "/ classesInDescription := self classes asIdentitySet.
2910
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   176
    classesInDescription := OrderedCollection new.
2967
c5f1d6853ad1 changed: #checkClassListConsistency (class order)
vrany
parents: 2966
diff changeset
   177
    ( (packageDef compiled_classNames_common)
c5f1d6853ad1 changed: #checkClassListConsistency (class order)
vrany
parents: 2966
diff changeset
   178
    , (packageDef compiled_classNamesForPlatform:(OperatingSystem platformName))
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   179
    , (packageDef autoloaded_classNames)) do:[:nm |
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   180
        |cls|
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   181
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   182
        cls := Smalltalk at:nm asSymbol.
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   183
        cls isNil ifTrue:[
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   184
            self addProblem: 
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   185
                (ProjectProblem newClassListedButDoesNotExist className: nm)
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   186
        ] ifFalse:[
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   187
            classesInDescription add:cls.
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   188
        ].
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   189
    ].
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   190
2910
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   191
    classesInDescriptionChecked := OrderedCollection new.
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   192
    classesInDescription do:[:eachClass |
2910
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   193
        (classesInDescriptionChecked includes: eachClass) ifTrue:[
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   194
                    self addProblem: 
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   195
                        (ProjectProblem newClassListedMultipleTimes
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   196
                            className: eachClass name)
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   197
        ].
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   198
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   199
        eachClass sharedPoolNames do:[:eachPoolName |
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   200
            |pool|
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   201
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   202
            pool := eachClass nameSpace classNamed:eachPoolName.
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   203
            pool isNil ifTrue:[
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   204
                eachClass nameSpace ~~ Smalltalk ifTrue:[
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   205
                    pool := Smalltalk classNamed:eachPoolName.
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   206
                ]
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   207
            ].
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   208
            pool isNil ifTrue:[
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   209
                self addProblem: 
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   210
                    (ProjectProblem newClassUsesPoolButItDoesNotExist
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   211
                        className: eachClass name;
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   212
                        poolName: eachPoolName).
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   213
            ] ifFalse:[
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   214
                pool isSharedPool ifFalse:[
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   215
                    self addProblem: 
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   216
                        (ProjectProblem newClassUsesPoolButItIsNotASharedPool
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   217
                            className: eachClass name;
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   218
                            poolName: eachPoolName).                
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   219
                ].
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   220
            ].
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   221
        ].
2910
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   222
2966
bf5ea36104cd Fix in #checkClassListConsistency - care about classes with nil superclass (Autoload/Object)
vrany
parents: 2965
diff changeset
   223
        (eachClass superclass notNil "/Care about classes with nil superclass - Object & Autoload
bf5ea36104cd Fix in #checkClassListConsistency - care about classes with nil superclass (Autoload/Object)
vrany
parents: 2965
diff changeset
   224
            and:[eachClass superclass package == eachClass package]) ifTrue:[
2910
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   225
            (classesInDescriptionChecked includes: eachClass superclass) ifFalse:[
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   226
                self addProblem:
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   227
                    (ProjectProblem newClassListedBeforeItsSuperclass
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   228
                        className: eachClass name;
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   229
                        superClassName: eachClass superclass name)
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   230
            ].
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   231
        ].
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   232
        eachClass sharedPools do:[:eachPool|
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   233
            eachPool package == eachClass package ifTrue:[
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   234
                (classesInDescriptionChecked includes: eachPool) ifFalse:[
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   235
                    self addProblem:
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   236
                        (ProjectProblem newClassListedBeforeItsPool
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   237
                            className: eachClass name;
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   238
                            poolName: eachPool name)
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   239
                ].
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   240
            ].
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   241
        ].
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   242
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   243
        classesInDescriptionChecked add: eachClass.
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   244
    ].
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   245
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   246
    classesInImage ~= classesInDescription ifTrue:[
2856
a1cee28488c0 changed: #checkClassListConsistency - do not warn about not-listed classes twice
vrany
parents: 2853
diff changeset
   247
        "This is done later in checkClassesListedInProjectDefinition:"
a1cee28488c0 changed: #checkClassListConsistency - do not warn about not-listed classes twice
vrany
parents: 2853
diff changeset
   248
"/        onlyInImage := (classesInImage reject:[:cls | classesInDescription includes:cls]).
a1cee28488c0 changed: #checkClassListConsistency - do not warn about not-listed classes twice
vrany
parents: 2853
diff changeset
   249
"/        onlyInImage do:[:cls|
a1cee28488c0 changed: #checkClassListConsistency - do not warn about not-listed classes twice
vrany
parents: 2853
diff changeset
   250
"/            self addProblem: 
a1cee28488c0 changed: #checkClassListConsistency - do not warn about not-listed classes twice
vrany
parents: 2853
diff changeset
   251
"/                (ProjectProblem newClassNotListed className: cls name).
a1cee28488c0 changed: #checkClassListConsistency - do not warn about not-listed classes twice
vrany
parents: 2853
diff changeset
   252
"/        ].
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   253
        onlyInDescription := (classesInDescription reject:[:cls | classesInImage includes:cls]).
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   254
        onlyInDescription do:[:cls|
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   255
            self addProblem: 
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   256
                (ProjectProblem newClassListedButDoesNotExist className: cls name)
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   257
        ].
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   258
    ].
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   259
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   260
    "Created: / 11-01-2012 / 17:14:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2967
c5f1d6853ad1 changed: #checkClassListConsistency (class order)
vrany
parents: 2966
diff changeset
   261
    "Modified: / 31-10-2012 / 17:40:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2718
vrany
parents: 2716
diff changeset
   262
!
vrany
parents: 2716
diff changeset
   263
3405
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   264
checkClassesAutoloadedSuperclasse: aCollection"of Class"
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   265
    packageDef classNamesAndAttributesDo:[:clsnm :attributes|
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   266
        | cls |
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   267
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   268
        cls := Smalltalk at: clsnm.
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   269
        (aCollection includes: cls) ifTrue:[
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   270
            (attributes includes: #autoload) ifFalse:[
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   271
                "/ Care for Object!!
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   272
                cls superclass notNil ifTrue:[
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   273
                    | superDef superNm |
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   274
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   275
                    superDef := ProjectDefinition definitionClassForPackage: cls superclass package.
3407
989191014bcd Added new check to ProjectChecker.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3405
diff changeset
   276
                    superDef isNil ifTrue:[
989191014bcd Added new check to ProjectChecker.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3405
diff changeset
   277
                        problems add:
989191014bcd Added new check to ProjectChecker.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3405
diff changeset
   278
                            (ProjectProblem newClassIsCompiledButSuperclassProjectDefinitionIsMissing
989191014bcd Added new check to ProjectChecker.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3405
diff changeset
   279
                                            package: package;
989191014bcd Added new check to ProjectChecker.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3405
diff changeset
   280
                                            className: clsnm;
989191014bcd Added new check to ProjectChecker.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3405
diff changeset
   281
                                            yourself)   
989191014bcd Added new check to ProjectChecker.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3405
diff changeset
   282
                    ] ifFalse:[
989191014bcd Added new check to ProjectChecker.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3405
diff changeset
   283
                        superNm := cls superclass name.
989191014bcd Added new check to ProjectChecker.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3405
diff changeset
   284
                        superDef classNamesAndAttributesDo:[:clsnm2 :attributes2|
989191014bcd Added new check to ProjectChecker.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3405
diff changeset
   285
                            clsnm2 == superNm ifTrue:[
989191014bcd Added new check to ProjectChecker.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3405
diff changeset
   286
                                (attributes2 includes: #autoload) ifTrue:[
989191014bcd Added new check to ProjectChecker.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3405
diff changeset
   287
                                    problems add:
989191014bcd Added new check to ProjectChecker.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3405
diff changeset
   288
                                        (ProjectProblem newClassIsCompiledButSuperclassIsAutoloaded
989191014bcd Added new check to ProjectChecker.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3405
diff changeset
   289
                                            package: package;
989191014bcd Added new check to ProjectChecker.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3405
diff changeset
   290
                                            className: clsnm;
989191014bcd Added new check to ProjectChecker.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3405
diff changeset
   291
                                            yourself)
989191014bcd Added new check to ProjectChecker.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3405
diff changeset
   292
                                ].
3405
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   293
                            ].
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   294
                        ].
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   295
                    ]
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   296
                ].
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   297
            ].
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   298
        ].
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   299
    ].
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   300
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   301
    "Created: / 20-09-2013 / 11:08:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3407
989191014bcd Added new check to ProjectChecker.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3405
diff changeset
   302
    "Modified: / 05-10-2013 / 12:45:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3405
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   303
!
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   304
2910
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   305
checkClassesForMethodsInNoProject:classesToCheck 
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   306
    | checker |
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   307
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   308
    checker := [:cls | 
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   309
        cls 
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   310
            selectorsAndMethodsDo:[:sel :mth | 
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   311
                (mth package isNil or:[ mth package == PackageId noProjectID ]) ifTrue:[
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   312
                    "Sigh, special hack for Expecco"
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   313
                    ((cls name = 'Expecco::AbstractApplication class' and:[ sel = 'flags' ]) or:[
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   314
                     (cls name = 'Expecco::Browser class' and:[ sel = 'flags' ])]) ifFalse:[
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   315
                        self addProblem:(ProjectProblem newMethodInNoPackage className:cls name
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   316
                                    selector:sel).
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   317
                    ]
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   318
                ]
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   319
            ]
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   320
    ].
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   321
    classesToCheck do:[:class | 
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   322
        checker value:class theMetaclass.
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   323
        checker value:class theNonMetaclass.
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   324
    ]
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   325
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   326
    "Created: / 13-02-2012 / 18:18:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   327
!
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   328
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   329
checkClassesForNonQualifiedSharedPools: classesToCheck 
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   330
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   331
    classesToCheck do:[:cls|
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   332
        cls sharedPoolNames do:[:poolName|
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   333
            (Smalltalk at: poolName asSymbol) isNil ifTrue:[
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   334
                | ns |
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   335
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   336
                ns := cls nameSpace.
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   337
                (ns ~~ Smalltalk and:[(ns at: poolName asSymbol) notNil]) ifTrue:[
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   338
                    self addProblem:
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   339
                        (ProjectProblem newClassUsesPoolButItIsNotASharedPool
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   340
                                className: cls name;
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   341
                                poolName: poolName)
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   342
                ]
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   343
            ]
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   344
        ]
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   345
    ].
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   346
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   347
    "Created: / 13-09-2012 / 16:34:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   348
!
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   349
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   350
checkClassesListedInProjectDefinition: classesToCheck
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   351
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   352
    | classNamesListed |
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   353
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   354
    classNamesListed := packageDef classNames.
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   355
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   356
    classesToCheck do:[:class|
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   357
        (class isPrivate not and:[(classNamesListed includes: class name) not]) ifTrue:[
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   358
            self addProblem: 
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   359
                (ProjectProblem newClassNotListed className: class name).
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   360
        ]
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   361
    ].
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   362
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   363
    "Created: / 13-02-2012 / 18:18:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   364
!
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   365
2718
vrany
parents: 2716
diff changeset
   366
checkExtensionsListConsistency
vrany
parents: 2716
diff changeset
   367
    "Checks whether all extensions listed in #extensionMethodNames are present
vrany
parents: 2716
diff changeset
   368
    and if all extension methods are listed"
vrany
parents: 2716
diff changeset
   369
vrany
parents: 2716
diff changeset
   370
    | extensionsListed extensionsPresent |
vrany
parents: 2716
diff changeset
   371
vrany
parents: 2716
diff changeset
   372
    extensionsListed := OrderedCollection new.
vrany
parents: 2716
diff changeset
   373
    packageDef extensionMethodNames pairWiseDo:[:cls :sel|
vrany
parents: 2716
diff changeset
   374
        extensionsListed add: (Array with: cls with: sel)
vrany
parents: 2716
diff changeset
   375
    ].
vrany
parents: 2716
diff changeset
   376
    extensionsPresent := OrderedCollection new.
vrany
parents: 2716
diff changeset
   377
    packageDef searchForExtensions do:[:each|
2910
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   378
        "JV@2012-09-07: Do not take Java methods into an account, they
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   379
         should not be listed in extensionMethodNames.
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   380
         They are loaded lazily by JavaClassReader and if listed here,
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   381
         they would cause an error if the package is loaded from source.
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   382
         Sort of a HACK, indeed"
3206
d720d5883a49 Fix in ProjectChecker>>checkExtensionsListConsistency.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3158
diff changeset
   383
        each mclass theNonMetaclass isJavaClass ifFalse:[
2910
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   384
            extensionsPresent add: (Array with: each mclass name with: each selector)
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   385
        ].
2718
vrany
parents: 2716
diff changeset
   386
    ].
vrany
parents: 2716
diff changeset
   387
vrany
parents: 2716
diff changeset
   388
    (extensionsListed \ extensionsPresent) do:[:clsAndSel|
3167
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   389
        |cls clsName selector|
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   390
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   391
        clsName := clsAndSel first.
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   392
        selector := clsAndSel second.
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   393
        (cls := Smalltalk classNamed: clsName) isNil ifTrue:[
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   394
            self addProblem: 
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   395
                (ProjectProblem newExtensionMethodsClassDoesNotExist
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   396
                    className: clsName selector: selector).                            
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   397
        ] ifFalse:[
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   398
            (cls compiledMethodAt:selector) isNil ifTrue:[
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   399
                self addProblem: 
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   400
                    (ProjectProblem newExtensionMethodListedButDoesNotExist
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   401
                        className: clsName selector: selector). 
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   402
            ] ifFalse:[
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   403
                self addProblem: 
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   404
                    (ProjectProblem newExtensionMethodListedButInDifferentPackage
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   405
                        className: clsName selector: selector). 
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   406
            ]
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   407
        ]
2718
vrany
parents: 2716
diff changeset
   408
    ].
vrany
parents: 2716
diff changeset
   409
vrany
parents: 2716
diff changeset
   410
    (extensionsPresent \ extensionsListed) do:[:clsAndSel|
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   411
         self addProblem: 
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   412
            (ProjectProblem newExtensionMethodNotListed
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   413
                className: clsAndSel first selector: clsAndSel second).                            
2718
vrany
parents: 2716
diff changeset
   414
    ].
vrany
parents: 2716
diff changeset
   415
vrany
parents: 2716
diff changeset
   416
    "Created: / 12-01-2012 / 12:31:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3206
d720d5883a49 Fix in ProjectChecker>>checkExtensionsListConsistency.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3158
diff changeset
   417
    "Modified: / 29-03-2013 / 19:41:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2718
vrany
parents: 2716
diff changeset
   418
!
vrany
parents: 2716
diff changeset
   419
vrany
parents: 2716
diff changeset
   420
checkExtensionsPrerequisites
vrany
parents: 2716
diff changeset
   421
    "Checks whether packages of all extensions method classes are listed
vrany
parents: 2716
diff changeset
   422
     in package prerequisites"
vrany
parents: 2716
diff changeset
   423
3116
9ddba2316fec class: ProjectChecker
Stefan Vogel <sv@exept.de>
parents: 2976
diff changeset
   424
    |preRequisites|
9ddba2316fec class: ProjectChecker
Stefan Vogel <sv@exept.de>
parents: 2976
diff changeset
   425
9ddba2316fec class: ProjectChecker
Stefan Vogel <sv@exept.de>
parents: 2976
diff changeset
   426
    preRequisites := packageDef effectivePreRequisites.
2718
vrany
parents: 2716
diff changeset
   427
    packageDef searchForExtensions do:[:mthd|
3116
9ddba2316fec class: ProjectChecker
Stefan Vogel <sv@exept.de>
parents: 2976
diff changeset
   428
        (preRequisites includes: mthd mclass package) ifFalse:[
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   429
"/            self problem: ('%3 required by extension method but not in prerequisites' bindWith: mthd mclass package)
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   430
"/                 description: ('An extension method %1>>%2 extends class in package %3 but the package is not listed in package''s prerequisited. This leads into missing methods and strange bugs when application is compiled and run!!' bindWith: mthd class with: mthd selector with: mthd class package)
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   431
"/                 severity: #error data: mthd
2718
vrany
parents: 2716
diff changeset
   432
         ].
vrany
parents: 2716
diff changeset
   433
    ]
vrany
parents: 2716
diff changeset
   434
vrany
parents: 2716
diff changeset
   435
    "Created: / 12-01-2012 / 12:41:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   436
!
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   437
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   438
checkMethodCodingStyle: method
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   439
    "Checks for various coding style violations such as 'self halt' or
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   440
     improper indentation :-)"
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   441
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   442
    "To be implemented"
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   443
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   444
    "Created: / 11-04-2012 / 12:38:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   445
!
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   446
3161
3f9f36f40778 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3148
diff changeset
   447
checkMethodSTCCompilability1: method into: problemIssue
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   448
    "Checks is the method can be compiled by STC based on Parser error/warnings"
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   449
3161
3f9f36f40778 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3148
diff changeset
   450
    | lang compiler |
3f9f36f40778 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3148
diff changeset
   451
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   452
    lang := method programmingLanguage.
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   453
    lang isSmalltalk ifFalse:[ ^ self ].
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   454
3161
3f9f36f40778 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3148
diff changeset
   455
    compiler := lang compilerClass new.
3f9f36f40778 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3148
diff changeset
   456
    compiler
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   457
        compile:method source
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   458
        forClass:method mclass
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   459
        inCategory:'others'
3161
3f9f36f40778 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3148
diff changeset
   460
        notifying:problemIssue
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   461
        install:false
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   462
        skipIfSame:false
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   463
        silent:false
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   464
        foldConstants:true
3161
3f9f36f40778 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3148
diff changeset
   465
        ifFail:[ ].
3f9f36f40778 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3148
diff changeset
   466
3f9f36f40778 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3148
diff changeset
   467
    compiler usedGlobals do:[:nm | 
3f9f36f40778 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3148
diff changeset
   468
        (nm startsWith:Smalltalk undeclaredPrefix) ifTrue:[
3f9f36f40778 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3148
diff changeset
   469
            problemIssue 
3f9f36f40778 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3148
diff changeset
   470
                addWarning:'Contains unresolved reference to: ',(nm copyFrom:(Smalltalk undeclaredPrefix size + 1))
3f9f36f40778 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3148
diff changeset
   471
                from:0 to:0
3f9f36f40778 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3148
diff changeset
   472
        ]
3f9f36f40778 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3148
diff changeset
   473
    ].
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   474
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   475
    "Created: / 11-04-2012 / 15:31:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   476
!
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   477
3161
3f9f36f40778 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3148
diff changeset
   478
checkMethodSTCCompilability2: method into: problemIssue
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   479
    "Checks is the method can be compiled by STC based on selected lint rules"
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   480
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   481
    "Not yet implemented"
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   482
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   483
    "Created: / 11-04-2012 / 15:54:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   484
!
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   485
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   486
checkMethodSTCCompilability: method
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   487
    "Checks is the method can be compiled by STC (since STC won't compile
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   488
     everything bytecode compiler/jit compiler does, sigh"
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   489
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   490
    | issue |
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   491
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   492
    "No need to check the method if the class is autoloaded"
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   493
    (packageDef autoloaded_classNames includes: method mclass theNonMetaclass name) ifTrue:[
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   494
        ^ self
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   495
    ].
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   496
    
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   497
    issue := ProjectProblem newMethodCompilabilityIssue.
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   498
    issue method: method.
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   499
    self checkMethodSTCCompilability1: method into: issue.
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   500
    self checkMethodSTCCompilability2: method into: issue.
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   501
    issue hasIssue ifTrue:[
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   502
        self addProblem: issue
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   503
    ]
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   504
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   505
    "Created: / 11-04-2012 / 12:37:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   506
!
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   507
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   508
checkMethodSourceCode: method
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   509
    "Checks, whether method's source code is both
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   510
     available and parseable. Return true if the code
2966
bf5ea36104cd Fix in #checkClassListConsistency - care about classes with nil superclass (Autoload/Object)
vrany
parents: 2965
diff changeset
   511
     is syntactically correct, false otherwise"
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   512
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   513
    | source |
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   514
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   515
    [    
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   516
        source := method source.
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   517
    ] on: Error do:[
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   518
        self addProblem:
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   519
            (ProjectProblem newMethodSourceNotAvailable method: method).
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   520
        ^false
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   521
    ].
2913
041df7e717bc changed: #checkMethodSourceCode:
vrany
parents: 2910
diff changeset
   522
    method programmingLanguage isSmalltalk ifFalse:[ ^ false ].
041df7e717bc changed: #checkMethodSourceCode:
vrany
parents: 2910
diff changeset
   523
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   524
    [
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   525
        (Parser parseMethod: method source) == #Error ifTrue:[
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   526
            self addProblem:
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   527
                (ProjectProblem newMethodSourceCorrupted method: method).
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   528
            ^false.
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   529
        ]
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   530
    ] on: Error do:[
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   531
        self addProblem:
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   532
            (ProjectProblem newMethodSourceCorrupted method: method).
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   533
        ^false.
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   534
    ].
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   535
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   536
    ^true
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   537
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   538
    "Created: / 11-04-2012 / 12:29:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   539
! !
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   540
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   541
!ProjectChecker methodsFor:'checks-private'!
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   542
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   543
checkClasses
2976
16589df4f00d class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 2967
diff changeset
   544
    |myPackage|
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   545
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   546
    classes notNil ifTrue:[
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   547
        self checkClasses: classes
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   548
    ] ifFalse:[
2976
16589df4f00d class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 2967
diff changeset
   549
        myPackage := self package.
16589df4f00d class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 2967
diff changeset
   550
        self checkClasses: (Smalltalk allClasses select:[:cls | (cls package = myPackage)]).
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   551
    ].
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   552
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   553
    "Created: / 11-01-2012 / 16:55:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   554
!
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   555
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   556
checkClasses: classesToCheck
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   557
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   558
    self checkClassesListedInProjectDefinition: classesToCheck.
2910
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   559
    self checkClassesForMethodsInNoProject:classesToCheck.
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   560
    self checkClassesForNonQualifiedSharedPools:classesToCheck.
3405
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   561
    self checkClassesAutoloadedSuperclasse:classesToCheck.
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   562
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   563
    "Created: / 13-02-2012 / 18:18:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3405
cec1fd1367ce New check in `ProjectChecker` for compiled classes with autoloaded superclasses.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3237
diff changeset
   564
    "Modified: / 20-09-2013 / 11:08:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   565
!
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   566
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   567
checkMethod: method
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   568
    (self checkMethodSourceCode: method) ifTrue:[
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   569
        "/OK, method's source is OK, perform further checks
3233
b80cfaa73cb4 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3167
diff changeset
   570
        "/ ActivityNotification raiseRequestWith:self errorString:'Checking stc compilability...'.
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   571
        self checkMethodSTCCompilability: method.
3233
b80cfaa73cb4 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3167
diff changeset
   572
        "/ ActivityNotification raiseRequestWith:self errorString:'Checking coding style...'.
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   573
        self checkMethodCodingStyle: method.
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   574
    ]
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   575
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   576
    "Created: / 11-04-2012 / 12:27:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   577
!
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   578
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   579
checkMethods
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   580
    methods notEmptyOrNil ifTrue:[
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   581
        self checkMethods: methods.
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   582
        ^self.
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   583
    ].
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   584
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   585
    self checkMethods:
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   586
        (Iterator on:[:whatToDo|
3233
b80cfaa73cb4 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3167
diff changeset
   587
            |classesToCheck myPackage|
b80cfaa73cb4 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3167
diff changeset
   588
b80cfaa73cb4 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3167
diff changeset
   589
            classes notNil ifTrue:[
b80cfaa73cb4 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3167
diff changeset
   590
                classesToCheck := classes
b80cfaa73cb4 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3167
diff changeset
   591
            ] ifFalse:[
b80cfaa73cb4 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3167
diff changeset
   592
                myPackage := self package.
b80cfaa73cb4 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3167
diff changeset
   593
                classesToCheck := (Smalltalk allClasses select:[:cls | (cls package = myPackage)]).
b80cfaa73cb4 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3167
diff changeset
   594
            ].
b80cfaa73cb4 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3167
diff changeset
   595
            classesToCheck do:[:cls|
b80cfaa73cb4 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3167
diff changeset
   596
                cls theNonMetaclass withAllPrivateClassesDo:[:eachClass |
b80cfaa73cb4 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3167
diff changeset
   597
                    ActivityNotification raiseRequestWith:self errorString:('Checking %1...' bindWith:eachClass name).
b80cfaa73cb4 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3167
diff changeset
   598
                    eachClass instAndClassSelectorsAndMethodsDo:[:s :m | 
3148
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   599
                        m package = package ifTrue:[
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   600
                            ((checkExtensionsOnly ? false) not
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   601
                            or:[ m package ~~ cls package "isExtension" ]) ifTrue:[
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   602
                                whatToDo value:m
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   603
                            ]
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   604
                        ]
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   605
                    ]
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   606
                ].
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   607
            ]
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   608
        ])
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   609
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   610
    "Created: / 11-01-2012 / 16:55:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   611
!
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   612
2853
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   613
checkMethods: methodsToCheck
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   614
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   615
    methodsToCheck do:[:m|self checkMethod: m].
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   616
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   617
    "Created: / 11-04-2012 / 12:16:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   618
!
b28d27ac2c67 Initial version of project checker
vrany
parents: 2797
diff changeset
   619
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   620
checkPackage
3148
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   621
    (checkExtensionsOnly ? false) ifFalse:[
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   622
        self checkClassListConsistency.
2a6c8e1b5f69 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3116
diff changeset
   623
    ].
2718
vrany
parents: 2716
diff changeset
   624
    self checkExtensionsListConsistency.
vrany
parents: 2716
diff changeset
   625
    self checkExtensionsPrerequisites.
vrany
parents: 2716
diff changeset
   626
2716
9a74597bcd4b Do not use annotations as stc crashes when compiling them
vrany
parents: 2707
diff changeset
   627
    "add more here..."
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   628
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   629
    "Created: / 11-01-2012 / 16:55:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   630
! !
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   631
2910
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   632
!ProjectChecker methodsFor:'initialization'!
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   633
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   634
initialize
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   635
    "Invoked when a new instance is created."
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   636
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   637
    "/ please change as required (and remove this comment)
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   638
    "/ package := nil.
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   639
    "/ packageDef := nil.
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   640
    "/ classes := nil.
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   641
    "/ methods := nil.
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   642
    problems := List new.
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   643
    "/ phase := nil.
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   644
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   645
    "/ super initialize.   -- commented since inherited method does nothing
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   646
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   647
    "Modified: / 13-09-2012 / 17:24:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   648
! !
b603824e85d5 - new checks to ensure class list consistency
vrany
parents: 2856
diff changeset
   649
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   650
!ProjectChecker methodsFor:'reporting'!
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   651
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   652
addProblem: aProjectProblem
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   653
    aProjectProblem package: self package.
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   654
    problems isNil ifTrue:[problems := OrderedCollection new].
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   655
    problems add: aProjectProblem
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   656
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   657
    "Created: / 23-02-2012 / 13:10:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2718
vrany
parents: 2716
diff changeset
   658
! !
vrany
parents: 2716
diff changeset
   659
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   660
!ProjectChecker class methodsFor:'documentation'!
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   661
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   662
version
3233
b80cfaa73cb4 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3167
diff changeset
   663
    ^ '$Header: /cvs/stx/stx/libbasic3/ProjectChecker.st,v 1.17 2013-04-26 09:46:15 cg Exp $'
3167
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   664
!
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   665
56a8d17b6987 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3161
diff changeset
   666
version_CVS
3233
b80cfaa73cb4 class: ProjectChecker
Claus Gittinger <cg@exept.de>
parents: 3167
diff changeset
   667
    ^ '$Header: /cvs/stx/stx/libbasic3/ProjectChecker.st,v 1.17 2013-04-26 09:46:15 cg Exp $'
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   668
!
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   669
3206
d720d5883a49 Fix in ProjectChecker>>checkExtensionsListConsistency.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3158
diff changeset
   670
version_HG
d720d5883a49 Fix in ProjectChecker>>checkExtensionsListConsistency.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3158
diff changeset
   671
d720d5883a49 Fix in ProjectChecker>>checkExtensionsListConsistency.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3158
diff changeset
   672
    ^ '$Changeset: <not expanded> $'
d720d5883a49 Fix in ProjectChecker>>checkExtensionsListConsistency.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3158
diff changeset
   673
!
d720d5883a49 Fix in ProjectChecker>>checkExtensionsListConsistency.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3158
diff changeset
   674
2797
ab7cc3e21a2b Updated from SVN
vrany
parents: 2718
diff changeset
   675
version_SVN
2966
bf5ea36104cd Fix in #checkClassListConsistency - care about classes with nil superclass (Autoload/Object)
vrany
parents: 2965
diff changeset
   676
    ^ '§Id: ProjectChecker.st 1971 2012-09-27 19:37:25Z vranyj1 §'
2707
68860a7700c2 initial checkin
vrany
parents:
diff changeset
   677
! !
3116
9ddba2316fec class: ProjectChecker
Stefan Vogel <sv@exept.de>
parents: 2976
diff changeset
   678