java.lang.Object
org.gjt.sp.jedit.bsh.classpath.BshClassPath
- All Implemented Interfaces:
ClassPathListener
,NameSource
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.
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
static class
static class
static class
static class
static interface
Nested classes/interfaces inherited from interface org.gjt.sp.jedit.bsh.NameSource
NameSource.Listener
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
void
void
addComponent
(BshClassPath bcp) Add the specified BshClassPath as a component of our path.void
static void
void
addNameSourceListener
(NameSource.Listener listener) Implements NameSource Add a listener who is notified upon changes to names in this space.static String
canonicalizeClassName
(String name) Create a proper class name from a messy thing.void
String[]
static BshClassPath
Get the boot path including the lib/rt.jar if possible.getClassesForPackage
(String pack) Return the set of class names in the specified package including all component paths.getClassNameByUnqName
(String name) Support for super import "*"; Get the full name associated with the unqualified name in this classpath.getClassSource
(String className) Return the source of the specified class which may lie in component path.protected List
Get the full path including component paths.Get a list of all of the known packagesURL[]
Get the path components including any component paths.static BshClassPath
A BshClassPath initialized to the user path from java.class.pathstatic URL[]
void
If the claspath map is not initialized, do it now.protected void
insureInitialized
(boolean topPath) static boolean
isArchiveFileName
(String name) static boolean
isClassFileName
(String name) static void
static Collection
Return a new collection without any inner class namesvoid
void
setClassSource
(String className, BshClassPath.ClassSource cs) Explicitly set a class source.void
static String[]
splitClassname
(String classname) Split class name into package and nametoString()
-
Constructor Details
-
BshClassPath
-
BshClassPath
-
-
Method Details
-
setPath
-
addComponent
Add the specified BshClassPath as a component of our path. Changes in the bcp will be reflected through us. -
add
-
add
- Throws:
IOException
-
getPathComponents
Get the path components including any component paths. -
getClassesForPackage
Return the set of class names in the specified package including all component paths. -
getClassSource
Return the source of the specified class which may lie in component path. -
setClassSource
Explicitly set a class source. This is used for generated classes, but could potentially be used to allow a user to override which version of a class from the classpath is located. -
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) - Parameters:
topPath
- indicates that this is the top level classpath component and it should send the startClassMapping message
-
getFullPath
Get the full path including component paths. (component paths listed first, in order) Duplicate path components are removed. -
getClassNameByUnqName
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.- Throws:
ClassPathException
-
getAllNames
- Specified by:
getAllNames
in interfaceNameSource
-
classPathChanged
public void classPathChanged()- Specified by:
classPathChanged
in interfaceClassPathListener
-
isClassFileName
-
isArchiveFileName
-
canonicalizeClassName
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. -
splitClassname
Split class name into package and name -
removeInnerClassNames
Return a new collection without any inner class names -
getUserClassPathComponents
- Throws:
ClassPathException
-
getPackagesSet
Get a list of all of the known packages -
addListener
-
removeListener
-
getUserClassPath
A BshClassPath initialized to the user path from java.class.path- Throws:
ClassPathException
-
getBootClassPath
Get the boot path including the lib/rt.jar if possible.- Throws:
ClassPathException
-
main
- Throws:
Exception
-
toString
-
addNameSourceListener
Implements NameSource Add a listener who is notified upon changes to names in this space.- Specified by:
addNameSourceListener
in interfaceNameSource
-
addMappingFeedback
-