/*
 * 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.analysis;

/**
 * This interface provides information about the class hierarchy to some consumer, such as a bytecode verifier.
 * 
 * All class names are given in JVM type format, e.g., Ljava/lang/Object;.
 */
public interface ClassHierarchyProvider {
  /**
   * @return the superclass of the given class, or null if the superclass is not known or cl is java.lang.Object
   */
  public String getSuperClass(String cl);

  /**
   * @return the superinterfaces of the given class, or null if they are not known
   */
  public String[] getSuperInterfaces(String cl);

  /**
   * @return the complete set of direct subclasses or implementors of cl, or null if the complete set is not known
   */
  public String[] getSubClasses(String cl);

  /**
   * @return whether or not cl is an interface, or Constants.MAYBE if not known
   */
  public int isInterface(String cl);
}
