JavaMethodAnalyzer.st
changeset 2690 ec14b1703279
parent 2678 c865275e48a7
child 2731 13f5be2bf83b
--- a/JavaMethodAnalyzer.st	Mon Sep 09 12:59:06 2013 +0200
+++ b/JavaMethodAnalyzer.st	Mon Sep 09 14:17:02 2013 +0200
@@ -22,7 +22,7 @@
 
 JavaByteCodeProcessorAdapter subclass:#JavaMethodAnalyzer
 	instanceVariableNames:'fieldsAccessed fieldsRead fieldsWritten staticsAccessed
-		staticsRead staticsWritten methodsInvoked'
+		staticsRead staticsWritten methodsInvoked refdClasses'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Languages-Java-Support-Decompiling'
@@ -88,6 +88,15 @@
 
 !JavaMethodAnalyzer methodsFor:'instructions'!
 
+anewarray
+    | classRef |
+
+    classRef := constantPool at: self fetchIndex2.
+    refdClasses add: classRef.
+
+    "Created: / 09-09-2013 / 12:21:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 getfield
     | fieldRef |
 
@@ -105,8 +114,10 @@
     fieldRef := constantPool at: self fetchIndex2.     
     staticsRead add: fieldRef.
     staticsAccessed  add: fieldRef.
+    refdClasses add: fieldRef classRef.
 
     "Created: / 05-09-2013 / 16:19:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-09-2013 / 12:16:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 invinterface
@@ -135,6 +146,25 @@
     "Created: / 30-08-2013 / 17:05:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+multianewarray
+    | classRef |
+
+    classRef := constantPool at: self fetchIndex2.
+    self fetchIndex. "/ dimensions
+    refdClasses add: classRef.
+
+    "Created: / 09-09-2013 / 12:21:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+new
+    | classRef |
+
+    classRef := constantPool at: self fetchIndex2.
+    refdClasses add: classRef.
+
+    "Created: / 09-09-2013 / 12:18:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 putfield
     | fieldRef |
 
@@ -146,14 +176,15 @@
     "Modified: / 30-08-2013 / 17:02:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-puystatic
+putstatic
     | fieldRef |
 
     fieldRef := constantPool at: self fetchIndex2.     
     staticsWritten add: fieldRef.
     staticsAccessed  add: fieldRef.
+    refdClasses add: fieldRef classRef.
 
-    "Created: / 05-09-2013 / 16:19:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 09-09-2013 / 12:16:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !JavaMethodAnalyzer methodsFor:'processing loop'!
@@ -168,6 +199,7 @@
     staticsWritten  := Set new.
 
     methodsInvoked := Set new.
+    refdClasses := Set new.
 
     "/ Abstract, native or other funny method
     aMethod byteCode isNil ifTrue:[ ^ self ].
@@ -175,7 +207,7 @@
     ^ super process: aMethod receiver: aReceiver arguments: args.
 
     "Created: / 30-08-2013 / 13:23:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 05-09-2013 / 16:18:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-09-2013 / 12:15:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !JavaMethodAnalyzer methodsFor:'queries'!
@@ -252,9 +284,16 @@
 !
 
 readGlobals
-    self halt.
+    | names |
+
+    names := refdClasses collect:[:ref | ref name ].
+"/    (names includes: 'sun/misc/Unsafe') ifTrue:[
+"/        self halt.
+"/    ].
+    ^ names
 
     "Created: / 05-09-2013 / 15:27:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-09-2013 / 12:33:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 readInstVars
@@ -308,7 +347,8 @@
 
 !JavaMethodAnalyzer class methodsFor:'documentation'!
 
-version_CVS
-    ^ '$Header: /cvs/stx/stx/libjava/JavaMethodAnalyzer.st,v 1.1 2013-09-06 00:41:24 vrany Exp $'
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
 ! !