/* * Copyright 2000-2004 The Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.apache.bcel.verifier.structurals; import java.util.HashSet; import java.util.Hashtable; import java.util.Set; import org.apache.bcel.generic.CodeExceptionGen; import org.apache.bcel.generic.InstructionHandle; import org.apache.bcel.generic.MethodGen; /** * This class allows easy access to ExceptionHandler objects. * * @version $Id: ExceptionHandlers.java 386056 2006-03-15 11:31:56Z tcurdt $ * @author Enver Haase */ public class ExceptionHandlers{ /** * The ExceptionHandler instances. * Key: InstructionHandle objects, Values: HashSet<ExceptionHandler> instances. */ private Hashtable exceptionhandlers; /** * Constructor. Creates a new ExceptionHandlers instance. */ public ExceptionHandlers(MethodGen mg){ exceptionhandlers = new Hashtable(); CodeExceptionGen[] cegs = mg.getExceptionHandlers(); for (int i=0; i<cegs.length; i++){ ExceptionHandler eh = new ExceptionHandler(cegs[i].getCatchType(), cegs[i].getHandlerPC()); for (InstructionHandle ih=cegs[i].getStartPC(); ih != cegs[i].getEndPC().getNext(); ih=ih.getNext()){ Set hs; hs = (Set) exceptionhandlers.get(ih); if (hs == null){ hs = new HashSet(); exceptionhandlers.put(ih, hs); } hs.add(eh); } } } /** * Returns all the ExceptionHandler instances representing exception * handlers that protect the instruction ih. */ public ExceptionHandler[] getExceptionHandlers(InstructionHandle ih){ Set hs = (Set) exceptionhandlers.get(ih); if (hs == null) { return new ExceptionHandler[0]; } else{ ExceptionHandler[] ret = new ExceptionHandler[hs.size()]; return (ExceptionHandler[]) (hs.toArray(ret)); } } }