87 lines
2.6 KiB
Java
87 lines
2.6 KiB
Java
/*******************************************************************************
|
|
* Copyright (c) 2002,2006 IBM Corporation.
|
|
* All rights reserved. This program and the accompanying materials
|
|
* are made available under the terms of the Eclipse Public License v1.0
|
|
* which accompanies this distribution, and is available at
|
|
* http://www.eclipse.org/legal/epl-v10.html
|
|
*
|
|
* Contributors:
|
|
* IBM Corporation - initial API and implementation
|
|
*******************************************************************************/
|
|
package com.ibm.wala.shrikeBT;
|
|
|
|
/**
|
|
* An ExceptionHandler represents a single handler covering a single
|
|
* instruction. It simply tells us what kind of exception to catch and where to
|
|
* dispatch the exception to.
|
|
*
|
|
* ExceptionHandlers are immutable. It is quite legal to save a reference to an
|
|
* exception handler and use it in any other context. We also treat arrays of
|
|
* ExceptionHandlers as immutable. Therefore the following code can be used to
|
|
* build an exception handler table that specifies two handlers covering an
|
|
* entire block of code:
|
|
*
|
|
* <pre>
|
|
*
|
|
* ExceptionHandler[] hs = {
|
|
* new ExceptionHandler(110, "Ljava.lang.NullPointerException;"),
|
|
* new ExceptionHandler(220, "Ljava.io.IOException;");
|
|
* };
|
|
* for (int i = 0; i < 100; i++) {
|
|
* handlers[i] = hs;
|
|
* }
|
|
* </pre>
|
|
*/
|
|
final public class ExceptionHandler {
|
|
int handler;
|
|
|
|
String catchClass;
|
|
|
|
/**
|
|
* @param handler
|
|
* the label for the handler code
|
|
* @param catchClass
|
|
* the type of exception that should be caught (in JVM format), or
|
|
* null if all exceptions should be caught (as with 'finally')
|
|
*/
|
|
public ExceptionHandler(int handler, String catchClass) {
|
|
this.handler = handler;
|
|
this.catchClass = catchClass;
|
|
}
|
|
|
|
/**
|
|
* @return the label of the handler code
|
|
*/
|
|
public int getHandler() {
|
|
return handler;
|
|
}
|
|
|
|
/**
|
|
* @return the type of exceptions to be caught, or null if all exceptions
|
|
* should be caught
|
|
*/
|
|
public String getCatchClass() {
|
|
return catchClass;
|
|
}
|
|
|
|
public boolean equals(ExceptionHandler h) {
|
|
if (h == null) {
|
|
throw new IllegalArgumentException("h is null");
|
|
}
|
|
return h.handler == handler && (catchClass == null ? h.catchClass == null : catchClass.equals(h.catchClass));
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
return 1069 * handler + ((catchClass == null) ? 0 : catchClass.hashCode());
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object o) {
|
|
if (o instanceof ExceptionHandler) {
|
|
return equals((ExceptionHandler) o);
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
} |