JavaClassRegistry.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 19 Sep 2016 17:01:59 +0100
changeset 3623 cfae550eeda1
parent 3508 622620308fee
child 3627 5d22435da54d
permissions -rw-r--r--
Fixed #isObsolete for Java classes being replaceb by newer version(s). * Fixed JavaClass>>isObsolete to test for bit ACX_OBSOLETE. * Fixed JavaMetaclass>>isObsolete to ask it's class. * Changed `JavaClassRegistry` to mark old class as obsolete when it's replaced. This is necessary for tools (namely browser) as it refetches class the onecurrently being displayed is changed. This depends on correct return value of #isObsolete.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"
3324
a58245c0e83a Updated copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
     2
 COPYRIGHT (c) 1996-2015 by Claus Gittinger
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
 New code and modifications done at SWING Research Group [1]:
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
3324
a58245c0e83a Updated copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
     6
 COPYRIGHT (c) 2010-2015 by Jan Vrany, Jan Kurs and Marcel Hlopko
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
                            SWING Research Group, Czech Technical University in Prague
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
 This software is furnished under a license and may be used
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
 only in accordance with the terms of that license and with the
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
 inclusion of the above copyright notice.   This software may not
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
 be provided or otherwise made available to, or used by, any
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
 other person.  No title to or ownership of the software is
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
 hereby transferred.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
 [1] Code written at SWING Research Group contains a signature
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
     of one of the above copright owners. For exact set of such code,
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
     see the differences between this version and version stx:libjava
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
     as of 1.9.2010
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
"{ Package: 'stx:libjava' }"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
3384
98eb8443f4f4 Use new Logger API (use Logger severityXXX instead of symbols)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3324
diff changeset
    23
"{ NameSpace: Smalltalk }"
98eb8443f4f4 Use new Logger API (use Logger severityXXX instead of symbols)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3324
diff changeset
    24
3072
f22d5febda61 Introduced a JavaClassEnvironment - an abstract namespace-like class to keep Java classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3067
diff changeset
    25
JavaClassEnvironment subclass:#JavaClassRegistry
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
    26
	instanceVariableNames:'vm loaders notifier lock'
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
	classVariableNames:''
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
	poolDictionaries:'JavaVMData'
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
	category:'Languages-Java-Support'
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
!JavaClassRegistry class methodsFor:'documentation'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
copyright
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
"
3324
a58245c0e83a Updated copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
    36
 COPYRIGHT (c) 1996-2015 by Claus Gittinger
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
 New code and modifications done at SWING Research Group [1]:
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
3324
a58245c0e83a Updated copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
    40
 COPYRIGHT (c) 2010-2015 by Jan Vrany, Jan Kurs and Marcel Hlopko
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
                            SWING Research Group, Czech Technical University in Prague
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
 This software is furnished under a license and may be used
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
 only in accordance with the terms of that license and with the
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
 inclusion of the above copyright notice.   This software may not
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
 be provided or otherwise made available to, or used by, any
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
 other person.  No title to or ownership of the software is
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
 hereby transferred.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
 [1] Code written at SWING Research Group contains a signature
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
     of one of the above copright owners. For exact set of such code,
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
     see the differences between this version and version stx:libjava
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
     as of 1.9.2010
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
!JavaClassRegistry class methodsFor:'instance creation'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
for: aJavaVM
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
    ^self new setVM: aJavaVM.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
    "Created: / 21-12-2010 / 19:42:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
new
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
    ^ self basicNew initialize.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
    "Modified (format): / 30-10-2011 / 12:07:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
2578
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    74
!JavaClassRegistry class methodsFor:'others'!
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    75
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    76
version_HG
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    77
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    78
    ^ '$Changeset: <not expanded> $'
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    79
! !
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
    80
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
!JavaClassRegistry methodsFor:'accessing'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
    83
classForName: className loader: classLoader ifAbsent: aBlock
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
    "Get class loaded by given classLoader from registry or evaluate aBlock if class is not yet registered"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
    | classes class |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
    self assert: (className includes: $.) not.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
    "Classes loaded by primordial classloader are always
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
     used"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
    classLoader notNil ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
        classes := loaders at: nil ifAbsent: nil.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
        class := classes at: className ifAbsent: nil.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
        class notNil ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
            ^class.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
        ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
    "No bootstrap class found, search given classloader"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
    classes := loaders at: classLoader ifAbsent: [^aBlock value].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
    ^classes at: className ifAbsent: aBlock
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
    "Modified: / 21-10-2011 / 12:39:04 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
    "Created: / 23-10-2011 / 11:40:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   109
classForName: className loader: classLoader ifAbsentPut: block
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
    "Get class loaded by classLoader from registry. if absent block is evaluated and resulting class in registered in registry, "
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   111
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   112
    | class synchronizer |
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   113
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
    self assert: (className includes: $.) not.
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   115
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   116
    "/ Temporary workaround for race-condition when multiple threads are
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   117
    "/ loading same class. Note that ClassLoader.loadClass() / loadClassInternal()
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   118
    "/ is itself sychronized so we have to synchronize iff and only iff
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   119
    "/ we're loading for primordial class loader. If we synchronize
3066
8c0339f8c175 Fixes for groovy.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2966
diff changeset
   120
    "/ even on non-primordial loaders, we risk a deadlock. Very hacky...
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   121
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   122
    synchronizer := classLoader isNil
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   123
                        ifTrue:[ [:whatToDo | lock critical: whatToDo ] ]
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   124
                        ifFalse:[ [:whatToDo | whatToDo value ] ].
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   125
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   126
    synchronizer value:[
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   127
        "If class is already registered with the same cl, just return it"
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   128
        class := self classNamed: className loader: classLoader.
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   129
        class isNil ifTrue:[
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   130
            "Otherwise evaluate block"
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   131
            class := block value.
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   132
            (class notNil and:[classLoader isNil]) ifTrue: [ self registerClass: class ].
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   133
        ].
3066
8c0339f8c175 Fixes for groovy.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2966
diff changeset
   134
    ].
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   135
    ^ class
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
    "Created: / 21-10-2011 / 12:00:30 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
    "Created: / 23-10-2011 / 11:36:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
    "Modified: / 02-11-2011 / 17:29:20 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   140
    "Modified: / 11-08-2014 / 01:23:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
classNamed: className
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   145
    "Return a class for given classname loaded by 'current classloader' or
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
     nil if not yet loaded"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
    ^self classNamed: className loader: JavaClassReader classLoaderQuerySignal query
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
    "Created: / 23-10-2011 / 12:23:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
classNamed: className loader: classLoader
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   155
    "Return a class for given classname loaded by given classloader or
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
     nil if not yet loaded"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
    ^self classForName: className loader: classLoader ifAbsent:[nil].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
    "Created: / 23-10-2011 / 12:23:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
classes
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
3067
4bbacafb9592 Renamed JavaClassRegistry>>classesDo: to allClassesDo:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3066
diff changeset
   165
    ^Iterator on:[:whatToDo|self allClassesDo: whatToDo]
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
    "Created: / 23-10-2011 / 20:14:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3067
4bbacafb9592 Renamed JavaClassRegistry>>classesDo: to allClassesDo:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3066
diff changeset
   168
    "Modified: / 09-04-2014 / 18:43:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
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
   172
    "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
   173
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
    | classes syspkgSlashed |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
    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
   177
    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
   178
    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
   179
    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
   180
        (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
   181
            ^ syspkg
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
        ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
    ^ nil
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
    "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
   187
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
systemPackages
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
    "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
   191
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
    | classes syspkgs |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
    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
   195
    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
   196
    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
   197
    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
   198
        | slashpos |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
        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
   201
        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
   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
            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
   205
            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
   206
            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
   207
        ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
    ^syspkgs
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
    "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
   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
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
!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
   215
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   216
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
   217
    "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
   218
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
    | aClass |
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
    self breakPoint: #mh.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
    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
   223
    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
   224
    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
   225
    ^ aClass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
    "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
   228
    "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
   229
    "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
   230
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   232
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
   233
    "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
   234
     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
   235
     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
   236
     asked to do it."
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   237
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
    | javaClass |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
    self breakPoint: #mh.
2578
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   241
    self breakPoint: #jv.
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   242
    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
   243
    javaClass isNil ifTrue: [
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   244
            Logger
2578
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   245
                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
   246
                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
   247
                facility: #JVM.
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   248
            self breakPoint: #mh.
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   249
            ^ 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
   250
        ].
2578
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   251
    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
   252
    javaClass classLoader: aJavaClassLoader.
fc6186a4961f Performance optimization: rewrote 'JavaVM classNamed:' to 'JavaVM classNamed:...definedBy:...'.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2566
diff changeset
   253
    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
   254
    ^ javaClass
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
3384
98eb8443f4f4 Use new Logger API (use Logger severityXXX instead of symbols)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3324
diff changeset
   256
    "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
   257
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
!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
   260
3067
4bbacafb9592 Renamed JavaClassRegistry>>classesDo: to allClassesDo:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3066
diff changeset
   261
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
   262
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
    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
   264
        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
   265
            aBlock value: class
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   266
        ]
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
    ]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
3067
4bbacafb9592 Renamed JavaClassRegistry>>classesDo: to allClassesDo:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3066
diff changeset
   269
    "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
   270
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   271
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   272
!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
   273
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   274
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
   275
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   276
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
   277
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   278
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   279
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
   280
    ^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
   281
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   282
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   283
!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
   284
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   285
flush
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   286
2952
ff6465e92d95 Flush JavaClassRegistry's notifier when flushing classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2948
diff changeset
   287
    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
   288
    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
   289
2952
ff6465e92d95 Flush JavaClassRegistry's notifier when flushing classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2948
diff changeset
   290
    "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
   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
initialize
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   294
    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
   295
    loaders at: nil put: Dictionary new.
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   296
    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
   297
                    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
   298
                    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
   299
    notifier priority: Processor userBackgroundPriority - 1.
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   300
    lock := RecursionLock new.
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   301
2948
af30789878ce Temporary class loading race-condition workaround.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2942
diff changeset
   302
    "Modified (format): / 22-11-2013 / 11:08:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   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
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   305
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
   306
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   307
    "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
   308
    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
   309
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   310
    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
   311
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   312
    "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
   313
    "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
   314
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   315
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   316
!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
   317
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   318
registerClass: newClass
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   319
    | classes oldClass |
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   320
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   321
    ((newClass binaryName == #'$do$It$')
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   322
        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
   323
        "/ 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
   324
        ^ self
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   325
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   326
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   327
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   328
    self assert: (newClass binaryName includes: $.) not.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   329
    loaders keysAndValuesDo:[:loader :classesPerLoader|
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   330
        (classesPerLoader includesKey: newClass binaryName) ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   331
            loader == newClass classLoader ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   332
                (oldClass := classesPerLoader at: newClass binaryName) ~~ newClass ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   333
                    "Class already exists, reload & reinstall"
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   334
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   335
                    | reloadedClass |
3235
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   336
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   337
                    self registerClassRedefined: oldClass.  
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   338
                    reloadedClass := JavaClassReloader reload: oldClass with: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   339
                    "/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
   340
                    reloadedClass ~~ oldClass ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   341
                        "/ Remove old class from classloader...
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   342
                        self unregisterClassInClassLoader: oldClass.  
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   343
                        "/ ...from reflection cache....
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   344
                        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
   345
                        "/ ...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
   346
                        oldClass beObsolete.
3216
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
                        classesPerLoader
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   349
                            at: newClass binaryName
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   350
                            put: reloadedClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   351
                        self registerClassInClassLoader: reloadedClass.  
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   352
                        self registerClassInSmalltalk: reloadedClass notify: false.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   353
                    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   354
                    Smalltalk changed: #classDefinition with: reloadedClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   355
                    ^self.
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
            ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   358
        ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   359
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   360
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   361
    classes := loaders at: newClass classLoader ifAbsent: nil.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   362
    classes isNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   363
        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
   364
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   365
    classes at: newClass binaryName  put: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   366
    newClass isJavaClass ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   367
        self registerClassInClassLoader: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   368
        "/ Register class in system dictionary so it can be browsed
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   369
        "/ by system browser
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   370
        self registerClassInSmalltalk: newClass notify: true.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   371
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   372
        "/ Also register builtin classes in JavaVMData
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   373
        newClass isBuiltInClass ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   374
            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
   375
            self registerBuiltIn: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   376
        ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   377
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   378
    "/ 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
   379
    "/ 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
   380
    JavaCompiler notNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   381
       JavaCompiler recompileErroneousClassesReferringTo: newClass ignoring: newClass.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   382
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   383
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   384
    "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
   385
    "Modified: / 02-11-2011 / 18:40:52 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
3623
cfae550eeda1 Fixed #isObsolete for Java classes being replaceb by newer version(s).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3508
diff changeset
   386
    "Modified: / 19-09-2016 / 16:54:51 / 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
   387
!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   388
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   389
registerClasses: classes
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   390
    classes do:[:cls|self registerClass: cls].
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
    "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
   393
!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   394
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   395
registerClasses: classes andWait: doWait
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   396
    "Register given set of classes and if
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   397
     `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
   398
     are delivered"
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   399
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   400
    classes do:[:cls|self registerClass: cls].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   401
    doWait ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   402
        notifier waitUntilProcessed.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   403
    ]
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   404
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   405
    "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
   406
!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   407
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   408
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
   409
    ^ 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
   410
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
   411
    "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
   412
    "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
   413
!
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
   414
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
   415
unregisterClass: oldClass ignoring: ignoredClasses
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   416
    | classes |
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   417
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   418
    classes := loaders at: oldClass classLoader ifAbsent: nil.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   419
    classes notNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   420
        "/ 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
   421
        (classes includesKey: oldClass binaryName) ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   422
            "/ 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
   423
            "/ (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
   424
            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
   425
            "/ 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
   426
            classes removeKey: oldClass binaryName.
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   427
            "/ ...from class loader...
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   428
            self unregisterClassInClassLoader: oldClass.  
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   429
            "/ ...from reflection cache....
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   430
            JavaVM reflection removeJavaClassObjectForClass: oldClass.
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   431
            "/ ...and from Smalltalk dictionary
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3216
diff changeset
   432
            self unregisterClassInSmalltalk: oldClass notify: true.
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   433
        ]
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   434
    ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   435
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
   436
    "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
   437
!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   438
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   439
unregisterClassLoader: aJavaClassLoader
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   440
    | classes |
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
    classes := loaders at: aJavaClassLoader ifAbsent:[ ^ self ].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   443
    self unregisterClasses: classes values.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   444
    loaders removeKey: aJavaClassLoader.
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
    "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
   447
    "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
   448
!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   449
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   450
unregisterClasses: classes
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   451
    classes do:[:cls|self unregisterClass: cls].
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   452
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   453
    "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
   454
! !
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
!JavaClassRegistry methodsFor:'registering-private'!
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   457
2618
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   458
registerBuiltIn: class
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   459
    | nm |
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   460
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   461
    nm := class binaryName.
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   462
    nm = #'java/lang/Object' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   463
        _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
   464
        ^self.
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   465
    ].
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   466
    nm = #'java/lang/System' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   467
        _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
   468
        ^self.
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   469
    ].
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   470
    nm = #'java/lang/Class' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   471
        _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
   472
        "/ 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
   473
        "/ 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
   474
        "/ 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
   475
        "/ 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
   476
        "/ 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
   477
        "/ 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
   478
        "/ 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
   479
        "/ 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
   480
        _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
   481
2620
263045d15796 Initial support for generalized built-in class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2618
diff changeset
   482
        "/ 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
   483
        "/ JavaMirror>>createMethod...
2620
263045d15796 Initial support for generalized built-in class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2618
diff changeset
   484
        #(#'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
   485
            vm classForName: e definedBy: nil.
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   486
        ].
2618
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   487
        ^self.
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   488
    ].
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   489
    nm = #'java/lang/reflect/Constructor' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   490
        _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
   491
    ].
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   492
    nm = #'java/lang/reflect/Method' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   493
        _java_lang_reflect_Method_CLASS := class.
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   494
    ].
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   495
    nm = #'java/lang/reflect/Field' ifTrue:[
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   496
        _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
   497
    ].
263045d15796 Initial support for generalized built-in class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2618
diff changeset
   498
2618
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   499
    "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
   500
    "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
   501
!
e7757e5d593c Initial attempt to generalized builtin class support.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2578
diff changeset
   502
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   503
registerClassInClassLoader: class
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   504
    "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
   505
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   506
    "/ 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
   507
    "/ 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
   508
    "/ 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
   509
    "/ returns nil.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   510
    class classLoader notNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   511
        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
   512
    ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   513
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   514
    "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
   515
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   516
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   517
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
   518
    "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
   519
     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
   520
     Smalltalk"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   521
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   522
    | 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
   523
2526
ef415ed11871 Added JavaUnresolvedCompilationError.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2429
diff changeset
   524
    javaclass isSynthetic ifTrue:[ ^ self ].
2841
6fa1bcf9c997 JavaClass>>#name vs. #binaryName refactoring
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2734
diff changeset
   525
    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
   526
    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
   527
        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
   528
                            replaceAll:$/ with:$. ).
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2553
diff changeset
   529
    ] ifFalse:[
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2553
diff changeset
   530
        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
   531
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   532
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   533
    nameComponents size > 1 ifTrue:[
2553
cacd370c2a15 Changed usage of deprecated #copyWithoutLast: to #copyButLast:
Stefan Vogel <sv@exept.de>
parents: 2437
diff changeset
   534
        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
   535
    ] ifFalse:[
2678
c865275e48a7 Updated to match Mercurial revision a00302fe5083 with two tweaks:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2553
diff changeset
   536
        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
   537
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   538
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   539
    "/ 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
   540
    "/ 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
   541
    "/ 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
   542
    "/ 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
   543
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   544
    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
   545
    nsName := javaclass nameSpaceName.
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   546
    nsNameAsSymbol := nsName asSymbolIfInterned.
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   547
    (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
   548
        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
   549
            Class withoutUpdatingChangesDo:[
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   550
                ns := JavaPackage fullName:(nsName contents).
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   551
            ].
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   552
        ].
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
    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
   555
        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
   556
        javaclass setEnvironment: ns.
2841
6fa1bcf9c997 JavaClass>>#name vs. #binaryName refactoring
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2734
diff changeset
   557
        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
   558
    ] ifFalse:[
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   559
        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
   560
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   561
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   562
    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
   563
        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
   564
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   565
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   566
    "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
   567
    "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
   568
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   569
3235
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   570
registerClassRedefined: class
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   571
    "Class has been redefined, so we have to invalidate
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   572
     caches in coresponding java.lang.Class. Luckily enough,
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   573
     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
   574
     increase class redefinition count."
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   575
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   576
    | classObject classObjectRedefinitionCountIndex classObjectRedefinitionCount |
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   577
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   578
    classObject := JavaVM reflection javaClassObjectForClass: class.
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   579
    classObjectRedefinitionCountIndex := classObject class instVarIndexFor: #classRedefinedCount.
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   580
    classObjectRedefinitionCount := classObject instVarAt:classObjectRedefinitionCountIndex.
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   581
    classObjectRedefinitionCount := classObjectRedefinitionCount + 1.
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   582
    classObject instVarAt:classObjectRedefinitionCountIndex put: classObjectRedefinitionCount.
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   583
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   584
    "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
   585
!
6a5d85f29c3a Fixes for reloading
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3217
diff changeset
   586
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   587
unregisterClassInClassLoader: class
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   588
    "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
   589
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   590
    "/ 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
   591
    "/ 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
   592
    "/ 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
   593
    "/ 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
   594
    "/ returns nil.
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   595
    class classLoader notNil ifTrue:[
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   596
        (class classLoader instVarNamed: #classes) 
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   597
            perform: #'remove(Ljava/lang/Object;)Z' 
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   598
            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
   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
3216
1d977d2d3abb es to ClassLoader#classes list.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3072
diff changeset
   601
    "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
   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
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
   605
    "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
   606
     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
   607
2872
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   608
    | nameInSmalltalk nameInSmalltalkSymbol nameSpace |
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   609
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   610
    "/ 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
   611
    "/ 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
   612
    "/ 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
   613
    "/ This can happen for example when running tests...
2966
afd174546057 Post-merge fixes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2965
diff changeset
   614
    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
   615
2526
ef415ed11871 Added JavaUnresolvedCompilationError.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2429
diff changeset
   616
    javaclass isSynthetic ifTrue:[ ^ self ].
2872
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   617
    nameSpace := javaclass nameSpace.
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   618
    nameInSmalltalk := javaclass nameInSmalltalk.
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   619
    nameInSmalltalkSymbol := nameInSmalltalk asSymbolIfInterned.
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   620
    nameInSmalltalkSymbol notNil ifTrue:[
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2705
diff changeset
   621
        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
   622
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   623
    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
   624
        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
   625
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   626
2872
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   627
    [ 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
   628
        Smalltalk removeClass: nameSpace.
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   629
        nameSpace := nameSpace nameSpace.
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   630
    ].
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2841
diff changeset
   631
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   632
    "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
   633
    "Modified: / 17-10-2013 / 10:50:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   634
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   635
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   636
!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
   637
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   638
version_CVS
3431
82790b1e6d54 Merged with mercurial revision 4f3cc813be4 (8 changesets total)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3430
diff changeset
   639
    ^ '$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
   640
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   641
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   642
version_SVN
3623
cfae550eeda1 Fixed #isObsolete for Java classes being replaceb by newer version(s).
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3508
diff changeset
   643
    ^ '§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
   644
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   645