src/JavaClassReader.st
branchjk_new_structure
changeset 1698 d32a2a3dce36
parent 1694 c9c3667b4e55
child 1699 73003b9f58fc
--- 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