From ebd545653c4c1d36009db5e6616afede3b65f1c2 Mon Sep 17 00:00:00 2001
From: chiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Date: Tue, 9 Jun 2009 08:50:06 +0000
Subject: fixed JIRA JASSIST-83

git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@479 30ef5769-5b8d-40dd-aea6-55b5d6557bb3
---
 src/main/javassist/bytecode/ExceptionTable.java |  2 ++
 src/main/javassist/expr/Handler.java            | 21 +++++++++++++++++----
 2 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/src/main/javassist/bytecode/ExceptionTable.java b/src/main/javassist/bytecode/ExceptionTable.java
index b24bd04b..1c74e6e0 100644
--- a/src/main/javassist/bytecode/ExceptionTable.java
+++ b/src/main/javassist/bytecode/ExceptionTable.java
@@ -153,6 +153,8 @@ public class ExceptionTable implements Cloneable {
      * Returns <code>catchType</code> of the <i>n</i>-th entry.
      *
      * @param nth               the <i>n</i>-th (&gt;= 0).
+     * @return an index into the <code>constant_pool</code> table,
+     *          or zero if this exception handler is for all exceptions.
      */
     public int catchType(int nth) {
         ExceptionTableEntry e = (ExceptionTableEntry)entries.get(nth);
diff --git a/src/main/javassist/expr/Handler.java b/src/main/javassist/expr/Handler.java
index 6f8c44cf..5bed0924 100644
--- a/src/main/javassist/expr/Handler.java
+++ b/src/main/javassist/expr/Handler.java
@@ -20,7 +20,7 @@ import javassist.bytecode.*;
 import javassist.compiler.*;
 
 /**
- * Catch clause.
+ * A <code>catch</code> clause or a <code>finally</code> block.
  */
 public class Handler extends Expr {
     private static String EXCEPTION_NAME = "$1";
@@ -69,11 +69,24 @@ public class Handler extends Expr {
 
     /**
      * Returns the type handled by the catch clause.
+     * If this is a <code>finally</code> block, <code>null</code> is returned.
      */
     public CtClass getType() throws NotFoundException {
-        ConstPool cp = getConstPool();
-        String name = cp.getClassInfo(etable.catchType(index));
-        return thisClass.getClassPool().getCtClass(name);
+        int type = etable.catchType(index);
+        if (type == 0)
+            return null;
+        else {
+            ConstPool cp = getConstPool();
+            String name = cp.getClassInfo(type);
+            return thisClass.getClassPool().getCtClass(name);
+        }
+    }
+
+    /**
+     * Returns true if this is a <code>finally</code> block.
+     */
+    public boolean isFinally() {
+        return etable.catchType(index) == 0;
     }
 
     /**
-- 
cgit v1.2.3