ConfigurableFeatures.st
author |
Jan Vrany <jan.vrany@labware.com> |
|
Wed, 22 Mar 2023 13:57:18 +0000 |
branch | jv |
changeset 25445 |
1623217d2268 |
parent 18120 |
e3a375d5f6a8
|
permissions |
-rw-r--r-- |
Cherry-picked OrderedCollection.st from 0b286fd51da7:
* d4c86d7c0bfc: #TUNING by stefan, Stefan Vogel <sv@exept.de>
* 692b6497a669: #DOCUMENTATION by stefan, Stefan Vogel <sv@exept.de>
* d47bb2912953: #DOCUMENTATION by stefan, Stefan Vogel <sv@exept.de>
* abb4316c6bff: #FEATURE by cg, Claus Gittinger <cg@exept.de>
* 3a8fce0e8d11: #TUNING by stefan, Stefan Vogel <sv@exept.de>
* 03d29bf8c5bb: #REFACTORING by stefan, Stefan Vogel <sv@exept.de>
* cccc6c4abcfc: #REFACTORING by stefan, Stefan Vogel <sv@exept.de>
* 35d957c7a840: #FEATURE by cg, Claus Gittinger <cg@exept.de>
* 6b11890f5f2c: #OTHER by cg, Claus Gittinger <cg@exept.de>
* abb6108fb06b: #FEATURE by cg, Claus Gittinger <cg@exept.de>
* 2c4768bb2e89: #FEATURE by cg, Claus Gittinger <cg@exept.de>
* 4029e964d0f1: #FEATURE by cg, Claus Gittinger <cg@exept.de>
* ddcab3a9c2df: #OTHER by cg, Claus Gittinger <cg@exept.de>
* 2213eb56e0c7: #REFACTORING by exept, Claus Gittinger <cg@exept.de>
* 09ca874a6160: #REFACTORING by exept, Claus Gittinger <cg@exept.de>
* 30b332af1f33: #BUGFIX by stefan, Stefan Vogel <sv@exept.de>
* 779764ba117b: #REFACTORING by cg, Claus Gittinger <cg@exept.de>
* b3d232a613c9: #BUGFIX by stefan, Stefan Vogel <sv@exept.de>
* c417f7edaec1: #BUGFIX by stefan, Stefan Vogel <sv@exept.de>
* 904b6538f379: #FEATURE by exept, Claus Gittinger <cg@exept.de>
* c5887f03e01f: #REFACTORING by stefan, Stefan Vogel <sv@exept.de>
* 8912d03aff48: #BUGFIX by exept, Claus Gittinger <cg@exept.de>
* de5cd1dab4c3: #DOCUMENTATION by exept, Claus Gittinger <cg@exept.de>
* 9bbd26603378: #OTHER by exept, Claus Gittinger <cg@exept.de>
* c2c9dc110f42: #FEATURE by stefan, Stefan Vogel <sv@exept.de>
* 81d123c6703d: #DOCUMENTATION by stefan, Stefan Vogel <sv@exept.de>
* 8aadbb21458a: #BUGFIX by stefan, Stefan Vogel <sv@exept.de>
* f210dbb8b2f6: #TUNING by stefan, Stefan Vogel <sv@exept.de>
* c2c774fc53c0: #FEATURE by exept, Claus Gittinger <cg@exept.de>
* b6f462670875: #DOCUMENTATION by exept, Claus Gittinger <cg@exept.de>
* 27ae4021d5d6: #FEATURE by stefan, Stefan Vogel <sv@exept.de>
* 10d9e9d85594: #TUNING by exept, Claus Gittinger <cg@exept.de>
* 2653d855dcc7: #DOCUMENTATION by exept, Claus Gittinger <cg@exept.de>
* 6ea1698a1a34: #FEATURE by stefan, Stefan Vogel <sv@exept.de>
* 28762315e664: #OTHER by exept, Claus Gittinger <cg@exept.de>
* 7142ea786f3e: #TUNING by stefan, Stefan Vogel <sv@exept.de>
* 7875acb42b53: #BUGFIX by stefan, Stefan Vogel <sv@exept.de>
* 163a0eebc97e: #BUGFIX by Maren, matilk
"{ Package: 'stx:libbasic' }"
Object subclass:#ConfigurableFeatures
instanceVariableNames:''
classVariableNames:'LoadedFeatures'
poolDictionaries:''
category:'System-Support'
!
!ConfigurableFeatures class methodsFor:'documentation'!
documentation
"
being tired of finding '(Smalltalk at:someClass) notNil' all over the place,
start to concentrate feature queries to this single class, which might get more
feature methods via extensions.
Thus, to correctly ask for a feature being present, use:
ConfigurableFeature includesFeature:featureName
or
ConfigurableFeatures knownFeatures
to ask for a list of features.
Caveat: just started; more will be moved to this place as time goes by
"
! !
!ConfigurableFeatures class methodsFor:'initialization'!
initialize
"Invoked at system start or when the class is dynamically loaded."
"/ please change as required (and remove this comment)
LoadedFeatures := Dictionary new
"Modified: / 01-12-2014 / 11:16:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!ConfigurableFeatures class methodsFor:'queries'!
allFeatures
"a list of features which are present in that smalltalk configuration"
^ self knownFeatures select:[:each | self includesFeature:each]
"
ConfigurableFeatures allFeatures
"
"Created: / 07-09-2011 / 10:50:31 / cg"
!
includesFeature:featureName
|querySelector|
querySelector := ('has',featureName asUppercaseFirst) asSymbol.
^ self perform:querySelector ifNotUnderstood:false.
"
ConfigurableFeatures includesFeature:#SubversionSupport
"
"Created: / 07-09-2011 / 10:49:08 / cg"
!
knownFeatures
"a list of known features; some of them might not be present in that smalltalk configuration"
^ self class methodDictionary keys
collect:[:each |
(each startsWith:'has') ifTrue:[
(each endsWith:':') ifFalse:[
each copyFrom:4
]
] ifFalse:[
nil
].
]
thenSelect:[:nm | nm notNil]
"
ConfigurableFeatures allFeatures
"
"Created: / 07-09-2011 / 10:51:26 / cg"
! !
!ConfigurableFeatures class methodsFor:'queries-features'!
hasCVSSupport
"/ use Smalltalk-at to trick the dependency/prerequisite generator
^ (Smalltalk at: #'CVSSourceCodeManager' ifAbsent:nil) notNil
"
ConfigurableFeatures hasCVSSupport
"
"Created: / 03-01-2012 / 15:36:54 / cg"
!
hasCVSSupportEnabled
^ self hasSCMSupportEnabledFor:#'CVSSourceCodeManager'
"Created: / 03-01-2012 / 15:42:16 / cg"
!
hasDataBaseSourceCodeManagerSupport
"/ use Smalltalk-at to trick the dependency/prerequisite generator
^ (Smalltalk at: #'DataBaseSourceCodeManager' ifAbsent:nil) notNil
"
ConfigurableFeatures hasDataBaseSourceCodeManagerSupport
"
"Created: / 03-01-2012 / 15:36:03 / cg"
!
hasDataBaseSourceCodeManagerSupportEnabled
^ self hasSCMSupportEnabledFor:#'DataBaseSourceCodeManager'
"Created: / 03-01-2012 / 15:36:12 / cg"
!
hasExternalLookupSupport
"Return true, if the VM is compiled with external lookup MOP"
%{
#ifdef SUPPORT_EXTERNAL_LOOKUP
RETURN ( true );
#endif
%}.
^false
"
ConfigurableFeatures hasExternalLookupSupport
ConfigurableFeatures includesFeature:#ExternalLookupSupport
"
"Created: / 16-04-2012 / 20:00:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
hasFileBasedSourceCodeManagerSupport
"/ use Smalltalk-at to trick the dependency/prerequisite generator
^ (Smalltalk at: #'FileBasedSourceCodeManager' ifAbsent:nil) notNil
"
ConfigurableFeatures hasFileBasedSourceCodeManagerSupport
"
"Created: / 21-12-2011 / 17:07:21 / cg"
!
hasFileBasedSourceCodeManagerSupportEnabled
^ self hasSCMSupportEnabledFor:#'FileBasedSourceCodeManager'
"Created: / 21-12-2011 / 17:07:08 / cg"
!
hasGitSupport
"/ use Smalltalk-at to trick the dependency/prerequisite generator
^ (Smalltalk at: #'GitSourceCodeManager' ifAbsent:nil) notNil
"
ConfigurableFeatures hasGitSupport
"
"Created: / 23-07-2012 / 13:37:09 / cg"
!
hasGitSupportEnabled
^ self hasSCMSupportEnabledFor:#'GitSourceCodeManager'
"
self hasGitSupportEnabled
"
"Created: / 23-07-2012 / 13:37:17 / cg"
!
hasMercurialSupport
"/ use Smalltalk-at to trick the dependency/prerequisite generator
^ (Smalltalk at: #'MercurialSourceCodeManager' ifAbsent:nil) notNil
"
ConfigurableFeatures hasMercurialSupport
"
"Created: / 18-01-2012 / 10:58:07 / cg"
!
hasMercurialSupportEnabled
^ self hasSCMSupportEnabledFor:#'MercurialSourceCodeManager'
"
self hasMercurialSupportEnabled
"
"Created: / 18-01-2012 / 10:58:12 / cg"
!
hasMonticelloSupport
"/ use Smalltalk-at to trick the dependency/prerequisite generator
^ (Smalltalk at: #'MonticelloSourceCodeManager' ifAbsent:nil) notNil
"
ConfigurableFeatures hasMonticelloSupport
"
"Created: / 03-01-2012 / 15:44:32 / cg"
!
hasMonticelloSupportEnabled
^ self hasSCMSupportEnabledFor:#'MonticelloSourceCodeManager'
"Created: / 03-01-2012 / 15:44:39 / cg"
!
hasPerforceSupport
"/ use Smalltalk-at to trick the dependency/prerequisite generator
^ (Smalltalk at: #'PerforceSourceCodeManager' ifAbsent:nil) notNil
"
ConfigurableFeatures hasPerforceSupport
"
"Created: / 03-01-2012 / 15:43:42 / cg"
!
hasPerforceSupportEnabled
^ self hasSCMSupportEnabledFor:#'PerforceSourceCodeManager'
"Created: / 03-01-2012 / 15:43:28 / cg"
!
hasRefactoryBrowser
"Return true, if refactory browser support is available"
(LoadedFeatures includesKey: #RefactoryBrowser) ifFalse:[
"/ Called for the very first time
#(
#'stx:goodies/refactoryBrowser/browser'
#'stx:goodies/refactoryBrowser/changes'
#'stx:goodies/refactoryBrowser/helpers'
#'stx:goodies/refactoryBrowser/lint'
#'stx:goodies/refactoryBrowser/parser'
#'stx:goodies/refactoryBrowser/refactoring'
) do:[:each |
(ProjectDefinition definitionClassForPackage: each) isNil ifTrue:[
| loaded |
loaded := [ Smalltalk loadPackage: each ] on: PackageLoadError do:[ false ].
loaded ifFalse:[
LoadedFeatures at: #RefactoryBrowser put: false.
^ false.
].
]
].
LoadedFeatures at: #RefactoryBrowser put: true.
^ true
].
^ LoadedFeatures includesKey: #RefactoryBrowser
"
ConfigurableFeatures includesFeature: #RefactoryBrowser
"
"Created: / 01-12-2014 / 11:16:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
hasSCMSupportEnabledFor:aSourceCodeManagerClassName
|scm|
"/ use Smalltalk-at to trick the dependency/prerequisite generator
scm := Smalltalk at:aSourceCodeManagerClassName ifAbsent:nil.
^ scm notNil
and:[ scm isLoaded
and:[ scm shownInBrowserMenus ]]
"Created: / 18-01-2012 / 10:55:58 / cg"
!
hasSubversionSupport
"/ use Smalltalk-at to trick the dependency/prerequisite generator
^ (Smalltalk at: #'SVNSourceCodeManager' ifAbsent:nil) notNil
"
ConfigurableFeatures hasSubversionSupport
"
"Created: / 07-09-2011 / 10:40:40 / cg"
"Modified: / 13-03-2012 / 17:19:13 / Jan Vrany <jan.vrany.fit.cvut.cz>"
!
hasSubversionSupportEnabled
^ self hasSCMSupportEnabledFor:#'SVNSourceCodeManager'
"Created: / 07-09-2011 / 10:41:33 / cg"
! !
!ConfigurableFeatures class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/libbasic/ConfigurableFeatures.st,v 1.11 2014-12-01 11:24:54 vrany Exp $'
!
version_CVS
^ '$Header: /cvs/stx/stx/libbasic/ConfigurableFeatures.st,v 1.11 2014-12-01 11:24:54 vrany Exp $'
! !
ConfigurableFeatures initialize!