blob: 2aaeb60cbc6f873e7b73937d229972512a637965 [file] [log] [blame]
/* Copyright 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.xmlbeans.impl.jam;
/**
* Object which can load representations of a java.lang.Class.
* Analagous to a java.lang.ClassLoader.
*
* @author Patrick Calahan <email: pcal-at-bea-dot-com>
*/
public interface JamClassLoader {
/**
* <p>Returns a representation of the named class. If the class is
* not under the same root as this JElement root, a representation
* of it will be synthesized via reflection (see note in class
* comments). The 'named' parameter must be a fully-qualified class
* name in the classfile 'Field Descriptor' format, a simple
* primitive name (e.g. 'long' or 'int'), or 'void'.</p>
*
* <p>A note regarding fully-qualified class names: if you're
* looking up a non-array type by name, you can just pass the
* regular, fully-qualified name. If you're looking up an array
* type, you need to use the 'Field Descriptor' format as described
* in secion 4.3.2 of the VM spec. This is the same name format
* that is returned by JClass.getFieldDescriptor.</p>
*
* <p>Inner classes cannot be loaded with this method. To load an inner
* class, you must load the outer class first and then call getClasses().
* </p>
*
* <p>Note that this method always returns some JClass - it never
* returns null or throws ClassNotFoundException. If neither a
* sourcefile not a classfile could be located for the named class,
* a stubbed-out JClass will be returned with the isUnresolved()
* flag set to true. This JClass will have a name (as determined by
* the given descriptor), but no other information about it will be
* available.</p>
*
* @throws IllegalArgumentException if the parameter is null or not
* a valid class name.
*/
public JClass loadClass(String fieldDescriptor);
/**
* Returns a representation of a package having the given name.
* @throws IllegalArgumentException if the parameter is null or not
* a valid package name.
*/
public JPackage getPackage(String qualifiedPackageName);
}