src/JavaClassRegistry.st
branchjk_new_structure
changeset 1372 dea574a1b6b3
parent 1368 5f502e712403
child 1377 79eafebce880
equal deleted inserted replaced
1371:90a466f3d078 1372:dea574a1b6b3
   248     "Created: / 21-12-2010 / 19:44:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   248     "Created: / 21-12-2010 / 19:44:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   249 ! !
   249 ! !
   250 
   250 
   251 !JavaClassRegistry methodsFor:'registering'!
   251 !JavaClassRegistry methodsFor:'registering'!
   252 
   252 
   253 registerClass: aJavaClass
   253 registerClass: newClass
   254     | classes |
   254     | classes oldClass |
   255 
   255 
   256     self assert: (aJavaClass name includes: $.) not.
   256     self assert: (newClass name includes: $.) not.
   257     loaders keysAndValuesDo:[:loader :classes|
   257     loaders keysAndValuesDo:[:loader :classesPerLoader|
   258 
   258 
   259         (classes includesKey: aJavaClass name) ifTrue:[
   259         (classesPerLoader includesKey: newClass name) ifTrue:[
   260             loader == aJavaClass classLoader ifTrue:[
   260             loader == newClass classLoader ifTrue:[
   261                 (classes at: aJavaClass name) ~~ aJavaClass ifTrue:[
   261                 (oldClass := classesPerLoader at: newClass name) ~~ newClass ifTrue:[
   262                     self breakPoint:#jv info: 'Trying to register class twice!!'
   262                     "Class already exists, reload & reinstall"
       
   263                     classesPerLoader
       
   264                         at: newClass name 
       
   265                         put: (JavaClassReloader reload: oldClass with: newClass).
       
   266                     ^self.                    
   263                 ].
   267                 ].
   264             ] ifFalse:[
   268             ] ifFalse:[
   265                 ((aJavaClass name == #Script1) 
   269                 ((newClass name == #Script1) 
   266                     and:[aJavaClass superclass name == #'groovy/lang/Script']) ifFalse:[
   270                     and:[newClass superclass name == #'groovy/lang/Script']) ifFalse:[
   267                         self breakPoint: #jv.
   271                         self breakPoint: #jv.
   268                     ]
   272                     ]
   269             ]
   273             ]
   270         ]                        
   274         ]                        
   271     ].
   275     ].
   272 
   276 
   273     classes := loaders at: aJavaClass classLoader ifAbsent: nil.
   277     classes := loaders at: newClass classLoader ifAbsent: nil.
   274     classes isNil ifTrue:[
   278     classes isNil ifTrue:[
   275         classes := loaders at: aJavaClass classLoader put: Dictionary new.
   279         classes := loaders at: newClass classLoader put: Dictionary new.
   276     ].
   280     ].
   277     classes at: aJavaClass name put: aJavaClass.
   281     classes at: newClass name put: newClass.
   278     Smalltalk changed: #newClass with: aJavaClass.
   282     Smalltalk changed: #newClass with: newClass.
   279 
   283 
   280     "Created: / 23-10-2011 / 11:53:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   284     "Created: / 23-10-2011 / 11:53:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   281     "Modified: / 02-11-2011 / 18:40:52 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
   285     "Modified: / 02-11-2011 / 18:40:52 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
   282     "Modified: / 18-02-2012 / 22:43:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   286     "Modified (format): / 20-02-2012 / 23:27:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   283 ! !
   287 ! !
   284 
   288 
   285 !JavaClassRegistry class methodsFor:'documentation'!
   289 !JavaClassRegistry class methodsFor:'documentation'!
   286 
   290 
   287 version_SVN
   291 version_SVN