--- a/src/JavaClassReader.st Tue Sep 04 23:16:20 2012 +0000
+++ b/src/JavaClassReader.st Thu Sep 06 11:37:27 2012 +0000
@@ -618,13 +618,14 @@
self readMethodsFor: classBeingLoaded.
self readAttributesFor: classBeingLoaded.
-
-"/ classBeingLoaded constantPool
-"/ do: [:each | self updateOwnerInCPItem: each ].
-
+
+ "/
+ "/ get extensions
+ "/
+ self readExtensionsFor: classBeingLoaded.
+
classBeingLoaded fields do: [:each | self updateOwnerInField: each ].
classBeingLoaded staticFields do: [:each | self updateOwnerInField: each ].
- "/JavaVM classRegistry registerClass: classBeingLoaded.
classesbeingLoaded remove: classBeingLoaded name ifAbsent:[].
^ classBeingLoaded.
@@ -642,7 +643,7 @@
"Modified: / 15-10-2010 / 17:37:38 / Jan Kurs <kurs.jan@post.cz>"
"Modified: / 28-01-2011 / 15:09:48 / Marcel Hlopko <hlopik@gmail.com>"
"Modified: / 18-05-2011 / 15:30:29 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 16-08-2012 / 15:33:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 06-09-2012 / 11:37:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
readStream:aStream ignoring:classesBeingLoaded
@@ -1774,6 +1775,66 @@
"Modified: / 13-05-2011 / 17:32:09 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !
+!JavaClassReader methodsFor:'file reading - extensions'!
+
+readExtensionsFor: class
+ "Given a class, load extensions (i.e., non-java methods) for that class"
+
+ | classnameAsPath |
+
+ classnameAsPath := class name copyReplaceAll: $/ with: Filename separator.
+
+ Java effectiveExtensionsPath do:[:each|
+ ProgrammingLanguage allDo:[:lang|
+ lang supportsExtensionMethods ifTrue:[
+ | file |
+ file := each asString , Filename separator , classnameAsPath , '.' , lang sourceFileSuffix.
+ file := file asFilename.
+ file exists ifTrue:[
+ self readExtensionsFor: class from: file language: lang
+ ]
+ ]
+ ]
+ ]
+
+ "Created: / 06-09-2012 / 11:37:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+readExtensionsFor: class from: file
+ "Given a class, load extensions (i.e., non-java methods) for that class"
+
+ JAVA isNil ifTrue:[ JavaPackage initialize ].
+ [
+ Smalltalk fileIn: file.
+ ] on: JavaClassQuery do:[:query |
+ query className = class name ifTrue:[
+ query resumeWith: class
+ ] ifFalse:[
+ query resumeWith: nil.
+ ]
+ ].
+
+ "Created: / 06-09-2012 / 12:04:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+readExtensionsFor: class from: file language: language
+ "Given a class, load extensions (i.e., non-java methods) for that class"
+
+ JAVA isNil ifTrue:[ JavaPackage initialize ].
+ [
+ "Do not enable it now, requires some changes is filing-in code"
+"/ language fileIn: file.
+ ] on: JavaClassQuery do:[:query |
+ query className = class name ifTrue:[
+ query resumeWith: class
+ ] ifFalse:[
+ query resumeWith: nil.
+ ]
+ ].
+
+ "Created: / 06-09-2012 / 12:14:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
!JavaClassReader methodsFor:'file reading - fields'!
readConstantValueAttributeFor:aField