JavaClassRegistry.st
author Patrik Svestka <patrik.svestka@gmail.com>
Wed, 14 Nov 2018 11:40:39 +0100
changeset 3860 e87f2f1439e9
parent 3627 5d22435da54d
permissions -rw-r--r--
Issue #239: Fix all Smalltak/X source files to be in unicode (UTF8 without BOM) and prefixed by "{ Encoding: utf8 }" when any unicode character is present - All source *.st files are now Unicode UTF8 without BOM Files are in two groups (fileOut works this way in Smalltalk/X): - containing a unicode character have "{ Encoding: utf8 }" at the header - ASCII only are without the header
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3860
e87f2f1439e9 Issue #239: Fix all Smalltak/X source files to be in unicode (UTF8 without BOM) and prefixed by "{ Encoding: utf8 }" when any unicode character is present
Patrik Svestka <patrik.svestka@gmail.com>
parents: 3627
diff changeset
     1
"{ Encoding: utf8 }"
e87f2f1439e9 Issue #239: Fix all Smalltak/X source files to be in unicode (UTF8 without BOM) and prefixed by "{ Encoding: utf8 }" when any unicode character is present
Patrik Svestka <patrik.svestka@gmail.com>
parents: 3627
diff changeset
     2
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
"
3324
a58245c0e83a Updated copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
     4
 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
     5
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
 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
     7
3324
a58245c0e83a Updated copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
     8
 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
     9
                            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
    10
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
 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
    12
 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
    13
 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
    14
 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
    15
 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
    16
 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
    17
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
 [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
    19
     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
    20
     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
    21
     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
    22
"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
"{ 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
    24
3384
98eb8443f4f4 Use new Logger API (use Logger severityXXX instead of symbols)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3324
diff changeset
    25
"{ NameSpace: Smalltalk }"
98eb8443f4f4 Use new Logger API (use Logger severityXXX instead of symbols)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3324
diff changeset
    26
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
    27
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
    28
	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
    29
	classVariableNames:''
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
	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
    31
	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
    32
!
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
!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
    35
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
copyright
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
"
3324
a58245c0e83a Updated copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
    38
 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
    39
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
 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
    41
3324
a58245c0e83a Updated copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
    42
 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
    43
                            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
    44
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
 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
    46
 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
    47
 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
    48
 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
    49
 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
    50
 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
    51
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
 [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
    53
     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
    54
     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
    55
     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
    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
! !
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
!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
    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
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
    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
    ^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
    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
    "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
    67
!
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
new
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
    ^ 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
    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
    "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
    74
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
2578
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    76
!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
    77
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    78
version_HG
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
    ^ '$Changeset: <not expanded> $'
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    81
! !
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    82
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
!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
    84
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
    85
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
    86
    "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
    87
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
    | classes class |
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
    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
    91
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
    "Classes 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
    93
     used"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
    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
    96
        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
    97
        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
    98
        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
    99
            ^class.
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
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
    "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
   104
    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
   105
    ^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
   106
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
    "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
   108
    "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
   109
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   111
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
   112
    "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
   113
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   114
    | class synchronizer |
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   115
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
    self assert: (className includes: $.) not.
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   117
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   118
    "/ 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
   119
    "/ 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
   120
    "/ 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
   121
    "/ 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
   122
    "/ 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
   123
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   124
    synchronizer := classLoader isNil
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   125
                        ifTrue:[ [:whatToDo | lock critical: whatToDo ] ]
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   126
                        ifFalse:[ [:whatToDo | whatToDo value ] ].
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   127
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   128
    synchronizer value:[
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   129
        "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
   130
        class := self classNamed: className loader: classLoader.
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   131
        class isNil ifTrue:[
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   132
            "Otherwise evaluate block"
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   133
            class := block value.
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   134
            (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
   135
        ].
3066
8c0339f8c175 Fixes for groovy.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2966
diff changeset
   136
    ].
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   137
    ^ 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
   138
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
    "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
   140
    "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
   141
    "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
   142
    "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
   143
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
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
   146
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   147
    "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
   148
     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
   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
    ^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
   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
    "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
   153
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
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
   156
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   157
    "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
   158
     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
   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
    ^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
   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
    "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
   163
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
classes
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
3067
4bbacafb9592 Renamed JavaClassRegistry>>classesDo: to allClassesDo:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3066
diff changeset
   167
    ^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
   168
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
    "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
   170
    "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
   171
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
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
   173
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
   174
    "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
   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
    | 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
   177
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
    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
   179
    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
   180
        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
   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
    ^ 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
   183
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
    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
   186
    "
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
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
    "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
   189
    "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
   190
!
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
   191
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
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
   193
    "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
   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 syspkgSlashed |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
    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
   198
    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
   199
    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
   200
    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
   201
        (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
   202
            ^ syspkg
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
        ]
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
    ^ nil
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
    "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
   208
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
systemPackages
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
    "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
   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 syspkgs |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
    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
   216
    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
   217
    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
   218
    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
   219
        | slashpos |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
        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
   222
        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
   223
            | syspkg |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
            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
   226
            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
   227
            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
   228
        ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
    ^syspkgs
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
    "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
   233
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
!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
   236
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   237
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
   238
    "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
   239
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
    | aClass |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
    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
    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
   244
    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
   245
    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
   246
    ^ aClass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
    "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
   249
    "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
   250
    "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
   251
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   253
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
   254
    "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
   255
     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
   256
     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
   257
     asked to do it."
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   258
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
    | javaClass |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
    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
   262
    self breakPoint: #jv.
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   263
    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
   264
    javaClass isNil ifTrue: [
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   265
            Logger
2578
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   266
                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
   267
                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
   268
                facility: #JVM.
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   269
            self breakPoint: #mh.
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   270
            ^ 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
   271
        ].
2578
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   272
    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
   273
    javaClass classLoader: aJavaClassLoader.
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   274
    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
   275
    ^ javaClass
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   276
3384
98eb8443f4f4 Use new Logger API (use Logger severityXXX instead of symbols)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3324
diff changeset
   277
    "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
   278
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   279
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   280
!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
   281
3067
4bbacafb9592 Renamed JavaClassRegistry>>classesDo: to allClassesDo:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3066
diff changeset
   282
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
   283
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   284
    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
   285
        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
   286
            aBlock value: class
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   287
        ]
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   288
    ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   289
3067
4bbacafb9592 Renamed JavaClassRegistry>>classesDo: to allClassesDo:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3066
diff changeset
   290
    "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
   291
! !
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
!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
   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
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
   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
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
   298
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   299
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   300
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
   301
    ^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
   302
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   303
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   304
!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
   305
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   306
flush
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   307
2952
ff6465e92d95 Flush JavaClassRegistry's notifier when flushing classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2948
diff changeset
   308
    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
   309
    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
   310
2952
ff6465e92d95 Flush JavaClassRegistry's notifier when flushing classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2948
diff changeset
   311
    "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
   312
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   313
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   314
initialize
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   315
    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
   316
    loaders at: nil put: Dictionary new.
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   317
    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
   318
                    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
   319
                    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
   320
    notifier priority: Processor userBackgroundPriority - 1.
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   321
    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
   322
    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
   323
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
   324
    "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
   325
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   326
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   327
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
   328
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   329
    "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
   330
    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
   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
    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
   333
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   334
    "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
   335
    "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
   336
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   337
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   338
!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
   339
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   340
registerClass: newClass
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   341
    | classes oldClass |
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   342
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   343
    ((newClass binaryName == #'$do$It$')
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   344
        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
   345
        "/ 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
   346
        ^ self
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
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   349
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   350
    self assert: (newClass binaryName includes: $.) not.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   351
    loaders keysAndValuesDo:[:loader :classesPerLoader|
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   352
        (classesPerLoader includesKey: newClass binaryName) ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   353
            loader == newClass classLoader ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   354
                (oldClass := classesPerLoader at: newClass binaryName) ~~ newClass ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   355
                    "Class already exists, reload & reinstall"
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   356
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   357
                    | reloadedClass |
3235
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   358
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   359
                    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
   360
                    "/ ...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
   361
                    "/ 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
   362
                    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
   363
                        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
   364
                    ]. 
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   365
                    reloadedClass := JavaClassReloader reload: oldClass with: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   366
                    "/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
   367
                    reloadedClass ~~ oldClass ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   368
                        "/ Remove old class from classloader...
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   369
                        self unregisterClassInClassLoader: oldClass.  
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   370
                        "/ ...from reflection cache....
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   371
                        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
   372
                        "/ ...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
   373
                        oldClass beObsolete.
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   374
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   375
                        classesPerLoader
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   376
                            at: newClass binaryName
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   377
                            put: reloadedClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   378
                        self registerClassInClassLoader: reloadedClass.  
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   379
                        self registerClassInSmalltalk: reloadedClass notify: false.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   380
                    ].
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
   381
                    "/ ...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
   382
                    "/ 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
   383
                    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
   384
                        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
   385
                    ].
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
   386
                    "/ ...likewise, if new class contains errors,
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   387
                    Smalltalk changed: #classDefinition with: reloadedClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   388
                    ^self.
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
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   393
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   394
    classes := loaders at: newClass classLoader ifAbsent: nil.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   395
    classes isNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   396
        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
   397
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   398
    classes at: newClass binaryName  put: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   399
    newClass isJavaClass ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   400
        self registerClassInClassLoader: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   401
        "/ 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
   402
        "/ by system browser...
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   403
        self registerClassInSmalltalk: newClass notify: true.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   404
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
   405
        "/ ...register builtin classes in JavaVMData...
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   406
        newClass isBuiltInClass ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   407
            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
   408
            self registerBuiltIn: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   409
        ].
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
   410
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
        "/ ...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
   412
        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
   413
            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
   414
        ].
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   415
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   416
    "/ 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
   417
    "/ 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
   418
    JavaCompiler notNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   419
       JavaCompiler recompileErroneousClassesReferringTo: newClass ignoring: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   420
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   421
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   422
    "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
   423
    "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
   424
    "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
   425
!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   426
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   427
registerClasses: classes
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   428
    classes do:[:cls|self registerClass: cls].
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
    "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
   431
!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   432
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   433
registerClasses: classes andWait: doWait
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   434
    "Register given set of classes and if
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   435
     `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
   436
     are delivered"
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   437
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   438
    classes do:[:cls|self registerClass: cls].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   439
    doWait ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   440
        notifier waitUntilProcessed.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   441
    ]
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   442
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   443
    "Created: / 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
   444
!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   445
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   446
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
   447
    ^ 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
   448
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
    "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
   450
    "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
   451
!
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
   452
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
   453
unregisterClass: oldClass ignoring: ignoredClasses
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   454
    | classes |
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   455
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   456
    classes := loaders at: oldClass classLoader ifAbsent: nil.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   457
    classes notNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   458
        "/ 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
   459
        (classes includesKey: oldClass binaryName) ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   460
            "/ 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
   461
            "/ (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
   462
            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
   463
            "/ 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
   464
            classes removeKey: oldClass binaryName.
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   465
            "/ ...from class loader...
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   466
            self unregisterClassInClassLoader: oldClass.  
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   467
            "/ ...from reflection cache....
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   468
            JavaVM reflection removeJavaClassObjectForClass: oldClass.
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   469
            "/ ...and from Smalltalk dictionary
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   470
            self unregisterClassInSmalltalk: oldClass notify: true.
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   471
        ]
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   472
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   473
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
   474
    "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
   475
!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   476
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   477
unregisterClassLoader: aJavaClassLoader
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   478
    | classes |
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   479
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   480
    classes := loaders at: aJavaClassLoader ifAbsent:[ ^ self ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   481
    self unregisterClasses: classes values.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   482
    loaders removeKey: aJavaClassLoader.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   483
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   484
    "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
   485
    "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
   486
!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   487
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   488
unregisterClasses: classes
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   489
    classes do:[:cls|self unregisterClass: cls].
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
    "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
   492
! !
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   493
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   494
!JavaClassRegistry methodsFor:'registering-private'!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   495
2618
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   496
registerBuiltIn: class
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   497
    | nm |
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   498
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   499
    nm := class binaryName.
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   500
    nm = #'java/lang/Object' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   501
        _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
   502
        ^self.
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   503
    ].
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   504
    nm = #'java/lang/System' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   505
        _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
   506
        ^self.
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   507
    ].
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   508
    nm = #'java/lang/Class' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   509
        _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
   510
        "/ 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
   511
        "/ 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
   512
        "/ 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
   513
        "/ 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
   514
        "/ 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
   515
        "/ 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
   516
        "/ 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
   517
        "/ 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
   518
        _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
   519
2620
263045d15796 Initial support for generalized built-in class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2618
diff changeset
   520
        "/ 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
   521
        "/ JavaMirror>>createMethod...
2620
263045d15796 Initial support for generalized built-in class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2618
diff changeset
   522
        #(#'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
   523
            vm classForName: e definedBy: nil.
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   524
        ].
2618
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   525
        ^self.
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   526
    ].
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   527
    nm = #'java/lang/reflect/Constructor' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   528
        _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
   529
    ].
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   530
    nm = #'java/lang/reflect/Method' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   531
        _java_lang_reflect_Method_CLASS := class.
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   532
    ].
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   533
    nm = #'java/lang/reflect/Field' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   534
        _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
   535
    ].
263045d15796 Initial support for generalized built-in class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2618
diff changeset
   536
2618
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   537
    "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
   538
    "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
   539
!
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   540
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   541
registerClassInClassLoader: class
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   542
    "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
   543
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   544
    "/ 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
   545
    "/ 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
   546
    "/ 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
   547
    "/ returns nil.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   548
    class classLoader notNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   549
        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
   550
    ].
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
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   552
    "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
   553
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   554
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   555
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
   556
    "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
   557
     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
   558
     Smalltalk"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   559
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   560
    | 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
   561
2526
ef415ed11871 Added JavaUnresolvedCompilationError.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2429
diff changeset
   562
    javaclass isSynthetic ifTrue:[ ^ self ].
2841
6fa1bcf9c997 JavaClass>>#name vs. #binaryName refactoring
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2734
diff changeset
   563
    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
   564
    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
   565
        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
   566
                            replaceAll:$/ with:$. ).
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2553
diff changeset
   567
    ] ifFalse:[
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2553
diff changeset
   568
        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
   569
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   570
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   571
    nameComponents size > 1 ifTrue:[
2553
cacd370c2a15 Changed usage of deprecated #copyWithoutLast: to #copyButLast:
Stefan Vogel <sv@exept.de>
parents: 2437
diff changeset
   572
        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
   573
    ] ifFalse:[
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2553
diff changeset
   574
        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
   575
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   576
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   577
    "/ 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
   578
    "/ 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
   579
    "/ 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
   580
    "/ 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
   581
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   582
    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
   583
    nsName := javaclass nameSpaceName.
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   584
    nsNameAsSymbol := nsName asSymbolIfInterned.
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   585
    (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
   586
        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
   587
            Class withoutUpdatingChangesDo:[
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   588
                ns := JavaPackage fullName:(nsName contents).
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   589
            ].
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   590
        ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   591
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   592
    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
   593
        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
   594
        javaclass setEnvironment: ns.
2841
6fa1bcf9c997 JavaClass>>#name vs. #binaryName refactoring
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2734
diff changeset
   595
        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
   596
    ] ifFalse:[
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   597
        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
   598
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   599
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   600
    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
   601
        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
   602
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   603
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   604
    "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
   605
    "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
   606
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   607
3235
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   608
registerClassRedefined: class
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   609
    "Class has been redefined, so we have to invalidate
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   610
     caches in coresponding java.lang.Class. Luckily enough,
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   611
     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
   612
     increase class redefinition count."
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 classObjectRedefinitionCountIndex classObjectRedefinitionCount |
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   615
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   616
    classObject := JavaVM reflection javaClassObjectForClass: class.
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   617
    classObjectRedefinitionCountIndex := classObject class instVarIndexFor: #classRedefinedCount.
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   618
    classObjectRedefinitionCount := classObject instVarAt:classObjectRedefinitionCountIndex.
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   619
    classObjectRedefinitionCount := classObjectRedefinitionCount + 1.
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   620
    classObject instVarAt:classObjectRedefinitionCountIndex put: classObjectRedefinitionCount.
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
    "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
   623
!
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   624
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
   625
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
   626
    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
   627
        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
   628
        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
   629
    ].
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
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
    "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
   632
    "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
   633
!
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
   634
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   635
unregisterClassInClassLoader: class
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   636
    "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
   637
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   638
    "/ 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
   639
    "/ 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
   640
    "/ 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
   641
    "/ 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
   642
    "/ returns nil.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   643
    class classLoader notNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   644
        (class classLoader instVarNamed: #classes) 
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   645
            perform: #'remove(Ljava/lang/Object;)Z' 
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   646
            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
   647
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   648
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   649
    "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
   650
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   651
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   652
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
   653
    "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
   654
     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
   655
2872
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   656
    | nameInSmalltalk nameInSmalltalkSymbol nameSpace |
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   657
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   658
    "/ 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
   659
    "/ 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
   660
    "/ 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
   661
    "/ This can happen for example when running tests...
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   662
    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
   663
2526
ef415ed11871 Added JavaUnresolvedCompilationError.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2429
diff changeset
   664
    javaclass isSynthetic ifTrue:[ ^ self ].
2872
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   665
    nameSpace := javaclass nameSpace.
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   666
    nameInSmalltalk := javaclass nameInSmalltalk.
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   667
    nameInSmalltalkSymbol := nameInSmalltalk asSymbolIfInterned.
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   668
    nameInSmalltalkSymbol notNil ifTrue:[
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   669
        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
   670
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   671
    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
   672
        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
   673
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   674
2872
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   675
    [ 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
   676
        Smalltalk removeClass: nameSpace.
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   677
        nameSpace := nameSpace nameSpace.
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   678
    ].
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   679
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   680
    "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
   681
    "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
   682
!
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
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
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
   685
    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
   686
        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
   687
        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
   688
    ]
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
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
   690
    "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
   691
    "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
   692
! !
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
!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
   695
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   696
version_CVS
3431
82790b1e6d54 Merged with mercurial revision 4f3cc813be4 (8 changesets total)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3430
diff changeset
   697
    ^ '$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
   698
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   699
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   700
version_SVN
3860
e87f2f1439e9 Issue #239: Fix all Smalltak/X source files to be in unicode (UTF8 without BOM) and prefixed by "{ Encoding: utf8 }" when any unicode character is present
Patrik Svestka <patrik.svestka@gmail.com>
parents: 3627
diff changeset
   701
    ^ '§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
   702
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   703