JavaClassReloader.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 20 Sep 2016 22:56:52 +0100
changeset 3627 5d22435da54d
parent 3508 622620308fee
permissions -rw-r--r--
Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes Instead remember such classes in a separate set when the class is registered. The set is NOT weak and does not need to. Registry holds classes strongly anyway. There's no point to recompile an obsolete class (I believe, we'll see). This yields in another ~25% speedup for Groovy classloading benchmark. https://swing.fit.cvut.cz/projects/stx-libjava/ticket/93
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: 3303
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: 3303
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
3330
b14c58b2876c Oops, moved stray reloading-related methods from stx:libjava/experiments to stx:libjava.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3324
diff changeset
    23
"{ NameSpace: Smalltalk }"
b14c58b2876c Oops, moved stray reloading-related methods from stx:libjava/experiments to stx:libjava.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3324
diff changeset
    24
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
Object subclass:#JavaClassReloader
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
	instanceVariableNames:''
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:''
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
2858
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
    32
Notification subclass:#RecompileRequest
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
    33
	instanceVariableNames:''
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
    34
	classVariableNames:''
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
    35
	poolDictionaries:''
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
    36
	privateIn:JavaClassReloader
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
    37
!
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
    38
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
    39
Notification subclass:#ReloadRequest
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
    40
	instanceVariableNames:''
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
    41
	classVariableNames:''
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
    42
	poolDictionaries:''
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
    43
	privateIn:JavaClassReloader
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
    44
!
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
    45
2830
853c11fe1ce8 wire in requestRecompile sends
Marcel Hlopko <marcel.hlopko@gmail.com>
parents: 2822
diff changeset
    46
JavaClassReloader subclass:#SingleClassReloader
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
	instanceVariableNames:'oldClass newClass mustMigrateInstances mustMigrateClass
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
		instFieldMapping staticFieldMapping'
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
	classVariableNames:''
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
	poolDictionaries:''
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
	privateIn:JavaClassReloader
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
Object subclass:#FieldMapping
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
	instanceVariableNames:'old new'
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
	classVariableNames:''
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
	poolDictionaries:''
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
	privateIn:JavaClassReloader::SingleClassReloader
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
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
!JavaClassReloader 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
    62
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
copyright
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
"
3324
a58245c0e83a Updated copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3303
diff changeset
    65
 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
    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 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
    68
3324
a58245c0e83a Updated copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3303
diff changeset
    69
 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
    70
                            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
    71
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
 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
    73
 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
    74
 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
    75
 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
    76
 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
    77
 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
    78
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
 [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
    80
     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
    81
     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
    82
     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
    83
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
"
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
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
documentation
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
    A main workhorse for reloading (updating) java classes
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
    in running system.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
    [author:]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
        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
    94
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
    [instance variables:]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
    [class variables:]
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
    [see also:]
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
!JavaClassReloader class methodsFor:'reloading'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
reload: oldClass with: newClass
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2651
diff changeset
   107
    "Update old class to match the definition of newClass"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
    ^ self new reload: oldClass with: newClass
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
    "Created: / 20-02-2012 / 23:29:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2651
diff changeset
   111
    "Modified (comment): / 14-09-2013 / 15:51:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
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: 3236
diff changeset
   112
!
0a8b9f03ffa5 Fixed class reloader in cases a top-level class has both, nested and anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3236
diff changeset
   113
3330
b14c58b2876c Oops, moved stray reloading-related methods from stx:libjava/experiments to stx:libjava.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3324
diff changeset
   114
unload: oldClass 
b14c58b2876c Oops, moved stray reloading-related methods from stx:libjava/experiments to stx:libjava.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3324
diff changeset
   115
    "Remove oldClass from the system"
b14c58b2876c Oops, moved stray reloading-related methods from stx:libjava/experiments to stx:libjava.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3324
diff changeset
   116
    ^ self new unload: oldClass
b14c58b2876c Oops, moved stray reloading-related methods from stx:libjava/experiments to stx:libjava.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3324
diff changeset
   117
b14c58b2876c Oops, moved stray reloading-related methods from stx:libjava/experiments to stx:libjava.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3324
diff changeset
   118
    "Created: / 14-09-2013 / 15:52:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b14c58b2876c Oops, moved stray reloading-related methods from stx:libjava/experiments to stx:libjava.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3324
diff changeset
   119
!
b14c58b2876c Oops, moved stray reloading-related methods from stx:libjava/experiments to stx:libjava.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3324
diff changeset
   120
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: 3236
diff changeset
   121
unload: oldClass ignoring: ignoredClasses
0a8b9f03ffa5 Fixed class reloader in cases a top-level class has both, nested and anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3236
diff changeset
   122
    "Remove oldClass from the system"
0a8b9f03ffa5 Fixed class reloader in cases a top-level class has both, nested and anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3236
diff changeset
   123
    ^ self new unload: oldClass ignoring: ignoredClasses
0a8b9f03ffa5 Fixed class reloader in cases a top-level class has both, nested and anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3236
diff changeset
   124
0a8b9f03ffa5 Fixed class reloader in cases a top-level class has both, nested and anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3236
diff changeset
   125
    "Created: / 10-10-2014 / 12:13:14 / 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
   126
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
2858
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   128
!JavaClassReloader class methodsFor:'reloading-requests'!
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   129
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   130
requestRecompile: aJavaClass
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   131
    RecompileRequest newException
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   132
        parameter: aJavaClass;
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   133
        raiseRequest
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   134
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   135
    "Created: / 08-10-2013 / 19:26:20 / Marcel Hlopko <marcel.hlopko@fit.cvut.cz>"
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   136
    "Modified: / 13-10-2013 / 20:40:09 / Marcel Hlopko <marcel.hlopko@fit.cvut.cz>"
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   137
    "Modified: / 15-10-2013 / 01:19:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   138
!
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   139
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   140
requestReload: aJavaClass
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   141
    ReloadRequest newException
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   142
        parameter: aJavaClass;
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   143
        raiseRequest
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   144
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   145
    "Created: / 08-10-2013 / 19:26:12 / Marcel Hlopko <marcel.hlopko@fit.cvut.cz>"
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   146
    "Modified: / 15-10-2013 / 01:19:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   147
! !
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   148
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
!JavaClassReloader methodsFor:'reloading'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
reload: oldClass with: newClass
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
2858
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   153
    | newClassToInstall recompileRequests reloadRequests |
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   154
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   155
    reloadRequests := Set new.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   156
    recompileRequests := Set new.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   157
    [
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   158
        newClassToInstall := SingleClassReloader new reload: oldClass with: newClass.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   159
        "Also, reload all subclasses - fields may have changed!!"
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   160
        newClassToInstall ~~ oldClass ifTrue: [
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   161
            oldClass mergeVersionsWith: newClassToInstall.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   162
            oldClass subclassesDo:[:oldSubclass|
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   163
                | newSubclass |
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
2858
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   165
                newSubclass := oldSubclass copy.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   166
                newSubclass setSuperclass: newClassToInstall.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   167
                newSubclass instSize: (newClassToInstall instSize + oldSubclass fields size).
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   168
                self requestReload: newSubclass.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   169
            ].
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   170
        ].
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   171
    ] on: RecompileRequest do:[:recompileRequest |
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   172
        "/ Catch all recompile requests
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   173
        (recompileRequests contains:[:each | each parameter == recompileRequest parameter]) ifFalse:[
3290
76d4443744ed JavaClass memory optimization (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
   174
            recompileRequests add: recompileRequest
2858
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   175
        ].
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   176
        recompileRequest proceed.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   177
    ] on: ReloadRequest do:[:reloadRequest |
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   178
        "/ Catch all reload requests
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   179
        (reloadRequests contains:[:each | each parameter == reloadRequest parameter]) ifFalse:[
3290
76d4443744ed JavaClass memory optimization (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
   180
            reloadRequests add: reloadRequest
2858
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   181
        ].
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   182
        reloadRequest proceed.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   183
    ].
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   184
    "/ Remove all reload request for classes for which there have been
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   185
    "/ recompile request as recompile implies reload...
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   186
    reloadRequests := reloadRequests reject:[:each | recompileRequests contains:[:eachRecompile | each parameter == eachRecompile parameter]].
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   187
    "/ Now execute all deferred recompile/reload requests.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   188
    recompileRequests do:[:each | each recompile ].
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   189
    reloadRequests do:[:each | each reload ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
    ^newClassToInstall.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
    "Created: / 04-04-2012 / 01:32:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2830
853c11fe1ce8 wire in requestRecompile sends
Marcel Hlopko <marcel.hlopko@gmail.com>
parents: 2822
diff changeset
   194
    "Modified: / 13-10-2013 / 20:52:58 / Marcel Hlopko <marcel.hlopko@fit.cvut.cz>"
2858
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   195
    "Modified: / 15-10-2013 / 01:16:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2651
diff changeset
   196
!
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2651
diff changeset
   197
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: 3236
diff changeset
   198
unload: oldClass ignoring: ignoredClasses
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2651
diff changeset
   199
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: 3236
diff changeset
   200
    ignoredClasses add: oldClass.
3217
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3173
diff changeset
   201
    oldClass subclassesDo:[:subclass |
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: 3236
diff changeset
   202
        (ignoredClasses includes: subclass) ifFalse:[
0a8b9f03ffa5 Fixed class reloader in cases a top-level class has both, nested and anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3236
diff changeset
   203
            JavaVM registry unregisterClass: subclass ignoring: ignoredClasses
0a8b9f03ffa5 Fixed class reloader in cases a top-level class has both, nested and anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3236
diff changeset
   204
        ].
3217
261bad2a9657 Fixes for class unloadfing: unload inner classes first.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3173
diff changeset
   205
    ].
3290
76d4443744ed JavaClass memory optimization (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
   206
    oldClass innerClassesIgnoreUnloaded do:[:innerclass |
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: 3236
diff changeset
   207
        (ignoredClasses includes: innerclass) ifFalse:[
3303
af659e602072 Fixes for class unloading.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3290
diff changeset
   208
            "/ nil out EnclosingMethod so subsequent
af659e602072 Fixes for class unloading.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3290
diff changeset
   209
            "/ calls to owningClasse would return nil
af659e602072 Fixes for class unloading.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3290
diff changeset
   210
            innerclass attributes removeKey: #EnclosingMethod ifAbsent:[].
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: 3236
diff changeset
   211
            JavaVM registry unregisterClass: innerclass ignoring: ignoredClasses
0a8b9f03ffa5 Fixed class reloader in cases a top-level class has both, nested and anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3236
diff changeset
   212
        ]
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2651
diff changeset
   213
    ].
3303
af659e602072 Fixes for class unloading.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3290
diff changeset
   214
    oldClass anonymousClassesIgnoreUnloaded do:[:anonymousClass |
af659e602072 Fixes for class unloading.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3290
diff changeset
   215
        (ignoredClasses includes: anonymousClass) ifFalse:[
af659e602072 Fixes for class unloading.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3290
diff changeset
   216
            "/ nil out EnclosingMethod so subsequent
af659e602072 Fixes for class unloading.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3290
diff changeset
   217
            "/ calls class to owningClasse would return nil
af659e602072 Fixes for class unloading.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3290
diff changeset
   218
            anonymousClass attributes removeKey: #EnclosingMethod ifAbsent:[].
af659e602072 Fixes for class unloading.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3290
diff changeset
   219
            JavaVM registry unregisterClass: anonymousClass ignoring: ignoredClasses
af659e602072 Fixes for class unloading.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3290
diff changeset
   220
        ]
af659e602072 Fixes for class unloading.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3290
diff changeset
   221
    ].
af659e602072 Fixes for class unloading.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3290
diff changeset
   222
3290
76d4443744ed JavaClass memory optimization (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
   223
    JavaVM registry allClassesDo:[:cls|
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2651
diff changeset
   224
        "/ JV: Q: Should we remove all users of the interface? Let's do it, but not
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2651
diff changeset
   225
        "/        sure if that's necessary/desirable
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2651
diff changeset
   226
        | ifaces |
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2651
diff changeset
   227
3290
76d4443744ed JavaClass memory optimization (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
   228
        ifaces := cls interfaces.
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2651
diff changeset
   229
        ifaces notNil ifTrue:[
3290
76d4443744ed JavaClass memory optimization (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
   230
            (ifaces anySatisfy:[:iface | iface == oldClass]) ifTrue:[
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: 3236
diff changeset
   231
                (ignoredClasses includes: cls) ifFalse:[
0a8b9f03ffa5 Fixed class reloader in cases a top-level class has both, nested and anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3236
diff changeset
   232
                    JavaVM registry unregisterClass: cls ignoring: ignoredClasses
0a8b9f03ffa5 Fixed class reloader in cases a top-level class has both, nested and anonymous classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3236
diff changeset
   233
                ].
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2651
diff changeset
   234
            ].
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2651
diff changeset
   235
        ].
2857
10c0fcf2d304 Fix JavaClassReloader for new naming (#name -> #binaryName)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2830
diff changeset
   236
        cls constantPool invalidateForClass: oldClass binaryName
2730
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2651
diff changeset
   237
    ]
272689c14005 Fixed removing of Java classes (issue #40)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2651
diff changeset
   238
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: 3236
diff changeset
   239
    "Created: / 10-10-2014 / 12:14:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3303
af659e602072 Fixes for class unloading.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3290
diff changeset
   240
    "Modified (format): / 15-12-2014 / 22:14:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2858
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   241
! !
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   242
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   243
!JavaClassReloader methodsFor:'reloading-requests'!
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   244
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   245
requestRecompile:aJavaClass
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   246
    ^ self class requestRecompile:aJavaClass
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   247
!
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   248
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   249
requestReload:aJavaClass
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   250
    ^ self class requestReload:aJavaClass
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   251
! !
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   252
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   253
!JavaClassReloader::RecompileRequest methodsFor:'default actions'!
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   254
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   255
defaultAction
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   256
    "the default action is to return the default value.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   257
     Subclasses may redefine this"
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   258
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   259
    ^ self recompile
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   260
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   261
    "Created: / 15-10-2013 / 00:31:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   262
!
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   263
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   264
recompile
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   265
    JavaCompiler recompile: self parameter
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   266
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   267
    "Created: / 15-10-2013 / 00:48:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   268
! !
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   269
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   270
!JavaClassReloader::ReloadRequest methodsFor:'default actions'!
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   271
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   272
defaultAction
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   273
    "the default action is to return the default value.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   274
     Subclasses may redefine this"
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   275
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   276
    ^ self reload
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   277
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   278
    "Created: / 15-10-2013 / 00:37:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   279
!
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   280
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   281
reload
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   282
    JavaVM registry registerClass: self parameter.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   283
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   284
    "Created: / 15-10-2013 / 00:49:06 / 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
   285
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   286
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   287
!JavaClassReloader::SingleClassReloader methodsFor:'private'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   288
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   289
invalidate
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   290
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   291
    | anyInvalidated |
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
    anyInvalidated := false.
3067
4bbacafb9592 Renamed JavaClassRegistry>>classesDo: to allClassesDo:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2900
diff changeset
   294
    JavaVM registry allClassesDo:[:class|
2758
06599146279d fix JavaClassReloader>>invalidate
Marcel Hlopko <marcel.hlopko@gmail.com>
parents: 2742
diff changeset
   295
        anyInvalidated := (self invalidateClass: class) | anyInvalidated.
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297
    anyInvalidated ifTrue:[ObjectMemory flushCaches].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   298
2868
90724c4fa7f8 Fix to recompile erroneous classes upon reload.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2865
diff changeset
   299
    "
90724c4fa7f8 Fix to recompile erroneous classes upon reload.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2865
diff changeset
   300
    Eclipse Compiler for Java is too smart - when a field is not accessible, it doesn't generate
90724c4fa7f8 Fix to recompile erroneous classes upon reload.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2865
diff changeset
   301
    GETFIELD instructions, it generates ATHROW which throws stx.libjava.tools.compiler.CompileError
90724c4fa7f8 Fix to recompile erroneous classes upon reload.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2865
diff changeset
   302
    (originally, it throws java.lang.Error, but we hacked it - see CompilerError static initializer.
2858
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   303
2868
90724c4fa7f8 Fix to recompile erroneous classes upon reload.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2865
diff changeset
   304
    Here we recompile all classes with CompileError - just to be safe.
90724c4fa7f8 Fix to recompile erroneous classes upon reload.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2865
diff changeset
   305
    "
2872
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2868
diff changeset
   306
    "/JavaCompiler recompileErroneousClassesReferringTo: newClass ignoring: oldClass.
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2868
diff changeset
   307
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2868
diff changeset
   308
    "Created: / 21-02-2012 / 09:47:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2868
diff changeset
   309
    "Modified: / 02-10-2013 / 23:27:59 / Marcel Hlopko <marcel.hlopko@fit.cvut.cz>"
3067
4bbacafb9592 Renamed JavaClassRegistry>>classesDo: to allClassesDo:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2900
diff changeset
   310
    "Modified: / 09-04-2014 / 18:43:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2872
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2868
diff changeset
   311
!
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2868
diff changeset
   312
3290
76d4443744ed JavaClass memory optimization (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
   313
invalidateClass: javaClass
2872
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2868
diff changeset
   314
    ^ javaClass ~~ oldClass and:[javaClass constantPool invalidateForClass: oldClass binaryName]
2353
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
    "Created: / 21-02-2012 / 09:58:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2830
853c11fe1ce8 wire in requestRecompile sends
Marcel Hlopko <marcel.hlopko@gmail.com>
parents: 2822
diff changeset
   317
    "Modified (format): / 13-10-2013 / 20:43:57 / Marcel Hlopko <marcel.hlopko@fit.cvut.cz>"
2872
3ed529d88338 Recompilation fixed (avoid endless recursion)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2868
diff changeset
   318
    "Modified: / 17-10-2013 / 02:34:07 / 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
   319
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   320
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   321
migrate
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   322
    "Possibly migrate instances and class. Return the class that should
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   323
     be installed in registry once reloader finishes his job.
3290
76d4443744ed JavaClass memory optimization (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
   324
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   325
     At this point, all references are already invalidated (see #reload)
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   326
     "
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   327
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   328
    mustMigrateInstances ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   329
        self migrateInstances.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   330
        mustMigrateClass ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   331
            self migrateClass
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   332
        ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   333
        ^newClass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   334
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   335
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   336
    mustMigrateClass ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   337
        self migrateClass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   338
        ^newClass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   339
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   340
    self updateOldClass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   341
    ^oldClass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   342
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   343
    "Created: / 20-02-2012 / 23:40:03 / 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
   344
    "Modified (comment): / 16-12-2012 / 17:39:26 / Marcel Hlopko <marcel.hlopko@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
   345
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   346
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   347
migrateClass
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   348
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   349
    "/self error:'Not yet supported'
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   350
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   351
    "Created: / 21-02-2012 / 11:04:48 / 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
   352
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   354
migrateInstance: object
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   355
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   356
    self assert: object class == oldClass.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   357
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   358
    "Created: / 30-03-2012 / 19:42:12 / 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
   359
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   360
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   361
migrateInstances
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   362
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   363
    oldClass allInstancesDo:[:i|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   364
        self migrateInstance:i.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   365
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   366
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   367
    "Created: / 21-02-2012 / 11:04:47 / 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
   368
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   369
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   370
prepare
3290
76d4443744ed JavaClass memory optimization (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
   371
    "Analyze and prepare data for reloading"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   372
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   373
    self prepareInstFieldMapping.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   374
    self prepareStaticFieldMapping.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   375
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   376
    "Created: / 20-02-2012 / 23:40: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
   377
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   378
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   379
prepareFieldMap: fields
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   380
    | map |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   381
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   382
    map := 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
   383
    fields do:[ :field | map at: field name put: field ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   384
    ^map
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   385
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   386
    "Created: / 21-02-2012 / 09:42:17 / 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
   387
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   388
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   389
prepareInstFieldMapping
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   390
    "Scans both old and new class inst fields and create a mapping.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   391
     Sets mustMigrateInstances"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   392
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   393
    | newFields |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   394
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   395
    mustMigrateInstances := false.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   396
    instFieldMapping := 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
   397
    newFields := self prepareFieldMap: newClass allFields.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   398
    oldClass fields do:[:old|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   399
        | new mapping |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   400
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   401
        new := newFields at: old name 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
   402
        new notNil ifTrue:[ newFields removeKey: old name ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   403
        mapping := FieldMapping old: old new: new.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   404
        mustMigrateInstances := mustMigrateInstances or:[mapping mustMigrate].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   405
        instFieldMapping add: mapping.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   406
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   407
    "Remaining fields are new, i.e., does not exist in
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   408
     old class. Add them to the mapping"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   409
    newFields do:[:new|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   410
        instFieldMapping add: (FieldMapping old: nil new: new).
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   411
        mustMigrateInstances := true
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   412
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   413
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   414
    "Created: / 21-02-2012 / 09:32:25 / 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
   415
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   416
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   417
prepareStaticFieldMapping
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   418
    "Scans both old and new class inst fields and create a mapping.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   419
     Sets mustMigrateInstances"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   420
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   421
    | newFields |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   422
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   423
    mustMigrateClass := false.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   424
    staticFieldMapping := 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
   425
    newFields := self prepareFieldMap: newClass allStaticFields.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   426
    oldClass staticFields do:[:old|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   427
        | new mapping |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   428
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   429
        new := newFields at: old name 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
   430
        new notNil ifTrue:[ newFields removeKey: old name ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   431
        mapping := FieldMapping old: old new: new.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   432
        mustMigrateClass:= mustMigrateClass or:[mapping mustMigrate].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   433
        staticFieldMapping add: mapping.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   434
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   435
    "Remaining fields are new, i.e., does not exist in
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   436
     old class. Add them to the mapping"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   437
    newFields do:[:new|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   438
        staticFieldMapping add: (FieldMapping old: nil new: new).
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   439
        mustMigrateClass:= true
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   440
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   441
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   442
    "Created: / 21-02-2012 / 09:45:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2892
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   443
!
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   444
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   445
updateOldClass
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   446
    "At this point we know that both classes have same layout. So we can
3290
76d4443744ed JavaClass memory optimization (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
   447
     simply copy methods and other info from new class to old one.
2892
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   448
     References must be flushed anyway!! We need to copy constant pool over,
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   449
     indices may have changed. And we will copy fields as well, types may
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   450
     have been generalized.
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   451
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   452
     Also, here we also track method added and removed and if either
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   453
     one is an overload, request recompile of all dependent classes.
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   454
    "
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   455
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   456
    | oldMethods oldMethodsRemoved newMethods newMethodsAdded |
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   457
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   458
    oldMethods := oldClass methodDictionary.
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   459
    oldMethodsRemoved := oldMethods values asSet.
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   460
    newMethods := newClass methodDictionary copy.
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   461
    newMethodsAdded := Set new.
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   462
    newMethods keysDo:[:selector|
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   463
        | oldM newM |
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   464
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   465
        oldM := oldMethods at: selector ifAbsent:[nil].
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   466
        newM := newMethods at: selector.
3419
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   467
        oldM notNil ifTrue:[ 
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   468
            oldMethodsRemoved remove: oldM
2892
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   469
        ] ifFalse:[
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   470
            newMethodsAdded add: newM.
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   471
        ].
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   472
    ].
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   473
3419
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   474
    oldClass isInitialized ifTrue:[ newClass classInit ].
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   475
2892
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   476
    newMethods do:[:m|m setJavaClass: oldClass].
3627
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3508
diff changeset
   477
    oldClass setAccessFlags: newClass accessFlags.    
2892
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   478
    oldClass setAttributes: newClass attributes.
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   479
    oldClass annotations: newClass annotations.
3419
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   480
    oldClass setMethodDictionary: newMethods constantPool: newClass constantPool.
2892
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   481
    oldClass setSource: newClass sourceString.
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   482
    oldClass setFields: newClass fields.
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   483
    oldClass setStaticFields: newClass staticFields.
3627
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3508
diff changeset
   484
    "Flush all proxies, they may refer to old static methods"
2892
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   485
    oldClass class setMethodDictionary: MethodDictionary new.
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   486
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   487
    oldMethodsRemoved do:[:oldMRemoved |
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   488
        oldMRemoved isJavaMethod ifTrue:[
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   489
            self requestRecompileSendersOf: oldMRemoved.
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   490
        ].
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   491
    ].
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   492
    newMethodsAdded do:[:newMAdded |
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   493
        | overloads name |
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   494
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   495
        newMAdded isStatic ifFalse:[
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   496
            overloads := Set new.
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   497
            name := newMAdded name.
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   498
            self withAllSuperclassesAndInterfacesOf: newMAdded javaClass do:[:cls|
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   499
                cls methodDictionary keysAndValuesDo:[:selector :method |
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   500
                    (method ~~ newMAdded and:[method isStatic not and:[method name = name]]) ifTrue:[
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   501
                        overloads add: method.
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   502
                    ].
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   503
                ].
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   504
            ].
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   505
            overloads do:[:overloadedM |
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   506
                self requestRecompileSendersOf: overloadedM.
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   507
            ].
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   508
        ]
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   509
    ].
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   510
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   511
    "Created: / 16-12-2012 / 17:36:52 / Marcel Hlopko <marcel.hlopko@fit.cvut.cz>"
80bc02e62077 - JavaClassReloader
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2891
diff changeset
   512
    "Modified: / 12-10-2013 / 19:20:03 / Marcel Hlopko <marcel.hlopko@fit.cvut.cz>"
3627
5d22435da54d Issue #93 [3/3]: Avoid (expensive) registry scan to find all erroneous classes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3508
diff changeset
   513
    "Modified: / 21-09-2016 / 09:40:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2858
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   514
! !
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   515
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   516
!JavaClassReloader::SingleClassReloader methodsFor:'private-helpers'!
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   517
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   518
withAllSuperclassesAndInterfacesOf: aJavaClass do: aBlock
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   519
    | queue seen |
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   520
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   521
    queue := OrderedCollection with: aJavaClass.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   522
    seen := Set new.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   523
    [ queue isEmpty ] whileFalse:[
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   524
        | cls |
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   525
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   526
        cls := queue removeFirst.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   527
        (seen includes: cls) ifFalse:[
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   528
            seen add: cls.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   529
            aBlock value: cls.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   530
            queue addAll: cls interfaces.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   531
            cls superclass ~~ JavaObject ifTrue:[
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   532
                queue add: cls superclass.
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   533
            ].
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   534
        ].
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   535
    ].
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   536
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   537
    "Created: / 15-10-2013 / 01:55:36 / 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
   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
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   540
!JavaClassReloader::SingleClassReloader methodsFor:'reloading'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   541
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   542
reload
3419
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   543
    | reloadedClass |
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   544
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   545
    self prepare.
3419
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   546
    oldClass synchronized:[
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   547
        newClass synchronized:[
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   548
            self invalidate.
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   549
            reloadedClass := self migrate.
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   550
        ]
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   551
    ].
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   552
    ^ reloadedClass
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
    "Created: / 20-02-2012 / 23:29:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3419
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   555
    "Modified: / 02-04-2015 / 08:47:14 / 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
   556
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   557
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   558
reload: oldClassA with: newClassA
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   559
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   560
    oldClass := oldClassA.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   561
    newClass := newClassA.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   562
    ^ self reload.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   563
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   564
    "Created: / 20-02-2012 / 23:29:37 / 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
   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
2858
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   567
!JavaClassReloader::SingleClassReloader methodsFor:'reloading-requests'!
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   568
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   569
requestRecompileSendersOf: givenMethod
3067
4bbacafb9592 Renamed JavaClassRegistry>>classesDo: to allClassesDo:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2900
diff changeset
   570
    JavaVM registry allClassesDo:[:cls|
3419
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   571
        "/ Avoid recursive recompilation for the reloaded class itself, 
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   572
        "/ it'll go soon...
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   573
        cls == oldClass ifFalse:[ 
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   574
            | recompile |
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   575
            recompile := cls constantPool contains:[:entry |
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   576
                            entry isJavaRef
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   577
                                and:[ entry isJavaMethodRef
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   578
                                and:[entry classRef name = givenMethod javaClass binaryName
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   579
                                and:[(entry nameAndType name , entry nameAndType descriptor) = givenMethod selector]]]].
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   580
            recompile ifTrue:[
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   581
                self requestRecompile: cls.
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   582
            ].
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   583
        ]
2858
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   584
    ].
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   585
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   586
    "Created: / 15-10-2013 / 01:52:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3419
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   587
    "Modified: / 02-04-2015 / 05:56:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
aa30aeb2ee07 Fixed (some) race conditions during class reload
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3330
diff changeset
   588
    "Modified (format): / 02-04-2015 / 08:42:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2858
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   589
! !
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   590
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   591
!JavaClassReloader::SingleClassReloader::FieldMapping 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
   592
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   593
old: old new:new
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   594
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   595
    ^self new old: old new: new.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   596
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   597
    "Created: / 21-02-2012 / 09:20: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
   598
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   599
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   600
!JavaClassReloader::SingleClassReloader::FieldMapping 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
   601
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   602
new
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   603
    ^ new
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   604
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   605
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   606
new:something
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   607
    new := something.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   608
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   609
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   610
old
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   611
    ^ old
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   612
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   613
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   614
old:something
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   615
    old := something.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   616
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   617
3290
76d4443744ed JavaClass memory optimization (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
   618
old:oldArg new:newArg
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   619
    old := oldArg.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   620
    new := newArg.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   621
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   622
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   623
!JavaClassReloader::SingleClassReloader::FieldMapping methodsFor:'queries'!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   624
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   625
mustMigrate
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   626
    "Returns true if the field must be migrated, false otherwise"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   627
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   628
    | oldD newD |
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   629
3290
76d4443744ed JavaClass memory optimization (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
   630
    (old isNil or:[new 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
   631
        ^ true "Either one is missing, must migrate"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   632
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   633
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   634
    old index ~~ new index ifTrue:[
2858
3a85f55763e2 Implemented JavaClassReloader>>#requestReload & #requestRecompile (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2857
diff changeset
   635
        ^ true "Offsets changed, must migrate"
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   636
    ].
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
    oldD := old descriptor.
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   639
    newD := new descriptor.
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
    oldD = newD ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   642
        ^false"Same descriptor, the easy case"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   643
    ].
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
    (oldD first == $L and: [newD first == $L]) ifTrue:[
2822
751597d0526a do not migrate instances when type of the field is generalized
Marcel Hlopko <marcel.hlopko@gmail.com>
parents: 2818
diff changeset
   646
        (oldD = newD) ifTrue: [ ^ true ] ifFalse: [
2899
1dbc311e1d74 Bugfix JavaClassReloader: handle missing/mis-spelled classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2892
diff changeset
   647
            ^ [
3290
76d4443744ed JavaClass memory optimization (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
   648
                (old typeClass includesBehavior: new typeClass) not.
2899
1dbc311e1d74 Bugfix JavaClassReloader: handle missing/mis-spelled classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2892
diff changeset
   649
            ] on: JAVA java lang ClassNotFoundException do:[
1dbc311e1d74 Bugfix JavaClassReloader: handle missing/mis-spelled classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2892
diff changeset
   650
                false
1dbc311e1d74 Bugfix JavaClassReloader: handle missing/mis-spelled classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2892
diff changeset
   651
            ]
2822
751597d0526a do not migrate instances when type of the field is generalized
Marcel Hlopko <marcel.hlopko@gmail.com>
parents: 2818
diff changeset
   652
        ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   653
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   654
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   655
    1 to: (oldD size min: newD size) do:[:i|
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   656
        ((oldD at: i) == $L and: [ (newD at: i) == $L ]) ifTrue:[
2822
751597d0526a do not migrate instances when type of the field is generalized
Marcel Hlopko <marcel.hlopko@gmail.com>
parents: 2818
diff changeset
   657
            (oldD = newD) ifTrue: [ ^ true ] ifFalse: [
2899
1dbc311e1d74 Bugfix JavaClassReloader: handle missing/mis-spelled classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2892
diff changeset
   658
                ^ [
3290
76d4443744ed JavaClass memory optimization (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
   659
                    (old typeClass includesBehavior: new typeClass) not.
2899
1dbc311e1d74 Bugfix JavaClassReloader: handle missing/mis-spelled classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2892
diff changeset
   660
                ] on: JAVA java lang ClassNotFoundException do:[
1dbc311e1d74 Bugfix JavaClassReloader: handle missing/mis-spelled classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2892
diff changeset
   661
                    false
1dbc311e1d74 Bugfix JavaClassReloader: handle missing/mis-spelled classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2892
diff changeset
   662
                ]
3290
76d4443744ed JavaClass memory optimization (part 1)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3244
diff changeset
   663
            ].
2353
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   664
        ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   665
        ((oldD at: i) ~~ $[ or: [ (newD at: i) ~~ $[ ]) ifTrue:[
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   666
            ^true"Different primitive/array types, must migrate"
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   667
        ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   668
    ].
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   669
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   670
    ^false
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   671
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   672
    "Created: / 21-02-2012 / 10:57:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2822
751597d0526a do not migrate instances when type of the field is generalized
Marcel Hlopko <marcel.hlopko@gmail.com>
parents: 2818
diff changeset
   673
    "Modified: / 12-10-2013 / 19:26:19 / Marcel Hlopko <marcel.hlopko@fit.cvut.cz>"
2899
1dbc311e1d74 Bugfix JavaClassReloader: handle missing/mis-spelled classes.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2892
diff changeset
   674
    "Modified: / 28-10-2013 / 11:26: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
   675
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   676
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   677
!JavaClassReloader 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
   678
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   679
version_CVS
3412
df11bb428463 Merged with mercurial revision 4f3cc813be4 (8 changesets total)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3360
diff changeset
   680
    ^ '$Header: /cvs/stx/stx/libjava/JavaClassReloader.st,v 1.5 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
   681
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   682
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   683
version_HG
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   684
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   685
    ^ '$Changeset: <not expanded> $'
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   686
!
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   687
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   688
version_SVN
2731
13f5be2bf83b Merged d87e89dd5276 and fe83a843a7bf (branch default - CVS HEAD)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2711 2678
diff changeset
   689
    ^ '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
   690
! !
fa7400d022a0 Updated to https://swing.fit.cvut.cz/hg/stx.libjava/rev/31f8b995905e
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   691