SystemChangeNotifier.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 03 Jun 2015 21:55:34 +0100
branchjv
changeset 18470 9e4db770f8f5
parent 18068 3e841ddcb18a
child 20579 9add81aadb7a
permissions -rw-r--r--
Optimize for fast-path in String >> at: Avoid jumps in String >> at: for common case the receiver is an instance of String and thus has no instance variables. Similar as fix 877a8f1b326d for Arrays.

"{ Package: 'stx:libbasic' }"

Object subclass:#SystemChangeNotifier
	instanceVariableNames:'silenceLevel'
	classVariableNames:'UniqueInstance'
	poolDictionaries:''
	category:'Kernel-Classes-Support'
!

!SystemChangeNotifier class methodsFor:'documentation'!

documentation
"
    For now, this implementation is mostly for squeak compatibility.
    However, in the future, we may move the change notification code from ClassDescription to here,
    to make things easier to understand, and classDescription a little bit more lightweight.
"
! !

!SystemChangeNotifier class methodsFor:'instance creation'!

uniqueInstance
    "I am a singleton"

    UniqueInstance isNil ifTrue: [UniqueInstance := self basicNew initialize].
    ^ UniqueInstance

    "
     UniqueInstance releaseAll.
     UniqueInstance := nil
    "
! !

!SystemChangeNotifier methodsFor:'change notifications'!

class: trait recategorizedFrom: oldCategory to:newCategory    
    "dummy for now - will write a change record eventually"
!

classAdded:aClass inCategory:aCategoryString
    "dummy for now - will write a change record eventually"
!

traitDefinitionChangedFrom:oldTrait to:newTrait
    "dummy for now - will write a change record eventually"
! !

!SystemChangeNotifier methodsFor:'initialization'!

initialize
    "/ eventSource := SystemEventManager new.
    silenceLevel := 0.
! !

!SystemChangeNotifier methodsFor:'public'!

doSilently: aBlock
    "Perform the block, and ensure that no system notification are broadcasted while doing so."

    |result|

    silenceLevel := silenceLevel + 1.
    [
        "/ temporary hack:
        Class withoutUpdatingChangesDo:[
            result := aBlock value
        ]
    ] ensure: [
        silenceLevel > 0 ifTrue: [
            silenceLevel := silenceLevel - 1
        ]
    ].
    ^ result.
!

isBroadcasting
    ^ silenceLevel = 0
!

noMoreNotificationsFor: aStakeHolder
    "dummy for now "
!

notify:aStakeHolder ofSystemChangesOfItem:anItemSymbol change: changeTypeSymbol using: changeMessage
    "dummy for now "
! !

!SystemChangeNotifier class methodsFor:'documentation'!

version_CVS
    ^ '$Header: /cvs/stx/stx/libbasic/SystemChangeNotifier.st,v 1.6 2013-06-23 22:23:09 cg Exp $'
! !