001/*
002 *                    BioJava development code
003 *
004 * This code may be freely distributed and modified under the
005 * terms of the GNU Lesser General Public Licence.  This should
006 * be distributed with the code.  If you do not have a copy,
007 * see:
008 *
009 *      http://www.gnu.org/copyleft/lesser.html
010 *
011 * Copyright for this code is held jointly by the individual
012 * authors.  These should be listed in @author doc comments.
013 *
014 * For more information on the BioJava project and its aims,
015 * or to join the biojava-l mailing list, visit the home page
016 * at:
017 *
018 *      http://www.biojava.org/
019 *
020 */
021package org.biojava.utils.bytecode;
022
023import java.util.*;
024
025/**
026 * Interface for Java classes within the bytecode generation framework.
027 * Any class (or interface) can be viewed as a CodeClass, whether it
028 * is pre-existing or being generated.
029 *
030 * @author Thomas Down
031 * @author Matthew Pocock
032 */
033
034public interface CodeClass {
035  String getName();
036
037  String getJName();
038
039  String getDescriptor();
040
041  CodeClass getSuperClass();
042
043  List getInterfaces();
044
045  /**
046   * Get all methods declared by this class and its super classes, removing
047   * all super class methods that are over ridden.
048   *
049   * <p>
050   * This should return methods, regardless of their accessability.
051   * </p>
052   *
053   * @return a Set containing all methods
054   */
055  Set getMethods();
056
057  /**
058   * Get the name of all methods that could be invoked through this class with
059   * a given name.
060   *
061   * @param name  the name of the method
062   * @return a Set of CodeMethod instances with that name
063   */
064  Set getMethodsByName(String name);
065
066  /**
067   * Get a method by name and argument list.
068   *
069   * @param name  the name of the method
070   * @param args  the arguments it takes
071   * @return      a matching method
072   * @throws NoSuchMethodException  if there is no maching method
073   */
074  CodeMethod getMethod(String name, CodeClass[] args)
075          throws NoSuchMethodException;
076
077  /**
078   * Get a constructor by argument list.
079   *
080   * @param args  the arguments it takes
081   * @return      a matching constructor
082   * @throws NoSuchMethodException  if there is no matching constructor
083   */
084  CodeMethod getConstructor(CodeClass[] args)
085          throws NoSuchMethodException;
086
087  /**
088   * Get a field by its name.
089   *
090   * @param name  the field name
091   * @return      a CodeField representing the field
092   * @throws NoSuchFieldException if there is no field by that name accessible
093   *   through this class
094   */
095  CodeField getFieldByName(String name)
096          throws NoSuchFieldException;
097
098  /**
099   * Get all fields accessible through this class.
100   *
101   * @return  a Set of all accessible fields
102   */
103  Set getFields();
104
105  /**
106   * Get the modifiers associated with the class.
107   *
108   * @return  the modifier integer
109   */
110  int getModifiers();
111
112  /**
113   * Discover if the class represents a primitive type.
114   *
115   * @return  true if the class represents a primative type
116   */
117  public boolean isPrimitive();
118
119  /**
120   * Discover if the class is an array type.
121   *
122   * @return  true if the class is an array type
123   */
124  public boolean isArray();
125}