JavaClassRegistry.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Sat, 16 Aug 2014 08:13:09 +0100
changeset 3235 6a5d85f29c3a
parent 3217 261bad2a9657
child 3244 0a8b9f03ffa5
permissions -rw-r--r--
Fixes for reloading - when class is reloaded, all cached values in corresponding java.lang.Class object have to be invalidated. Otherwise recompilation won't help as reflective environment will still see old (invalid or incomplete) values. - correctly handle multiple version in GETFIELD/PUTFIELD
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
 COPYRIGHT (c) 1996-2011 by Claus Gittinger
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
 New code and modifications done at SWING Research Group [1]:
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
 COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
                            SWING Research Group, Czech Technical University in Prague
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
 This software is furnished under a license and may be used
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
 only in accordance with the terms of that license and with the
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
 inclusion of the above copyright notice.   This software may not
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
 be provided or otherwise made available to, or used by, any
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
 other person.  No title to or ownership of the software is
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
 hereby transferred.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
 [1] Code written at SWING Research Group contains a signature
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
     of one of the above copright owners. For exact set of such code,
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
     see the differences between this version and version stx:libjava
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
     as of 1.9.2010
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
"{ Package: 'stx:libjava' }"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
3072
f22d5febda61 Introduced a JavaClassEnvironment - an abstract namespace-like class to keep Java classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3067
diff changeset
    23
JavaClassEnvironment subclass:#JavaClassRegistry
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
    24
	instanceVariableNames:'vm loaders notifier lock'
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
	classVariableNames:''
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
	poolDictionaries:'JavaVMData'
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
	category:'Languages-Java-Support'
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
!JavaClassRegistry class methodsFor:'documentation'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
copyright
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
 COPYRIGHT (c) 1996-2011 by Claus Gittinger
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
 New code and modifications done at SWING Research Group [1]:
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
 COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
                            SWING Research Group, Czech Technical University in Prague
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
 This software is furnished under a license and may be used
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
 only in accordance with the terms of that license and with the
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
 inclusion of the above copyright notice.   This software may not
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
 be provided or otherwise made available to, or used by, any
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
 other person.  No title to or ownership of the software is
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
 hereby transferred.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
 [1] Code written at SWING Research Group contains a signature
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
     of one of the above copright owners. For exact set of such code,
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
     see the differences between this version and version stx:libjava
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
     as of 1.9.2010
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
!JavaClassRegistry class methodsFor:'instance creation'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
for: aJavaVM
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
    ^self new setVM: aJavaVM.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
    "Created: / 21-12-2010 / 19:42:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
new
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
    ^ self basicNew initialize.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
    "Modified (format): / 30-10-2011 / 12:07:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
2578
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    72
!JavaClassRegistry class methodsFor:'others'!
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    73
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    74
version_HG
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    75
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    76
    ^ '$Changeset: <not expanded> $'
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    77
! !
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    78
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
!JavaClassRegistry methodsFor:'accessing'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
    81
classForName: className loader: classLoader ifAbsent: aBlock
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
    "Get class loaded by given classLoader from registry or evaluate aBlock if class is not yet registered"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
    | classes class |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
    self assert: (className includes: $.) not.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
    "Classes loaded by primordial classloader are always
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
     used"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
    classLoader notNil ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
        classes := loaders at: nil ifAbsent: nil.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
        class := classes at: className ifAbsent: nil.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
        class notNil ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
            ^class.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
        ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
    "No bootstrap class found, search given classloader"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
    classes := loaders at: classLoader ifAbsent: [^aBlock value].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
    ^classes at: className ifAbsent: aBlock
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
    "Modified: / 21-10-2011 / 12:39:04 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
    "Created: / 23-10-2011 / 11:40:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   107
classForName: className loader: classLoader ifAbsentPut: block
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
    "Get class loaded by classLoader from registry. if absent block is evaluated and resulting class in registered in registry, "
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   109
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   110
    | class synchronizer |
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   111
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
    self assert: (className includes: $.) not.
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   113
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   114
    "/ Temporary workaround for race-condition when multiple threads are
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   115
    "/ loading same class. Note that ClassLoader.loadClass() / loadClassInternal()
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   116
    "/ is itself sychronized so we have to synchronize iff and only iff
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   117
    "/ we're loading for primordial class loader. If we synchronize
3066
8c0339f8c175 Fixes for groovy.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2966
diff changeset
   118
    "/ even on non-primordial loaders, we risk a deadlock. Very hacky...
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   119
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   120
    synchronizer := classLoader isNil
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   121
                        ifTrue:[ [:whatToDo | lock critical: whatToDo ] ]
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   122
                        ifFalse:[ [:whatToDo | whatToDo value ] ].
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   123
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   124
    synchronizer value:[
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   125
        "If class is already registered with the same cl, just return it"
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   126
        class := self classNamed: className loader: classLoader.
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   127
        class isNil ifTrue:[
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   128
            "Otherwise evaluate block"
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   129
            class := block value.
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   130
            (class notNil and:[classLoader isNil]) ifTrue: [ self registerClass: class ].
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   131
        ].
3066
8c0339f8c175 Fixes for groovy.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2966
diff changeset
   132
    ].
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   133
    ^ class
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
    "Created: / 21-10-2011 / 12:00:30 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
    "Created: / 23-10-2011 / 11:36:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
    "Modified: / 02-11-2011 / 17:29:20 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   138
    "Modified: / 11-08-2014 / 01:23:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
classNamed: className
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   143
    "Return a class for given classname loaded by 'current classloader' or
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
     nil if not yet loaded"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
    ^self classNamed: className loader: JavaClassReader classLoaderQuerySignal query
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
    "Created: / 23-10-2011 / 12:23:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
classNamed: className loader: classLoader
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   153
    "Return a class for given classname loaded by given classloader or
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
     nil if not yet loaded"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
    ^self classForName: className loader: classLoader ifAbsent:[nil].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
    "Created: / 23-10-2011 / 12:23:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
classes
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
3067
4bbacafb9592 Renamed JavaClassRegistry>>classesDo: to allClassesDo:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3066
diff changeset
   163
    ^Iterator on:[:whatToDo|self allClassesDo: whatToDo]
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
    "Created: / 23-10-2011 / 20:14:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3067
4bbacafb9592 Renamed JavaClassRegistry>>classesDo: to allClassesDo:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3066
diff changeset
   166
    "Modified: / 09-04-2014 / 18:43:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
systemPackage: syspkg
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
    "Return name (as string) of system package named syspkg or nil if no such package is loaded"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
    | classes syspkgSlashed |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
    classes := loaders at: nil ifAbsent:[nil].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
    classes isEmptyOrNil ifTrue:[ ^ #() ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
    syspkgSlashed := syspkg copyReplaceAll: $. with: $/.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
    classes keysDo:[:name|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
        (name startsWith:syspkgSlashed) ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
            ^ syspkg
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
        ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
    ^ nil
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
    "Created: / 16-08-2012 / 17:40:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
systemPackages
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
    "Return a collection system packages (as smalltalk strings) currently loaded"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
    | classes syspkgs |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
    classes := loaders at: nil ifAbsent:[nil].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
    classes isEmptyOrNil ifTrue:[ ^ #() ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
    syspkgs := Set new.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
    classes keysDo:[:name|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
        | slashpos |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
        slashpos := name lastIndexOf: $/.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
        slashpos ~~ 0 ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
            | syspkg |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
            syspkg := name copyTo: slashpos - 1.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
            syspkg replaceAll: $/ with: $..
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   204
            syspkgs add: syspkg.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
        ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
    ^syspkgs
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
    "Created: / 16-08-2012 / 17:32:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
!JavaClassRegistry methodsFor:'class loading'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   214
loadFile: aFilename
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
    "reads a class from aFilename, installs and returns it."
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   216
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
    | aClass |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
    self breakPoint: #mh.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
    aClass := JavaClassReader readFile: aFilename ignoring: Set new.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
    aClass isJavaClass ifFalse:[self breakPoint:#mh].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
    self registerClass: aClass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
    ^ aClass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
    "Created: / 15-04-1996 / 14:58:53 / cg"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
    "Modified: / 12-05-1998 / 22:06:52 / cg"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
    "Modified: / 23-10-2011 / 11:55:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   230
loadStream: javaClassDataStream loader: aJavaClassLoader
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
    "reads a class from aStream and returns it.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
     The JavaClass is installed as global.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
     If new classes are required to be loaded, aClassLoader is
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
     asked to do it."
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   235
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
    | javaClass |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
    self breakPoint: #mh.
2578
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   239
    self breakPoint: #jv.
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   240
    javaClass := JavaClassReader readStream: javaClassDataStream loader: aJavaClassLoader.
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   241
    javaClass isNil ifTrue: [
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   242
            Logger
2578
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   243
                log: 'JavaClassReader was not able to read given data stream'
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   244
                severity: #warn
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   245
                facility: #JVM.
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   246
            self breakPoint: #mh.
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   247
            ^ nil.
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
        ].
2578
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   249
    javaClass isJavaClass ifFalse: [ self breakPoint: #mh. ].
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   250
    javaClass classLoader: aJavaClassLoader.
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   251
    self registerClass: javaClass.
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
    ^ javaClass
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
2578
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   254
    "Modified: / 02-05-2013 / 09:55:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
!JavaClassRegistry methodsFor:'enumerating'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
3067
4bbacafb9592 Renamed JavaClassRegistry>>classesDo: to allClassesDo:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3066
diff changeset
   259
allClassesDo: aBlock
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
    loaders do:[:classes|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
        classes do:[:class|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
            aBlock value: class
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   264
        ]
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   265
    ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   266
3067
4bbacafb9592 Renamed JavaClassRegistry>>classesDo: to allClassesDo:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3066
diff changeset
   267
    "Created: / 09-04-2014 / 18:43:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   269
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   270
!JavaClassRegistry methodsFor:'helpers'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   271
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   272
addClassLoader: aJavaClassLoader
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   273
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   274
loaders at: aJavaClassLoader put: Dictionary new.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   275
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   276
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   277
getClassesDefinedBy:classLoader
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   278
    ^loaders at: classLoader ifAbsent: [nil].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   279
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   280
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   281
!JavaClassRegistry methodsFor:'initialization'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   282
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   283
flush
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   284
2952
ff6465e92d95 Flush JavaClassRegistry's notifier when flushing classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2948
diff changeset
   285
    notifier stopAndRemoveAll.
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   286
    self initialize.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   287
2952
ff6465e92d95 Flush JavaClassRegistry's notifier when flushing classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2948
diff changeset
   288
    "Modified: / 30-11-2013 / 07:03:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   289
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   290
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   291
initialize
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   292
    loaders := WeakIdentityDictionary new.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   293
    loaders at: nil put: Dictionary new.
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   294
    notifier := BackgroundQueueProcessingJob
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   295
                    named: 'Java class registry notifier'
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
                    on:[:typeAndClass|Smalltalk changed: typeAndClass first with: typeAndClass second].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297
    notifier priority: Processor userBackgroundPriority - 1.
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   298
    lock := RecursionLock new.
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   299
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   300
    "Modified (format): / 22-11-2013 / 11:08:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   301
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   302
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   303
setVM: aJavaVM
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   304
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   305
    "Now, aJavaVM == JavaVM (i.e, the class JavaVM
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   306
    itself, not its instance)"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   307
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   308
    vm := aJavaVM.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   309
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   310
    "Created: / 21-12-2010 / 19:44:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   311
    "Modified (format): / 07-02-2013 / 17:36:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   312
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   313
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   314
!JavaClassRegistry methodsFor:'registering'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   315
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   316
registerClass: newClass
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   317
    | classes oldClass |
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   318
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   319
    ((newClass binaryName == #'$do$It$')
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   320
        and:[newClass superclass binaryName == #'groovy/lang/Script']) ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   321
        "/ Mhhh...Groovy do-it. No need to register this!!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   322
        ^ self
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   323
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   324
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   325
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   326
    self assert: (newClass binaryName includes: $.) not.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   327
    loaders keysAndValuesDo:[:loader :classesPerLoader|
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   328
        (classesPerLoader includesKey: newClass binaryName) ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   329
            loader == newClass classLoader ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   330
                (oldClass := classesPerLoader at: newClass binaryName) ~~ newClass ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   331
                    "Class already exists, reload & reinstall"
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   332
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   333
                    | reloadedClass |
3235
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   334
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   335
                    self registerClassRedefined: oldClass.  
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   336
                    reloadedClass := JavaClassReloader reload: oldClass with: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   337
                    "/OK, full reload, not just method dictionary update"
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   338
                    reloadedClass ~~ oldClass ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   339
                        "/ Remove old class from classloader...
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   340
                        self unregisterClassInClassLoader: oldClass.  
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   341
                        "/ ...from reflection cache....
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   342
                        JavaVM reflection removeJavaClassObjectForClass: oldClass.                 
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   343
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   344
                        classesPerLoader
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   345
                            at: newClass binaryName
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   346
                            put: reloadedClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   347
                        self registerClassInClassLoader: reloadedClass.  
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   348
                        self registerClassInSmalltalk: reloadedClass notify: false.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   349
                    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   350
                    Smalltalk changed: #classDefinition with: reloadedClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   351
                    ^self.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   352
                ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   353
            ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   354
        ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   355
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   356
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   357
    classes := loaders at: newClass classLoader ifAbsent: nil.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   358
    classes isNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   359
        classes := loaders at: newClass classLoader put: Dictionary new.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   360
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   361
    classes at: newClass binaryName  put: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   362
    newClass isJavaClass ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   363
        self registerClassInClassLoader: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   364
        "/ Register class in system dictionary so it can be browsed
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   365
        "/ by system browser
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   366
        self registerClassInSmalltalk: newClass notify: true.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   367
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   368
        "/ Also register builtin classes in JavaVMData
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   369
        newClass isBuiltInClass ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   370
            self assert: newClass classLoader isNil. "/must be loaded by primordial CL...
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   371
            self registerBuiltIn: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   372
        ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   373
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   374
    "/ There may be classes already loaded with compile errors.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   375
    "/ Try to recompile all erroneous classes that depends on this one...
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   376
    JavaCompiler notNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   377
       JavaCompiler recompileErroneousClassesReferringTo: newClass ignoring: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   378
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   379
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   380
    "Created: / 23-10-2011 / 11:53:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   381
    "Modified: / 02-11-2011 / 18:40:52 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
3235
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   382
    "Modified: / 15-08-2014 / 15:19:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   383
!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   384
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   385
registerClasses: classes
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   386
    classes do:[:cls|self registerClass: cls].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   387
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   388
    "Created: / 02-01-2013 / 17:01:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   389
!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   390
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   391
registerClasses: classes andWait: doWait
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   392
    "Register given set of classes and if
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   393
     `doWait` is true, wait until all pending notifications
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   394
     are delivered"
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   395
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   396
    classes do:[:cls|self registerClass: cls].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   397
    doWait ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   398
        notifier waitUntilProcessed.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   399
    ]
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   400
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   401
    "Created: / 04-08-2013 / 03:55:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   402
!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   403
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   404
unregisterClass: oldClass
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   405
    | classes |
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   406
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   407
    classes := loaders at: oldClass classLoader ifAbsent: nil.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   408
    classes notNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   409
        "/ Check if the class is there, it could be removed meanwhile...
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   410
        (classes includesKey: oldClass binaryName) ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   411
            "/ Now, invalidate references and unload all dependent clases
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   412
            "/ (JavaClassReloader will unload them by recursively call #unregisterClass:
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   413
            JavaClassReloader unload: oldClass.
3217
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   414
            "/ Now remove it from class registry...
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   415
            classes removeKey: oldClass binaryName.
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   416
            "/ ...from class loader...
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   417
            self unregisterClassInClassLoader: oldClass.  
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   418
            "/ ...from reflection cache....
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   419
            JavaVM reflection removeJavaClassObjectForClass: oldClass.
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   420
            "/ ...and from Smalltalk dictionary
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   421
            self unregisterClassInSmalltalk: oldClass notify: true.
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   422
        ]
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   423
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   424
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   425
    "Created: / 04-04-2012 / 02:43:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3217
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   426
    "Modified: / 11-08-2014 / 01:57:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   427
!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   428
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   429
unregisterClassLoader: aJavaClassLoader
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   430
    | classes |
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   431
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   432
    classes := loaders at: aJavaClassLoader ifAbsent:[ ^ self ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   433
    self unregisterClasses: classes values.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   434
    loaders removeKey: aJavaClassLoader.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   435
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   436
    "Created: / 16-12-2012 / 16:39:45 / Marcel Hlopko <marcel.hlopko@fit.cvut.cz>"
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   437
    "Modified: / 17-10-2013 / 10:37:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   438
!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   439
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   440
unregisterClasses: classes
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   441
    classes do:[:cls|self unregisterClass: cls].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   442
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   443
    "Created: / 02-01-2013 / 17:01:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   444
! !
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   445
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   446
!JavaClassRegistry methodsFor:'registering-private'!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   447
2618
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   448
registerBuiltIn: class
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   449
    | nm |
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   450
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   451
    nm := class binaryName.
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   452
    nm = #'java/lang/Object' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   453
        _java_lang_Object_CLASS := class.
2618
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   454
        ^self.
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   455
    ].
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   456
    nm = #'java/lang/System' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   457
        _java_lang_System_CLASS := class.
2618
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   458
        ^self.
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   459
    ].
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   460
    nm = #'java/lang/Class' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   461
        _java_lang_Class_CLASS := class.
2620
263045d15796 Initial support for generalized built-in class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2618
diff changeset
   462
        "/ Force load of other reflective classes. This saves us a nil check in
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   463
        "/ JavaMirror>>createMethod...
2620
263045d15796 Initial support for generalized built-in class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2618
diff changeset
   464
        #(#'java/lang/reflect/Constructor'  #'java/lang/reflect/Method' #'java/lang/reflect/Field') do:[:e|
263045d15796 Initial support for generalized built-in class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2618
diff changeset
   465
            vm classForName: e definedBy: nil.
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   466
        ].
2618
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   467
        ^self.
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   468
    ].
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   469
    nm = #'java/lang/reflect/Constructor' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   470
        _java_lang_reflect_Constructor_CLASS := class.
2620
263045d15796 Initial support for generalized built-in class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2618
diff changeset
   471
    ].
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   472
    nm = #'java/lang/reflect/Method' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   473
        _java_lang_reflect_Method_CLASS := class.
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   474
    ].
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   475
    nm = #'java/lang/reflect/Field' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   476
        _java_lang_reflect_Field_CLASS := class.
2620
263045d15796 Initial support for generalized built-in class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2618
diff changeset
   477
    ].
263045d15796 Initial support for generalized built-in class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2618
diff changeset
   478
2618
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   479
    "Created: / 22-05-2013 / 20:40:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   480
    "Modified: / 18-12-2013 / 13:03:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2618
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   481
!
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   482
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   483
registerClassInClassLoader: class
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   484
    "Registers class in it's classloader"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   485
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   486
    "/ OpenJDK java.class.ClassLoader keeps list of all loaded classes
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   487
    "/ in a field `classes`. This method adds the class to the list.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   488
    "/ For classes loaded by primordial class loader, `class classLoader1
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   489
    "/ returns nil.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   490
    class classLoader notNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   491
        class classLoader perform: #'addClass(Ljava/lang/Class;)V' with: (JavaVM reflection javaClassObjectForClass: class).  
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2553
diff changeset
   492
    ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   493
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   494
    "Created: / 11-08-2014 / 01:37:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   495
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   496
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   497
registerClassInSmalltalk: javaclass notify: doNotify
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   498
    "Registers class in Smalltalk system dictionary and
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   499
     notifies system, so the class become visible by
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   500
     Smalltalk"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   501
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   502
    | nameComponents accessor nsName nsNameAsSymbol ns  |
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   503
2526
ef415ed11871 Added JavaUnresolvedCompilationError.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2429
diff changeset
   504
    javaclass isSynthetic ifTrue:[ ^ self ].
2841
6fa1bcf9c997 JavaClass>>#name vs. #binaryName refactoring
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2734
diff changeset
   505
    nameComponents := javaclass binaryName asCollectionOfSubstringsSeparatedBy:$/.
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   506
    nameComponents size > 1 ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   507
        javaclass setCategory:((nameComponents asStringWith:$/ from:1 to:(nameComponents size - 1))
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   508
                            replaceAll:$/ with:$. ).
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2553
diff changeset
   509
    ] ifFalse:[
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2553
diff changeset
   510
        javaclass setCategory:#'(default)'
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   511
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   512
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   513
    nameComponents size > 1 ifTrue:[
2553
cacd370c2a15 Changed usage of deprecated #copyWithoutLast: to #copyButLast:
Stefan Vogel <sv@exept.de>
parents: 2437
diff changeset
   514
        javaclass setPackage:((nameComponents copyButLast:1) asStringWith:$/) asSymbol
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   515
    ] ifFalse:[
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2553
diff changeset
   516
        javaclass setPackage:#'java/(default)'
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   517
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   518
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   519
    "/ break up the package and create nameSpaces
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   520
    "/ for each package component.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   521
    "/ This allows java.foo.bar to be visible in ST/X
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   522
    "/ under the name JAVA::java::foo::bar
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   523
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   524
    accessor := javaclass"JavaClassAccessor fullName: aString".
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   525
    nsName := javaclass nameSpaceName.
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   526
    nsNameAsSymbol := nsName asSymbolIfInterned.
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   527
    (nsNameAsSymbol isNil or:[(ns := Smalltalk at: nsNameAsSymbol) isNil]) ifTrue:[
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   528
        Metaclass confirmationQuerySignal answer:false do:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   529
            Class withoutUpdatingChangesDo:[
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   530
                ns := JavaPackage fullName:(nsName contents).
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   531
            ].
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   532
        ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   533
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   534
    ns isNameSpace ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   535
        ns at:nameComponents last asSymbol put:accessor.
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2553
diff changeset
   536
        javaclass setEnvironment: ns.
2841
6fa1bcf9c997 JavaClass>>#name vs. #binaryName refactoring
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2734
diff changeset
   537
        javaclass setName: (nsName , '::' , nameComponents last) asSymbol
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   538
    ] ifFalse:[
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   539
        self breakPoint: #jv
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   540
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   541
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   542
    doNotify ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   543
        notifier add:(Array with: #newClass with: javaclass).
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   544
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   545
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   546
    "Created: / 04-04-2012 / 10:01:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2841
6fa1bcf9c997 JavaClass>>#name vs. #binaryName refactoring
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2734
diff changeset
   547
    "Modified: / 08-10-2013 / 19:27:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   548
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   549
3235
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   550
registerClassRedefined: class
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   551
    "Class has been redefined, so we have to invalidate
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   552
     caches in coresponding java.lang.Class. Luckily enough,
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   553
     thee seem to be support for this - all we have to is to
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   554
     increase class redefinition count."
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   555
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   556
    | classObject classObjectRedefinitionCountIndex classObjectRedefinitionCount |
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   557
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   558
    classObject := JavaVM reflection javaClassObjectForClass: class.
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   559
    classObjectRedefinitionCountIndex := classObject class instVarIndexFor: #classRedefinedCount.
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   560
    classObjectRedefinitionCount := classObject instVarAt:classObjectRedefinitionCountIndex.
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   561
    classObjectRedefinitionCount := classObjectRedefinitionCount + 1.
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   562
    classObject instVarAt:classObjectRedefinitionCountIndex put: classObjectRedefinitionCount.
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   563
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   564
    "Created: / 15-08-2014 / 15:09:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   565
!
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   566
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   567
unregisterClassInClassLoader: class
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   568
    "Unregisters class from it's classloader"
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2553
diff changeset
   569
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   570
    "/ OpenJDK java.class.ClassLoader keeps list of all loaded classes
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   571
    "/ in a field `classes`. This method removes the class from the list.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   572
    "/ This happens for instance when class is unloaded or reloaded.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   573
    "/ For classes loaded by primordial class loader, `class classLoader1
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   574
    "/ returns nil.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   575
    class classLoader notNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   576
        (class classLoader instVarNamed: #classes) 
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   577
            perform: #'remove(Ljava/lang/Object;)Z' 
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   578
            with: (JavaVM reflection javaClassObjectForClass: class).
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   579
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   580
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   581
    "Created: / 11-08-2014 / 01:38:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   582
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   583
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   584
unregisterClassInSmalltalk: javaclass notify: doNotify
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   585
    "Unregisters given class from Smalltalk system dictionary
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   586
     so the class is no longer visible from Smalltalk"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   587
2872
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   588
    | nameInSmalltalk nameInSmalltalkSymbol nameSpace |
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   589
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   590
    "/ Must wait here - if classes are added and removed too fast,
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   591
    "/ a race condition occur in stx:libbasic code (something is
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   592
    "/ nilled menawhile and event handler does not handle this case.
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   593
    "/ This can happen for example when running tests...
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   594
    notifier waitUntilProcessed.
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   595
2526
ef415ed11871 Added JavaUnresolvedCompilationError.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2429
diff changeset
   596
    javaclass isSynthetic ifTrue:[ ^ self ].
2872
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   597
    nameSpace := javaclass nameSpace.
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   598
    nameInSmalltalk := javaclass nameInSmalltalk.
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   599
    nameInSmalltalkSymbol := nameInSmalltalk asSymbolIfInterned.
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   600
    nameInSmalltalkSymbol notNil ifTrue:[
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   601
        Smalltalk removeKey: nameInSmalltalkSymbol
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   602
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   603
    doNotify ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   604
        notifier add:(Array with: #classRemove with: javaclass).
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   605
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   606
2872
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   607
    [ nameSpace notNil and:[nameSpace ~~ JAVA and:[nameSpace allClasses size == 0]]] whileTrue:[
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   608
        Smalltalk removeClass: nameSpace.
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   609
        nameSpace := nameSpace nameSpace.
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   610
    ].
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   611
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   612
    "Created: / 04-04-2012 / 10:01:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2872
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   613
    "Modified: / 17-10-2013 / 10:50:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   614
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   615
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   616
!JavaClassRegistry class methodsFor:'documentation'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   617
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   618
version_CVS
2553
cacd370c2a15 Changed usage of deprecated #copyWithoutLast: to #copyButLast:
Stefan Vogel <sv@exept.de>
parents: 2437
diff changeset
   619
    ^ '$Header: /cvs/stx/stx/libjava/JavaClassRegistry.st,v 1.4 2013-04-25 13:10:25 stefan Exp $'
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   620
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   621
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   622
version_SVN
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   623
    ^ '§Id§'
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   624
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   625