src/JavaClassRegistry.st
author vranyj1
Fri, 25 Nov 2011 08:02:14 +0000
branchjk_new_structure
changeset 1155 d6f6d5fc0343
parent 1152 040cba55a7d2
child 1253 0ce45e884e08
permissions -rw-r--r--
(none)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1026
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
     1
"
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
     2
 COPYRIGHT (c) 1996-2011 by Claus Gittinger
1152
040cba55a7d2 Copyright fixes
vranyj1
parents: 1120
diff changeset
     3
1155
vranyj1
parents: 1152
diff changeset
     4
 New code and modifications done at SWING Research Group [1]:
1152
040cba55a7d2 Copyright fixes
vranyj1
parents: 1120
diff changeset
     5
1026
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
     6
 COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
     7
                            SWING Research Group, Czech Technical University in Prague
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
     8
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
     9
 This software is furnished under a license and may be used
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    10
 only in accordance with the terms of that license and with the
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    11
 inclusion of the above copyright notice.   This software may not
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    12
 be provided or otherwise made available to, or used by, any
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    13
 other person.  No title to or ownership of the software is
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    14
 hereby transferred.
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    15
1155
vranyj1
parents: 1152
diff changeset
    16
 [1] Code written at SWING Research Group contains a signature
vranyj1
parents: 1152
diff changeset
    17
     of one of the above copright owners. For exact set of such code,
vranyj1
parents: 1152
diff changeset
    18
     see the differences between this version and version stx:libjava
1152
040cba55a7d2 Copyright fixes
vranyj1
parents: 1120
diff changeset
    19
     as of 1.9.2010
1026
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    20
"
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    21
"{ Package: 'stx:libjava' }"
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    22
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    23
Object subclass:#JavaClassRegistry
1059
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    24
	instanceVariableNames:'vm loaders'
1026
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    25
	classVariableNames:''
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    26
	poolDictionaries:''
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    27
	category:'Languages-Java-Support'
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    28
!
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    29
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    30
!JavaClassRegistry class methodsFor:'documentation'!
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    31
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    32
copyright
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    33
"
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    34
 COPYRIGHT (c) 1996-2011 by Claus Gittinger
1152
040cba55a7d2 Copyright fixes
vranyj1
parents: 1120
diff changeset
    35
1155
vranyj1
parents: 1152
diff changeset
    36
 New code and modifications done at SWING Research Group [1]:
1152
040cba55a7d2 Copyright fixes
vranyj1
parents: 1120
diff changeset
    37
1026
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    38
 COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    39
                            SWING Research Group, Czech Technical University in Prague
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    40
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    41
 This software is furnished under a license and may be used
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    42
 only in accordance with the terms of that license and with the
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    43
 inclusion of the above copyright notice.   This software may not
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    44
 be provided or otherwise made available to, or used by, any
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    45
 other person.  No title to or ownership of the software is
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    46
 hereby transferred.
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    47
1155
vranyj1
parents: 1152
diff changeset
    48
 [1] Code written at SWING Research Group contains a signature
vranyj1
parents: 1152
diff changeset
    49
     of one of the above copright owners. For exact set of such code,
vranyj1
parents: 1152
diff changeset
    50
     see the differences between this version and version stx:libjava
1152
040cba55a7d2 Copyright fixes
vranyj1
parents: 1120
diff changeset
    51
     as of 1.9.2010
1026
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    52
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    53
"
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    54
! !
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    55
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    56
!JavaClassRegistry class methodsFor:'instance creation'!
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    57
1059
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    58
for: aJavaVM
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    59
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    60
    ^self new setVM: aJavaVM.
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    61
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    62
    "Created: / 21-12-2010 / 19:42:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    63
!
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    64
1026
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    65
new
1059
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    66
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    67
    ^ self basicNew initialize.
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    68
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    69
    "Modified (format): / 30-10-2011 / 12:07:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1026
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    70
! !
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
    71
1037
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
    72
!JavaClassRegistry methodsFor:'accessing'!
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
    73
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
    74
classForName: className loader: classLoader ifAbsent: aBlock 
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
    75
    "Get class loaded by given classLoader from registry or evaluate aBlock if class is not yet registered"
1038
bf2ece5a5362 Few fixes
vranyj1
parents: 1037
diff changeset
    76
1059
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    77
    | classes class |
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    78
1062
69aac7194016 Fixes in classloaders to make Groovy running (again)
vranyj1
parents: 1060
diff changeset
    79
    self assert: (className includes: $.) not.
69aac7194016 Fixes in classloaders to make Groovy running (again)
vranyj1
parents: 1060
diff changeset
    80
1059
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    81
    "Classes loaded by primordial classloader are always
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    82
     used"
1038
bf2ece5a5362 Few fixes
vranyj1
parents: 1037
diff changeset
    83
1059
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    84
    classLoader notNil ifTrue:[
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    85
        classes := loaders at: nil ifAbsent: nil.
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    86
        class := classes at: className ifAbsent: nil.
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    87
        class notNil ifTrue:[
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    88
            ^class.
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    89
        ]
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    90
    ].
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    91
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    92
    "No bootstrap class found, search given classloader"
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
    93
    classes := loaders at: classLoader ifAbsent: [^aBlock value].
1038
bf2ece5a5362 Few fixes
vranyj1
parents: 1037
diff changeset
    94
    ^classes at: className ifAbsent: aBlock
1037
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
    95
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
    96
    "Modified: / 21-10-2011 / 12:39:04 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
    97
    "Created: / 23-10-2011 / 11:40:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
    98
!
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
    99
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   100
classForName: className loader: classLoader ifAbsentPut: block 
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   101
    "Get class loaded by classLoader from registry. if absent block is evaluated and resulting class in registered in registry, "
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   102
    
1073
e842ab17fe16 quite big class loaders rewrite.. javavm/groovy boots, almost all tests pass.. hope you will like it..
hlopkmar
parents: 1062
diff changeset
   103
    | class |
1062
69aac7194016 Fixes in classloaders to make Groovy running (again)
vranyj1
parents: 1060
diff changeset
   104
    self assert: (className includes: $.) not.
1073
e842ab17fe16 quite big class loaders rewrite.. javavm/groovy boots, almost all tests pass.. hope you will like it..
hlopkmar
parents: 1062
diff changeset
   105
     "if class is already registered with the same cl, just return it"
e842ab17fe16 quite big class loaders rewrite.. javavm/groovy boots, almost all tests pass.. hope you will like it..
hlopkmar
parents: 1062
diff changeset
   106
    class := self classNamed: className loader: classLoader.
e842ab17fe16 quite big class loaders rewrite.. javavm/groovy boots, almost all tests pass.. hope you will like it..
hlopkmar
parents: 1062
diff changeset
   107
    class notNil ifTrue: [ ^ class ].
e842ab17fe16 quite big class loaders rewrite.. javavm/groovy boots, almost all tests pass.. hope you will like it..
hlopkmar
parents: 1062
diff changeset
   108
    "if java vm is booted, nil class loader means system class loader, lets check it too"
e842ab17fe16 quite big class loaders rewrite.. javavm/groovy boots, almost all tests pass.. hope you will like it..
hlopkmar
parents: 1062
diff changeset
   109
    (vm booted and: [classLoader isNil]) ifTrue: [class := self classNamed: className loader: vm systemClassLoader. class notNil ifTrue: [^class]].
e842ab17fe16 quite big class loaders rewrite.. javavm/groovy boots, almost all tests pass.. hope you will like it..
hlopkmar
parents: 1062
diff changeset
   110
     "otherwise evaluate block"
e842ab17fe16 quite big class loaders rewrite.. javavm/groovy boots, almost all tests pass.. hope you will like it..
hlopkmar
parents: 1062
diff changeset
   111
    class := block value.
e842ab17fe16 quite big class loaders rewrite.. javavm/groovy boots, almost all tests pass.. hope you will like it..
hlopkmar
parents: 1062
diff changeset
   112
    class notNil ifTrue: [
e842ab17fe16 quite big class loaders rewrite.. javavm/groovy boots, almost all tests pass.. hope you will like it..
hlopkmar
parents: 1062
diff changeset
   113
    self registerClass: class.].
e842ab17fe16 quite big class loaders rewrite.. javavm/groovy boots, almost all tests pass.. hope you will like it..
hlopkmar
parents: 1062
diff changeset
   114
    ^ class.
1037
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   115
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   116
    "Created: / 21-10-2011 / 12:00:30 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   117
    "Created: / 23-10-2011 / 11:36:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1073
e842ab17fe16 quite big class loaders rewrite.. javavm/groovy boots, almost all tests pass.. hope you will like it..
hlopkmar
parents: 1062
diff changeset
   118
    "Modified: / 02-11-2011 / 17:29:20 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
1037
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   119
!
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   120
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   121
classNamed: className
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   122
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   123
    "Return a class for given classname loaded by 'current classloader' or 
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   124
     nil if not yet loaded"
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   125
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   126
    ^self classNamed: className loader: JavaClassReader classLoaderQuerySignal query
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   127
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   128
    "Created: / 23-10-2011 / 12:23:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   129
!
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   130
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   131
classNamed: className loader: classLoader
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   132
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   133
    "Return a class for given classname loaded by given classloader or 
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   134
     nil if not yet loaded"
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   135
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   136
    ^self classForName: className loader: classLoader ifAbsent:[nil].
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   137
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   138
    "Created: / 23-10-2011 / 12:23:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1039
vranyj1
parents: 1038
diff changeset
   139
!
vranyj1
parents: 1038
diff changeset
   140
vranyj1
parents: 1038
diff changeset
   141
classes
vranyj1
parents: 1038
diff changeset
   142
vranyj1
parents: 1038
diff changeset
   143
    ^Iterator on:[:whatToDo|self classesDo: whatToDo]
vranyj1
parents: 1038
diff changeset
   144
vranyj1
parents: 1038
diff changeset
   145
    "Created: / 23-10-2011 / 20:14:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1037
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   146
! !
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   147
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   148
!JavaClassRegistry methodsFor:'class loading'!
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   149
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   150
loadFile: aFilename 
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   151
    "reads a class from aFilename, installs and returns it."
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   152
    
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   153
    | aClass |
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   154
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   155
    self breakPoint: #mh.
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   156
    aClass := JavaClassReader readFile: aFilename ignoring: Set new.
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   157
    aClass isJavaClass ifFalse:[self breakPoint:#mh].
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   158
    self registerClass: aClass.
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   159
    ^ aClass.
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   160
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   161
    "Created: / 15-04-1996 / 14:58:53 / cg"
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   162
    "Modified: / 12-05-1998 / 22:06:52 / cg"
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   163
    "Modified: / 23-10-2011 / 11:55:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   164
!
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   165
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   166
loadStream: javaClassDataStream loader: aJavaClassLoader 
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   167
    "reads a class from aStream and returns it.
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   168
     The JavaClass is installed as global.
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   169
     If new classes are required to be loaded, aClassLoader is
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   170
     asked to do it."
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   171
    
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   172
    | javaClass |
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   173
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   174
    self breakPoint: #mh.
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   175
    JavaClassReader classLoaderQuerySignal answer: aJavaClassLoader
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   176
        do: [
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   177
            javaClass := JavaClassReader readStream: javaClassDataStream
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   178
                        ignoring: (Set new).
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   179
            javaClass 
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   180
                ifNil: [
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   181
                    Logger 
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   182
                        log: 'JavaClassReader was not able to read given data stream'
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   183
                        severity: #warn
1059
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   184
                        facility: #JVM.
1037
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   185
                    self breakPoint: #mh.
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   186
                    ^ nil.
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   187
                ].
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   188
            javaClass isJavaClass ifFalse: [ self breakPoint: #mh. ].
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   189
            javaClass classLoader: aJavaClassLoader.
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   190
            self registerClass: javaClass.
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   191
        ].
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   192
    ^ javaClass
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   193
1059
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   194
    "Modified: / 30-10-2011 / 12:24:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1037
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   195
! !
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   196
1039
vranyj1
parents: 1038
diff changeset
   197
!JavaClassRegistry methodsFor:'enumerating'!
vranyj1
parents: 1038
diff changeset
   198
vranyj1
parents: 1038
diff changeset
   199
classesDo: aBlock
vranyj1
parents: 1038
diff changeset
   200
1059
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   201
    loaders do:[:classes|
1039
vranyj1
parents: 1038
diff changeset
   202
        classes do:[:class|
vranyj1
parents: 1038
diff changeset
   203
            aBlock value: class
vranyj1
parents: 1038
diff changeset
   204
        ]        
vranyj1
parents: 1038
diff changeset
   205
    ]
vranyj1
parents: 1038
diff changeset
   206
vranyj1
parents: 1038
diff changeset
   207
    "Created: / 23-10-2011 / 20:13:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
vranyj1
parents: 1038
diff changeset
   208
! !
vranyj1
parents: 1038
diff changeset
   209
1037
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   210
!JavaClassRegistry methodsFor:'helpers'!
1026
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
   211
1032
c3085c73e150 just refactoring registry
hlopkmar
parents: 1030
diff changeset
   212
addClassLoader: aJavaClassLoader
1027
43dc608e14aa another dose of fixes, still not able to boot javavm
hlopkmar
parents: 1026
diff changeset
   213
1059
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   214
loaders at: aJavaClassLoader put: Dictionary new.
1032
c3085c73e150 just refactoring registry
hlopkmar
parents: 1030
diff changeset
   215
!
c3085c73e150 just refactoring registry
hlopkmar
parents: 1030
diff changeset
   216
c3085c73e150 just refactoring registry
hlopkmar
parents: 1030
diff changeset
   217
getClassesDefinedBy:classLoader 
1059
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   218
    ^loaders at: classLoader ifAbsent: [nil].
1026
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
   219
!
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
   220
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
   221
removeClassLoader: aJavaClassLoader 
1059
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   222
    loaders removeKey: aJavaClassLoader.
1026
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
   223
! !
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
   224
1032
c3085c73e150 just refactoring registry
hlopkmar
parents: 1030
diff changeset
   225
!JavaClassRegistry methodsFor:'initialization'!
c3085c73e150 just refactoring registry
hlopkmar
parents: 1030
diff changeset
   226
c3085c73e150 just refactoring registry
hlopkmar
parents: 1030
diff changeset
   227
flush
1045
6b11c34520f2 JavaClassRegistry: keep classloaders in WeakIdentityDictionary to allow classloaders to be GCd
vranyj1
parents: 1039
diff changeset
   228
6b11c34520f2 JavaClassRegistry: keep classloaders in WeakIdentityDictionary to allow classloaders to be GCd
vranyj1
parents: 1039
diff changeset
   229
    self initialize.
6b11c34520f2 JavaClassRegistry: keep classloaders in WeakIdentityDictionary to allow classloaders to be GCd
vranyj1
parents: 1039
diff changeset
   230
1059
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   231
    "Modified: / 30-10-2011 / 12:06:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1032
c3085c73e150 just refactoring registry
hlopkmar
parents: 1030
diff changeset
   232
!
c3085c73e150 just refactoring registry
hlopkmar
parents: 1030
diff changeset
   233
c3085c73e150 just refactoring registry
hlopkmar
parents: 1030
diff changeset
   234
initialize
1059
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   235
    loaders := WeakIdentityDictionary new.
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   236
    loaders at: nil put: Dictionary new.
1045
6b11c34520f2 JavaClassRegistry: keep classloaders in WeakIdentityDictionary to allow classloaders to be GCd
vranyj1
parents: 1039
diff changeset
   237
6b11c34520f2 JavaClassRegistry: keep classloaders in WeakIdentityDictionary to allow classloaders to be GCd
vranyj1
parents: 1039
diff changeset
   238
    "Modified: / 24-10-2011 / 16:42:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1059
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   239
!
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   240
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   241
setVM: aJavaVM
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   242
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   243
    "Now, aJavaVM == JavaVM (i.e, the class JavaVM 
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   244
    itself, not its instance)"
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   245
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   246
    vm := aJavaVM
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   247
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   248
    "Created: / 21-12-2010 / 19:44:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1032
c3085c73e150 just refactoring registry
hlopkmar
parents: 1030
diff changeset
   249
! !
c3085c73e150 just refactoring registry
hlopkmar
parents: 1030
diff changeset
   250
1037
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   251
!JavaClassRegistry methodsFor:'registering'!
1032
c3085c73e150 just refactoring registry
hlopkmar
parents: 1030
diff changeset
   252
1037
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   253
registerClass: aJavaClass
1045
6b11c34520f2 JavaClassRegistry: keep classloaders in WeakIdentityDictionary to allow classloaders to be GCd
vranyj1
parents: 1039
diff changeset
   254
    | classes |
1036
4ff03464c3b3 refactored registry..
hlopkmar
parents: 1035
diff changeset
   255
1062
69aac7194016 Fixes in classloaders to make Groovy running (again)
vranyj1
parents: 1060
diff changeset
   256
    self assert: (aJavaClass name includes: $.) not.
1059
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   257
    loaders keysAndValuesDo:[:loader :classes|
1057
vranyj1
parents: 1053
diff changeset
   258
vranyj1
parents: 1053
diff changeset
   259
        (classes includesKey: aJavaClass name) ifTrue:[
1058
1db06119bf3e Temporary commit (fixing class loaders - classes gets registered twice)
vranyj1
parents: 1057
diff changeset
   260
            loader == aJavaClass classLoader ifTrue:[
1db06119bf3e Temporary commit (fixing class loaders - classes gets registered twice)
vranyj1
parents: 1057
diff changeset
   261
                (classes at: aJavaClass name) ~~ aJavaClass ifTrue:[
1db06119bf3e Temporary commit (fixing class loaders - classes gets registered twice)
vranyj1
parents: 1057
diff changeset
   262
                    self error:'Trying to register class twice!!'
1db06119bf3e Temporary commit (fixing class loaders - classes gets registered twice)
vranyj1
parents: 1057
diff changeset
   263
                ].
1db06119bf3e Temporary commit (fixing class loaders - classes gets registered twice)
vranyj1
parents: 1057
diff changeset
   264
            ] ifFalse:[
1120
b65e199200a4 Fire breakpoint for JV only if class is not artifical Groovy script class (avoids annoying false-positive breakpoint)
vranyj1
parents: 1073
diff changeset
   265
                ((aJavaClass name == #Script1) 
b65e199200a4 Fire breakpoint for JV only if class is not artifical Groovy script class (avoids annoying false-positive breakpoint)
vranyj1
parents: 1073
diff changeset
   266
                    and:[aJavaClass superclass name == #'groovy/lang/Script']) ifFalse:[
b65e199200a4 Fire breakpoint for JV only if class is not artifical Groovy script class (avoids annoying false-positive breakpoint)
vranyj1
parents: 1073
diff changeset
   267
                        self breakPoint: #jv.
b65e199200a4 Fire breakpoint for JV only if class is not artifical Groovy script class (avoids annoying false-positive breakpoint)
vranyj1
parents: 1073
diff changeset
   268
                    ]
1057
vranyj1
parents: 1053
diff changeset
   269
            ]
vranyj1
parents: 1053
diff changeset
   270
        ]                        
vranyj1
parents: 1053
diff changeset
   271
    ].
vranyj1
parents: 1053
diff changeset
   272
1059
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   273
    classes := loaders at: aJavaClass classLoader ifAbsent: nil.
1045
6b11c34520f2 JavaClassRegistry: keep classloaders in WeakIdentityDictionary to allow classloaders to be GCd
vranyj1
parents: 1039
diff changeset
   274
    classes isNil ifTrue:[
1059
22fe06c9e367 Fixes in classloaders
vranyj1
parents: 1058
diff changeset
   275
        classes := loaders at: aJavaClass classLoader put: Dictionary new.
1045
6b11c34520f2 JavaClassRegistry: keep classloaders in WeakIdentityDictionary to allow classloaders to be GCd
vranyj1
parents: 1039
diff changeset
   276
    ].
6b11c34520f2 JavaClassRegistry: keep classloaders in WeakIdentityDictionary to allow classloaders to be GCd
vranyj1
parents: 1039
diff changeset
   277
    classes at: aJavaClass name put: aJavaClass.
1036
4ff03464c3b3 refactored registry..
hlopkmar
parents: 1035
diff changeset
   278
1037
3dc5755c5fe4 JavaClassRegistry refactored
vranyj1
parents: 1036
diff changeset
   279
    "Created: / 23-10-2011 / 11:53:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1073
e842ab17fe16 quite big class loaders rewrite.. javavm/groovy boots, almost all tests pass.. hope you will like it..
hlopkmar
parents: 1062
diff changeset
   280
    "Modified: / 02-11-2011 / 18:40:52 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
1120
b65e199200a4 Fire breakpoint for JV only if class is not artifical Groovy script class (avoids annoying false-positive breakpoint)
vranyj1
parents: 1073
diff changeset
   281
    "Modified: / 16-11-2011 / 23:57:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1026
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
   282
! !
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
   283
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
   284
!JavaClassRegistry class methodsFor:'documentation'!
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
   285
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
   286
version_SVN
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
   287
    ^ '$Id$'
5badd1d31864 introduced JavaClassRegistry, taken loading responsibilities from JavaClassReader, got rid of stringConstants and started using StringRefs.. Bugs very likely :)
hlopkmar
parents:
diff changeset
   288
! !