JavaClassRegistry.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 27 Sep 2018 23:09:30 +0100
changeset 3854 193b04caef42
parent 3627 5d22435da54d
child 3860 e87f2f1439e9
permissions -rw-r--r--
Specifiy both source ant target Java versions ...when compiling Java code. Since `stx:libjava` only supports Java 7, make sure all code is compiled targeting Java 7.
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
"
3324
a58245c0e83a Updated copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
     2
 COPYRIGHT (c) 1996-2015 by Claus Gittinger
2353
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
3324
a58245c0e83a Updated copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
     6
 COPYRIGHT (c) 2010-2015 by Jan Vrany, Jan Kurs and Marcel Hlopko
2353
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
3384
98eb8443f4f4 Use new Logger API (use Logger severityXXX instead of symbols)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3324
diff changeset
    23
"{ NameSpace: Smalltalk }"
98eb8443f4f4 Use new Logger API (use Logger severityXXX instead of symbols)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3324
diff changeset
    24
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
    25
JavaClassEnvironment subclass:#JavaClassRegistry
3627
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
    26
	instanceVariableNames:'vm loaders notifier lock erroneous'
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
	classVariableNames:''
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
	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
    29
	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
    30
!
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
!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
    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
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
"
3324
a58245c0e83a Updated copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
    36
 COPYRIGHT (c) 1996-2015 by Claus Gittinger
2353
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
 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
    39
3324
a58245c0e83a Updated copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
    40
 COPYRIGHT (c) 2010-2015 by Jan Vrany, Jan Kurs and Marcel Hlopko
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
                            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
    42
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
 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
    44
 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
    45
 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
    46
 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
    47
 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
    48
 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
    49
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
 [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
    51
     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
    52
     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
    53
     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
    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
! !
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
!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
    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
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
    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
    ^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
    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
    "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
    65
!
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
new
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
    ^ 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
    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
    "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
    72
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
2578
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    74
!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
    75
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    76
version_HG
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
    ^ '$Changeset: <not expanded> $'
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    79
! !
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    80
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
!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
    82
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
    83
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
    84
    "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
    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
    | 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
    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
    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
    89
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
    "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
    91
     used"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
    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
    94
        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
    95
        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
    96
        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
    97
            ^class.
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
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
    "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
   102
    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
   103
    ^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
   104
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
    "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
   106
    "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
   107
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   109
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
   110
    "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
   111
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   112
    | class synchronizer |
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   113
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
    self assert: (className includes: $.) not.
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   115
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   116
    "/ 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
   117
    "/ 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
   118
    "/ 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
   119
    "/ 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
   120
    "/ 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
   121
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   122
    synchronizer := classLoader isNil
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   123
                        ifTrue:[ [:whatToDo | lock critical: whatToDo ] ]
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   124
                        ifFalse:[ [:whatToDo | whatToDo value ] ].
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   125
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   126
    synchronizer value:[
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   127
        "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
   128
        class := self classNamed: className loader: classLoader.
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   129
        class isNil ifTrue:[
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   130
            "Otherwise evaluate block"
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   131
            class := block value.
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   132
            (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
   133
        ].
3066
8c0339f8c175 Fixes for groovy.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2966
diff changeset
   134
    ].
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   135
    ^ 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
   136
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
    "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
   138
    "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
   139
    "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
   140
    "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
   141
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
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
   144
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   145
    "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
   146
     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
   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
    ^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
   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
    "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
   151
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
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
   154
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   155
    "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
   156
     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
   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
    ^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
   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
    "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
   161
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
classes
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
3067
4bbacafb9592 Renamed JavaClassRegistry>>classesDo: to allClassesDo:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3066
diff changeset
   165
    ^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
   166
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
    "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
   168
    "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
   169
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
3627
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   171
erroneous
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   172
    "Return a list of classes that contain compilation errors"
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   173
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   174
    | classes |
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   175
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   176
    erroneous isNil ifTrue:[ ^ #() ].
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   177
    lock critical:[
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   178
        classes := erroneous copy.
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   179
    ].
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   180
    ^ classes.
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   181
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   182
    "
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   183
    JavaVM registry erroneous
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   184
    "
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   185
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   186
    "Created: / 20-09-2016 / 23:00:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   187
    "Modified: / 21-09-2016 / 10:34:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   188
!
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   189
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
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
   191
    "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
   192
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 syspkgSlashed |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
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 := 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
   196
    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
   197
    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
   198
    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
   199
        (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
   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
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
    ^ nil
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   204
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
    "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
   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
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
systemPackages
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
    "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
   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
    | 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
   212
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
    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
   214
    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
   215
    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
   216
    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
   217
        | slashpos |
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
        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
   220
        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
   221
            | syspkg |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
            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
   224
            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
   225
            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
   226
        ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
    ^syspkgs
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
    "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
   231
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
!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
   234
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   235
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
   236
    "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
   237
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
    | aClass |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
    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
   241
    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
   242
    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
   243
    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
   244
    ^ aClass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
    "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
   247
    "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
   248
    "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
   249
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   251
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
   252
    "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
   253
     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
   254
     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
   255
     asked to do it."
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   256
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
    | javaClass |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
    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
   260
    self breakPoint: #jv.
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   261
    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
   262
    javaClass isNil ifTrue: [
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   263
            Logger
2578
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   264
                log: 'JavaClassReader was not able to read given data stream'
3384
98eb8443f4f4 Use new Logger API (use Logger severityXXX instead of symbols)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3324
diff changeset
   265
                severity: Logger severityWARN
2578
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   266
                facility: #JVM.
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   267
            self breakPoint: #mh.
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   268
            ^ 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
   269
        ].
2578
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   270
    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
   271
    javaClass classLoader: aJavaClassLoader.
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   272
    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
   273
    ^ javaClass
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   274
3384
98eb8443f4f4 Use new Logger API (use Logger severityXXX instead of symbols)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3324
diff changeset
   275
    "Modified: / 02-03-2015 / 14:07:44 / 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
   276
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   277
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   278
!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
   279
3067
4bbacafb9592 Renamed JavaClassRegistry>>classesDo: to allClassesDo:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3066
diff changeset
   280
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
   281
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   282
    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
   283
        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
   284
            aBlock value: class
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   285
        ]
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
    ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   287
3067
4bbacafb9592 Renamed JavaClassRegistry>>classesDo: to allClassesDo:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3066
diff changeset
   288
    "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
   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
!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
   292
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   293
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
   294
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   295
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
   296
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   298
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
   299
    ^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
   300
! !
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
!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
   303
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   304
flush
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   305
2952
ff6465e92d95 Flush JavaClassRegistry's notifier when flushing classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2948
diff changeset
   306
    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
   307
    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
   308
2952
ff6465e92d95 Flush JavaClassRegistry's notifier when flushing classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2948
diff changeset
   309
    "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
   310
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   311
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   312
initialize
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   313
    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
   314
    loaders at: nil put: Dictionary new.
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   315
    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
   316
                    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
   317
                    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
   318
    notifier priority: Processor userBackgroundPriority - 1.
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   319
    lock := RecursionLock new.
3627
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   320
    erroneous := 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
   321
3627
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   322
    "Modified: / 21-09-2016 / 10:28: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
   323
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   324
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   325
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
   326
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   327
    "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
   328
    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
   329
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   330
    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
   331
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   332
    "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
   333
    "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
   334
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   335
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   336
!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
   337
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   338
registerClass: newClass
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   339
    | classes oldClass |
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   340
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   341
    ((newClass binaryName == #'$do$It$')
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   342
        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
   343
        "/ 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
   344
        ^ self
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   345
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   346
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   347
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   348
    self assert: (newClass binaryName includes: $.) not.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   349
    loaders keysAndValuesDo:[:loader :classesPerLoader|
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   350
        (classesPerLoader includesKey: newClass binaryName) ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   351
            loader == newClass classLoader ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   352
                (oldClass := classesPerLoader at: newClass binaryName) ~~ newClass ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   353
                    "Class already exists, reload & reinstall"
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
                    | reloadedClass |
3235
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   356
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   357
                    self registerClassRedefined: oldClass.  
3627
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   358
                    "/ ...if old class contained errors, unregister it from list of erroneous 
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   359
                    "/ classes...
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   360
                    oldClass hasErrors ifTrue:[ 
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   361
                        self unregisterErroneous: oldClass.  
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   362
                    ]. 
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   363
                    reloadedClass := JavaClassReloader reload: oldClass with: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   364
                    "/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
   365
                    reloadedClass ~~ oldClass ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   366
                        "/ Remove old class from classloader...
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   367
                        self unregisterClassInClassLoader: oldClass.  
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   368
                        "/ ...from reflection cache....
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   369
                        JavaVM reflection removeJavaClassObjectForClass: oldClass.                 
3623
cfae550eeda1 Fixed #isObsolete for Java classes being replaceb by newer version(s).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3508
diff changeset
   370
                        "/ ...and finally mark it obsolete...
cfae550eeda1 Fixed #isObsolete for Java classes being replaceb by newer version(s).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3508
diff changeset
   371
                        oldClass beObsolete.
3216
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
                        classesPerLoader
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   374
                            at: newClass binaryName
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   375
                            put: reloadedClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   376
                        self registerClassInClassLoader: reloadedClass.  
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   377
                        self registerClassInSmalltalk: reloadedClass notify: false.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   378
                    ].
3627
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   379
                    "/ ...if old class contained errors, unregister it from erroneous as now
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   380
                    "/ it is obsolete...
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   381
                    reloadedClass hasErrors ifTrue:[ 
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   382
                        self registerErroneous: reloadedClass.  
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   383
                    ].
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   384
                    "/ ...likewise, if new class contains errors,
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   385
                    Smalltalk changed: #classDefinition with: reloadedClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   386
                    ^self.
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
            ].
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
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   392
    classes := loaders at: newClass classLoader ifAbsent: nil.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   393
    classes isNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   394
        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
   395
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   396
    classes at: newClass binaryName  put: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   397
    newClass isJavaClass ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   398
        self registerClassInClassLoader: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   399
        "/ Register class in system dictionary so it can be browsed
3627
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   400
        "/ by system browser...
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   401
        self registerClassInSmalltalk: newClass notify: true.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   402
3627
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   403
        "/ ...register builtin classes in JavaVMData...
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   404
        newClass isBuiltInClass ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   405
            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
   406
            self registerBuiltIn: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   407
        ].
3627
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   408
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   409
        "/ ...and finally, if class contains compilation errors, register it as such...
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   410
        newClass hasErrors ifTrue:[ 
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   411
            self registerErroneous: newClass.
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   412
        ].
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   413
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   414
    "/ 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
   415
    "/ 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
   416
    JavaCompiler notNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   417
       JavaCompiler recompileErroneousClassesReferringTo: newClass ignoring: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   418
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   419
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   420
    "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
   421
    "Modified: / 02-11-2011 / 18:40:52 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
3627
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   422
    "Modified: / 20-09-2016 / 23:25:42 / 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
   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
registerClasses: classes
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   426
    classes do:[:cls|self registerClass: cls].
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
    "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
   429
!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   430
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   431
registerClasses: classes andWait: doWait
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   432
    "Register given set of classes and if
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   433
     `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
   434
     are delivered"
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
    classes do:[:cls|self registerClass: cls].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   437
    doWait ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   438
        notifier waitUntilProcessed.
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
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   441
    "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
   442
!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   443
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   444
unregisterClass: oldClass
3244
0a8b9f03ffa5 Fixed class reloader in cases a top-level class has both, nested and anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3235
diff changeset
   445
    ^ self unregisterClass: oldClass ignoring: Set new.
0a8b9f03ffa5 Fixed class reloader in cases a top-level class has both, nested and anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3235
diff changeset
   446
0a8b9f03ffa5 Fixed class reloader in cases a top-level class has both, nested and anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3235
diff changeset
   447
    "Created: / 04-04-2012 / 02:43:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0a8b9f03ffa5 Fixed class reloader in cases a top-level class has both, nested and anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3235
diff changeset
   448
    "Modified: / 10-10-2014 / 12:12:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0a8b9f03ffa5 Fixed class reloader in cases a top-level class has both, nested and anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3235
diff changeset
   449
!
0a8b9f03ffa5 Fixed class reloader in cases a top-level class has both, nested and anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3235
diff changeset
   450
0a8b9f03ffa5 Fixed class reloader in cases a top-level class has both, nested and anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3235
diff changeset
   451
unregisterClass: oldClass ignoring: ignoredClasses
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   452
    | classes |
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   453
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   454
    classes := loaders at: oldClass classLoader ifAbsent: nil.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   455
    classes notNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   456
        "/ 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
   457
        (classes includesKey: oldClass binaryName) ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   458
            "/ 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
   459
            "/ (JavaClassReloader will unload them by recursively call #unregisterClass:
3244
0a8b9f03ffa5 Fixed class reloader in cases a top-level class has both, nested and anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3235
diff changeset
   460
            JavaClassReloader unload: oldClass ignoring: ignoredClasses.
3217
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   461
            "/ 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
   462
            classes removeKey: oldClass binaryName.
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   463
            "/ ...from class loader...
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   464
            self unregisterClassInClassLoader: oldClass.  
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   465
            "/ ...from reflection cache....
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   466
            JavaVM reflection removeJavaClassObjectForClass: oldClass.
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   467
            "/ ...and from Smalltalk dictionary
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   468
            self unregisterClassInSmalltalk: oldClass notify: true.
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   469
        ]
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   470
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   471
3244
0a8b9f03ffa5 Fixed class reloader in cases a top-level class has both, nested and anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3235
diff changeset
   472
    "Created: / 10-10-2014 / 12:12:23 / 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
   473
!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   474
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   475
unregisterClassLoader: aJavaClassLoader
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   476
    | classes |
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   477
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   478
    classes := loaders at: aJavaClassLoader ifAbsent:[ ^ self ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   479
    self unregisterClasses: classes values.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   480
    loaders removeKey: aJavaClassLoader.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   481
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   482
    "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
   483
    "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
   484
!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   485
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   486
unregisterClasses: classes
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   487
    classes do:[:cls|self unregisterClass: cls].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   488
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   489
    "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
   490
! !
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   491
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   492
!JavaClassRegistry methodsFor:'registering-private'!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   493
2618
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   494
registerBuiltIn: class
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   495
    | nm |
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   496
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   497
    nm := class binaryName.
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   498
    nm = #'java/lang/Object' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   499
        _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
   500
        ^self.
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   501
    ].
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   502
    nm = #'java/lang/System' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   503
        _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
   504
        ^self.
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   505
    ].
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   506
    nm = #'java/lang/Class' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   507
        _java_lang_Class_CLASS := class.
3495
494403a0af56 FIx for new OpenJDK 7 (7u85-2.6.1-3)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3384
diff changeset
   508
        "/ Some more recent OpenJDK 7 (7u85-2.6.1-3) introduced 
494403a0af56 FIx for new OpenJDK 7 (7u85-2.6.1-3)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3384
diff changeset
   509
        "/ a classLoader field in java.lang.Class instances, making
494403a0af56 FIx for new OpenJDK 7 (7u85-2.6.1-3)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3384
diff changeset
   510
        "/ java.lang.Class.getClassLoader0() useless. To support both,
494403a0af56 FIx for new OpenJDK 7 (7u85-2.6.1-3)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3384
diff changeset
   511
        "/ remember the offset of the `classLoader` here. It will
494403a0af56 FIx for new OpenJDK 7 (7u85-2.6.1-3)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3384
diff changeset
   512
        "/ be used then by JavaReflectionRegistry to fill in
494403a0af56 FIx for new OpenJDK 7 (7u85-2.6.1-3)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3384
diff changeset
   513
        "/ the field. If this particular Java runtime does not
494403a0af56 FIx for new OpenJDK 7 (7u85-2.6.1-3)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3384
diff changeset
   514
        "/ have it (older OpenJDK7, OpenJDK6), leave it nil.
494403a0af56 FIx for new OpenJDK 7 (7u85-2.6.1-3)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3384
diff changeset
   515
        "/ See JavaVM::ReflectionRegistry>>javaClassObjectForClass:init:.
494403a0af56 FIx for new OpenJDK 7 (7u85-2.6.1-3)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3384
diff changeset
   516
        _java_lang_Class_classLoader_ID := _java_lang_Class_CLASS instVarIndexFor: #classLoader ifAbsent: [ nil ].
494403a0af56 FIx for new OpenJDK 7 (7u85-2.6.1-3)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3384
diff changeset
   517
2620
263045d15796 Initial support for generalized built-in class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2618
diff changeset
   518
        "/ 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
   519
        "/ JavaMirror>>createMethod...
2620
263045d15796 Initial support for generalized built-in class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2618
diff changeset
   520
        #(#'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
   521
            vm classForName: e definedBy: nil.
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   522
        ].
2618
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   523
        ^self.
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   524
    ].
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   525
    nm = #'java/lang/reflect/Constructor' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   526
        _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
   527
    ].
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   528
    nm = #'java/lang/reflect/Method' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   529
        _java_lang_reflect_Method_CLASS := class.
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   530
    ].
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   531
    nm = #'java/lang/reflect/Field' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   532
        _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
   533
    ].
263045d15796 Initial support for generalized built-in class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2618
diff changeset
   534
2618
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   535
    "Created: / 22-05-2013 / 20:40:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3495
494403a0af56 FIx for new OpenJDK 7 (7u85-2.6.1-3)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3384
diff changeset
   536
    "Modified: / 11-09-2015 / 15:53:38 / 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
   537
!
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   538
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   539
registerClassInClassLoader: class
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   540
    "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
   541
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   542
    "/ 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
   543
    "/ 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
   544
    "/ 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
   545
    "/ returns nil.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   546
    class classLoader notNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   547
        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
   548
    ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   549
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   550
    "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
   551
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   552
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   553
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
   554
    "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
   555
     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
   556
     Smalltalk"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   557
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   558
    | 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
   559
2526
ef415ed11871 Added JavaUnresolvedCompilationError.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2429
diff changeset
   560
    javaclass isSynthetic ifTrue:[ ^ self ].
2841
6fa1bcf9c997 JavaClass>>#name vs. #binaryName refactoring
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2734
diff changeset
   561
    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
   562
    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
   563
        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
   564
                            replaceAll:$/ with:$. ).
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2553
diff changeset
   565
    ] ifFalse:[
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2553
diff changeset
   566
        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
   567
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   568
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   569
    nameComponents size > 1 ifTrue:[
2553
cacd370c2a15 Changed usage of deprecated #copyWithoutLast: to #copyButLast:
Stefan Vogel <sv@exept.de>
parents: 2437
diff changeset
   570
        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
   571
    ] ifFalse:[
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2553
diff changeset
   572
        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
   573
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   574
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   575
    "/ 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
   576
    "/ 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
   577
    "/ 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
   578
    "/ 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
   579
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   580
    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
   581
    nsName := javaclass nameSpaceName.
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   582
    nsNameAsSymbol := nsName asSymbolIfInterned.
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   583
    (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
   584
        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
   585
            Class withoutUpdatingChangesDo:[
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   586
                ns := JavaPackage fullName:(nsName contents).
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   587
            ].
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   588
        ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   589
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   590
    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
   591
        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
   592
        javaclass setEnvironment: ns.
2841
6fa1bcf9c997 JavaClass>>#name vs. #binaryName refactoring
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2734
diff changeset
   593
        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
   594
    ] ifFalse:[
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   595
        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
   596
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   597
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   598
    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
   599
        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
   600
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   601
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   602
    "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
   603
    "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
   604
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   605
3235
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   606
registerClassRedefined: class
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   607
    "Class has been redefined, so we have to invalidate
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   608
     caches in coresponding java.lang.Class. Luckily enough,
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   609
     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
   610
     increase class redefinition count."
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   611
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   612
    | classObject classObjectRedefinitionCountIndex classObjectRedefinitionCount |
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   613
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   614
    classObject := JavaVM reflection javaClassObjectForClass: class.
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   615
    classObjectRedefinitionCountIndex := classObject class instVarIndexFor: #classRedefinedCount.
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   616
    classObjectRedefinitionCount := classObject instVarAt:classObjectRedefinitionCountIndex.
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   617
    classObjectRedefinitionCount := classObjectRedefinitionCount + 1.
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   618
    classObject instVarAt:classObjectRedefinitionCountIndex put: classObjectRedefinitionCount.
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   619
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   620
    "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
   621
!
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   622
3627
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   623
registerErroneous: aJavaClass
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   624
    lock critical:[    
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   625
        erroneous isNil ifTrue:[ erroneous := Set new ].
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   626
        erroneous add: aJavaClass
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   627
    ].
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   628
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   629
    "Created: / 20-09-2016 / 23:17:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   630
    "Modified: / 21-09-2016 / 10:31:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   631
!
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   632
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   633
unregisterClassInClassLoader: class
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   634
    "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
   635
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   636
    "/ 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
   637
    "/ 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
   638
    "/ 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
   639
    "/ 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
   640
    "/ returns nil.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   641
    class classLoader notNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   642
        (class classLoader instVarNamed: #classes) 
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   643
            perform: #'remove(Ljava/lang/Object;)Z' 
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   644
            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
   645
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   646
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   647
    "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
   648
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   649
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   650
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
   651
    "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
   652
     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
   653
2872
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   654
    | nameInSmalltalk nameInSmalltalkSymbol nameSpace |
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   655
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   656
    "/ 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
   657
    "/ 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
   658
    "/ 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
   659
    "/ This can happen for example when running tests...
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   660
    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
   661
2526
ef415ed11871 Added JavaUnresolvedCompilationError.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2429
diff changeset
   662
    javaclass isSynthetic ifTrue:[ ^ self ].
2872
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   663
    nameSpace := javaclass nameSpace.
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   664
    nameInSmalltalk := javaclass nameInSmalltalk.
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   665
    nameInSmalltalkSymbol := nameInSmalltalk asSymbolIfInterned.
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   666
    nameInSmalltalkSymbol notNil ifTrue:[
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   667
        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
   668
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   669
    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
   670
        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
   671
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   672
2872
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   673
    [ 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
   674
        Smalltalk removeClass: nameSpace.
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   675
        nameSpace := nameSpace nameSpace.
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   676
    ].
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   677
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   678
    "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
   679
    "Modified: / 17-10-2013 / 10:50:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3627
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   680
!
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   681
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   682
unregisterErroneous: aJavaClass
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   683
    lock critical:[
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   684
        erroneous remove: aJavaClass.
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   685
        erroneous := erroneous asNilIfEmpty.
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   686
    ]
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   687
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   688
    "Created: / 20-09-2016 / 23:18:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3623
diff changeset
   689
    "Modified: / 21-09-2016 / 10:32: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
   690
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   691
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   692
!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
   693
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   694
version_CVS
3431
82790b1e6d54 Merged with mercurial revision 4f3cc813be4 (8 changesets total)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3430
diff changeset
   695
    ^ '$Header: /cvs/stx/stx/libjava/JavaClassRegistry.st,v 1.8 2015-03-20 12:07:59 vrany 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
   696
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   697
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   698
version_SVN
3623
cfae550eeda1 Fixed #isObsolete for Java classes being replaceb by newer version(s).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3508
diff changeset
   699
    ^ '§Id§'
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   700
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   701