A BshClassPath encapsulates knowledge about a class path of URLs.
It can maps all classes the path which may include:
jar/zip files and base dirs
A BshClassPath may composite other BshClassPaths as components of its
path and will reflect changes in those components through its methods
and listener interface.
Classpath traversal is done lazily when a call is made to
getClassesForPackage() or getClassSource()
or can be done explicitily through insureInitialized().
Feedback on mapping progress is provided through the MappingFeedback
interface.
Design notes:
Several times here we traverse ourselves and our component paths to
produce a composite view of some thing relating to the path. This would
be an opportunity for a visitor pattern.
add
public void add(URL url)
throws IOException
add
public void add(URL[] urls)
addComponent
public void addComponent(BshClassPath bcp)
Add the specified BshClassPath as a component of our path.
Changes in the bcp will be reflected through us.
canonicalizeClassName
public static String canonicalizeClassName(String name)
Create a proper class name from a messy thing.
Turn / or \ into ., remove leading class and trailing .class
Note: this makes lots of strings... could be faster.
getClassNameByUnqName
public String getClassNameByUnqName(String name)
throws ClassPathException
Support for super import "*";
Get the full name associated with the unqualified name in this
classpath. Returns either the String name or an AmbiguousName object
encapsulating the various names.
getClassSource
public BshClassPath.ClassSource getClassSource(String className)
Return the source of the specified class
which may lie in component path
getClassesForPackage
public Set getClassesForPackage(String pack)
Return the set of class names in the specified package
including all component paths.
getFullPath
protected List getFullPath()
Get the full path including component paths.
(component paths listed first, in order)
Duplicate path components are removed.
getPackagesSet
public Set getPackagesSet()
Get a list of all of the known packages
getPathComponents
public URL[] getPathComponents()
Get the path components including any component paths.
getUserClassPath
public static BshClassPath getUserClassPath()
throws ClassPathException
A BshClassPath initialized to the user path
from java.class.path
getUserClassPathComponents
public static URL[] getUserClassPathComponents()
throws ClassPathException
insureInitialized
public void insureInitialized()
If the claspath map is not initialized, do it now.
If component maps are not do them as well...
Random note:
Should this be "insure" or "ensure". I know I've seen "ensure" used
in the JDK source. Here's what Webster has to say:
Main Entry:ensure Pronunciation:in-'shur
Function:transitive verb Inflected
Form(s):ensured; ensuring : to make sure,
certain, or safe : GUARANTEE synonyms ENSURE,
INSURE, ASSURE, SECURE mean to make a thing or
person sure. ENSURE, INSURE, and ASSURE are
interchangeable in many contexts where they
indicate the making certain or inevitable of an
outcome, but INSURE sometimes stresses the
taking of necessary measures beforehand, and
ASSURE distinctively implies the removal of
doubt and suspense from a person's mind. SECURE
implies action taken to guard against attack or
loss.
insureInitialized
protected void insureInitialized(boolean topPath)
topPath
- indicates that this is the top level classpath
component and it should send the startClassMapping message
isArchiveFileName
public static boolean isArchiveFileName(String name)
isClassFileName
public static boolean isClassFileName(String name)
main
public static void main(String[] args)
throws Exception
removeInnerClassNames
public static Collection removeInnerClassNames(Collection col)
Return a new collection without any inner class names
setPath
public void setPath(URL[] urls)
splitClassname
public static String[] splitClassname(String classname)
Split class name into package and name
toString
public String toString()