--- a/src/JavaClassReader.st Wed Mar 28 14:04:28 2012 +0000
+++ b/src/JavaClassReader.st Thu Mar 29 08:28:45 2012 +0000
@@ -2106,7 +2106,14 @@
]
]
] ifFalse:[
- m setAccessFlags:(m accessFlags bitOr:ACC_HASHANDLER)
+ | newAccessFlags |
+
+ newAccessFlags := m accessFlags.
+ newAccessFlags := newAccessFlags bitOr:ACC_HASHANDLER.
+ m hasFinallyBasedOnExceptionTable ifTrue:[
+ newAccessFlags := newAccessFlags bitOr:ACX_HASFINALLY.
+ ].
+ m setAccessFlags:newAccessFlags.
].
aClass addMethod:m name:name signature:descriptor.
] ifFalse:[
@@ -2125,8 +2132,8 @@
"Created: / 15-04-1996 / 16:48:49 / cg"
"Modified: / 25-09-1999 / 23:16:25 / cg"
- "Modified: / 25-10-2011 / 17:41:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 28-10-2011 / 16:56:48 / m"
+ "Modified: / 29-03-2012 / 09:18:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
readMethodsFor:aJavaClass
--- a/src/JavaConstants.st Wed Mar 28 14:04:28 2012 +0000
+++ b/src/JavaConstants.st Thu Mar 29 08:28:45 2012 +0000
@@ -26,7 +26,7 @@
ACC_SYNCHRONIZED ACC_BRIDGE ACC_VARGARS ACC_NATIVE ACC_ABSTRACT
ACC_STRICT ACC_SYNTHETIC ACC_SUPER ACC_INTERFACE ACC_ANNOTATION
ACC_ENUM ACC_VOLATILE ACC_TRANSIENT ACC_OBSOLETE ACC_HASHANDLER
- ACC_INITIALIZED ACC_BREAKPNT'
+ ACC_INITIALIZED ACC_BREAKPNT ACX_HASFINALLY'
poolDictionaries:''
category:'Languages-Java-Support'
!
@@ -89,12 +89,14 @@
@global(JavaConstants:ACC_INITIALIZED) = __MKSMALLINT(__ACC_INITIALIZED);
@global(JavaConstants:ACC_HASHANDLER) = __MKSMALLINT(__ACC_HASHANDLER);
+ @global(JavaConstants:ACX_HASFINALLY) = __MKSMALLINT(__ACX_HASFINALLY);
@global(JavaConstants:ACC_BREAKPNT) = __MKSMALLINT(__ACC_BREAKPNT);
%}
"Created: / 25-10-2011 / 09:50:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 28-10-2011 / 16:56:17 / m"
+ "Modified: / 28-03-2012 / 23:06:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!JavaConstants class methodsFor:'documentation'!
--- a/src/JavaMethod.st Wed Mar 28 14:04:28 2012 +0000
+++ b/src/JavaMethod.st Thu Mar 29 08:28:45 2012 +0000
@@ -27,7 +27,7 @@
ForceByteCodeDisplay UnresolvedClassSignal A_PUBLIC A_PRIVATE
A_PROTECTED A_STATIC A_FINAL A_SYNCHRONIZED A_ABSTRACT A_NATIVE
A_BREAKPOINT R_VOID R_LONG R_DOUBLE A_HASHANDLER A_BRIDGE
- A_VARARGS A_STRICT A_SYNTHETIC A_RESOLVED'
+ A_VARARGS A_STRICT A_SYNTHETIC A_RESOLVED A_HASFINALLY'
poolDictionaries:'JavaConstants'
category:'Languages-Java-Classes'
!
@@ -90,6 +90,7 @@
A_BREAKPOINT := 16r10000000.
A_HASHANDLER := 16r20000000.
+ A_HASFINALLY := 16r00004000.
A_RESOLVED := 16r00002000.
self flags:(self flags bitOr:Behavior flagJavaMethod).
@@ -117,7 +118,7 @@
"
"Modified: / 16-10-1998 / 01:29:48 / cg"
- "Modified: / 14-11-2011 / 23:54:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 28-03-2012 / 20:34:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
reinitialize
@@ -2087,6 +2088,26 @@
"Modified: / 25.9.1999 / 23:07:01 / cg"
!
+hasFinally
+ ^ (accessFlags bitAnd:A_HASFINALLY) ~~ 0
+
+ "Created: / 28-03-2012 / 20:35:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+hasFinallyBasedOnExceptionTable
+ "Returns true if the exeption table has at least one
+ entry for finally block"
+ ^false
+
+ "Created: / 28-03-2012 / 23:18:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+hasHandler
+ ^ (accessFlags bitAnd:A_HASHANDLER) ~~ 0
+
+ "Created: / 28-03-2012 / 20:35:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
hasPrimitiveCode
^false
--- a/src/JavaMethodWithHandler.st Wed Mar 28 14:04:28 2012 +0000
+++ b/src/JavaMethodWithHandler.st Thu Mar 29 08:28:45 2012 +0000
@@ -74,6 +74,16 @@
"Created: / 16.10.1998 / 01:19:00 / cg"
! !
+!JavaMethodWithHandler methodsFor:'queries'!
+
+hasFinallyBasedOnExceptionTable
+ "Returns true if the exeption table has at least one
+ entry for finally block"
+ ^exceptionHandlerTable anySatisfy:[:entry|entry catchType == 0].
+
+ "Created: / 28-03-2012 / 23:17:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
!JavaMethodWithHandler class methodsFor:'documentation'!
version