diff --git a/dexlib2/src/main/java/org/jf/dexlib2/base/BaseExceptionHandler.java b/dexlib2/src/main/java/org/jf/dexlib2/base/BaseExceptionHandler.java index 8ca974be..9ad6b648 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/base/BaseExceptionHandler.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/base/BaseExceptionHandler.java @@ -33,13 +33,28 @@ package org.jf.dexlib2.base; import com.google.common.base.Objects; import com.google.common.primitives.Ints; +import org.jf.dexlib2.base.reference.BaseTypeReference; import org.jf.dexlib2.iface.ExceptionHandler; +import org.jf.dexlib2.iface.reference.TypeReference; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Comparator; public abstract class BaseExceptionHandler implements ExceptionHandler { + @Nullable @Override public TypeReference getExceptionTypeReference() { + final String exceptionType = getExceptionType(); + if (exceptionType == null) { + return null; + } + + return new BaseTypeReference() { + @Nonnull @Override public String getType() { + return exceptionType; + } + }; + } + @Override public int hashCode() { String exceptionType = getExceptionType(); @@ -76,6 +91,8 @@ public abstract class BaseExceptionHandler implements ExceptionHandler { return Ints.compare(getHandlerCodeAddress(), o.getHandlerCodeAddress()); } + + public static final Comparator BY_EXCEPTION = new Comparator() { @Override public int compare(ExceptionHandler o1, ExceptionHandler o2) { String exceptionType1 = o1.getExceptionType(); diff --git a/dexlib2/src/main/java/org/jf/dexlib2/iface/ExceptionHandler.java b/dexlib2/src/main/java/org/jf/dexlib2/iface/ExceptionHandler.java index 07defc78..ede016eb 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/iface/ExceptionHandler.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/iface/ExceptionHandler.java @@ -31,6 +31,8 @@ package org.jf.dexlib2.iface; +import org.jf.dexlib2.iface.reference.TypeReference; + import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -45,6 +47,14 @@ public interface ExceptionHandler extends Comparable { */ @Nullable String getExceptionType(); + /** + * Gets the type of exception that is handled by this handler. + * + * @return A TypeReference to the type of exception that is handled by this handler, or null if this is a + * catch-all handler. + */ + @Nullable TypeReference getExceptionTypeReference(); + /** * Gets the code offset of the handler. *