|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--bsh.NameSpace
A namespace in which methods and variables live. This is package public because it is used in the implementation of some bsh commands. However for normal use you should be using methods on bsh.Interpreter to interact with your scripts.
A bsh.This object is a thin layer over a NameSpace. Together they comprise a bsh scripted object context.
Note: I'd really like to use collections here, but we have to keep this compatible with JDK1.1
Nested Class Summary | |
(package private) static class |
NameSpace.TypedVariable
|
Nested classes inherited from class bsh.NameSource |
NameSource.Listener |
Field Summary | |
(package private) SimpleNode |
callerInfoNode
|
private java.util.Hashtable |
classCache
Local class cache for classes resolved through this namespace using getClass() (taking into account imports). |
private java.util.Hashtable |
importedClasses
|
private java.util.Vector |
importedPackages
|
static NameSpace |
JAVACODE
|
private java.util.Hashtable |
methods
|
java.lang.String |
name
|
(package private) java.util.Vector |
nameSourceListeners
|
private NameSpace |
parent
|
private static boolean |
superImport
"import *;" operation has been performed |
private This |
thisReference
|
private java.util.Hashtable |
variables
|
Constructor Summary | |
NameSpace(NameSpace parent,
java.lang.String name)
|
|
NameSpace(java.lang.String name)
|
Method Summary | |
void |
addNameSourceListener(NameSource.Listener listener)
Implements NameSource Add a listener who is notified upon changes to names in this space. |
private static void |
assignmentError(java.lang.Class lhs,
java.lang.Class rhs)
|
private void |
cacheClass(java.lang.Class c)
Helper that caches class. |
static java.lang.Object |
checkAssignableFrom(java.lang.Object rhs,
java.lang.Class lhsType)
Deprecated. name changed. |
private java.lang.Class |
classForName(java.lang.String name)
|
void |
classLoaderChanged()
Clear all cached classes and names |
void |
clear()
Clear all variables, methods, and imports from this namespace. |
static void |
doSuperImport()
Perform "import *;" causing the entire classpath to be mapped. |
private java.lang.String[] |
enumerationToStringArray(java.util.Enumeration e)
|
private BshMethod[] |
flattenMethodCollection(java.util.Enumeration e)
Support for friendly getMethods(); |
java.lang.Object |
get(java.lang.String name,
Interpreter interpreter)
Resolve name to an object through this namespace. |
java.lang.String[] |
getAllNames()
Implements NameSource |
protected void |
getAllNamesAux(java.util.Vector vec)
Helper for implementing NameSource |
static java.lang.Object |
getAssignableForm(java.lang.Object rhs,
java.lang.Class lhsType)
Determine if the RHS object can be assigned to the LHS type (as is, through widening, promotion, etc) and if so, return the assignable form of the RHS. |
java.lang.Class |
getClass(java.lang.String name)
Load a class through this namespace taking into account imports. |
private java.lang.Class |
getClassImpl(java.lang.String name)
Implementation of getClass() Load a class through this namespace taking into account imports. |
NameSpace |
getGlobal()
|
private java.lang.Class |
getImportedClassImpl(java.lang.String name)
Try to make the name into an imported class. |
java.lang.String[] |
getImportedPackages()
Deprecated. |
java.util.Vector |
getImportedPackages(boolean recurse)
Get a list of all imported packages in the order in which they were imported... |
int |
getInvocationLine()
|
java.lang.String |
getInvocationText()
|
BshMethod |
getMethod(java.lang.String name,
java.lang.Class[] sig)
Get the bsh method matching the specified signature declared in this name space or a parent. |
java.lang.String[] |
getMethodNames()
Get the names of methods defined in this namespace. |
BshMethod[] |
getMethods()
Get the methods defined in this namespace. |
java.lang.String |
getName()
|
(package private) Name |
getNameResolver(java.lang.String name)
This is the factory for Name objects which resolve names within this namespace (e.g. |
(package private) SimpleNode |
getNode()
|
NameSpace |
getParent()
Get the parent namespace. |
NameSpace |
getSuper()
|
(package private) This |
getThis(Interpreter declaringInterpreter)
A This object is a thin layer over a namespace, comprising a bsh object context. |
java.lang.Object |
getVariable(java.lang.String name)
Get the specified variable in this namespace or a parent namespace. |
java.lang.Object |
getVariable(java.lang.String name,
boolean recurse)
Get the specified variable in this namespace. |
protected java.lang.Object |
getVariableImpl(java.lang.String name,
boolean recurse)
Return the raw variable retrieval (TypedVariable object or for untyped the simple value) with optional recursion. |
java.lang.String[] |
getVariableNames()
Get the names of variables defined in this namespace. |
static java.lang.Class |
identifierToClass(Name.ClassIdentifier ci)
This is a helper method for working inside of bsh scripts and commands. |
void |
importClass(java.lang.String name)
Import a class name. |
void |
importPackage(java.lang.String name)
subsequent imports override earlier ones |
java.lang.Object |
invokeMethod(java.lang.String methodName,
java.lang.Object[] args,
Interpreter interpreter)
Invoke a method in this namespace with the specified args and interpreter reference. |
java.lang.Object |
invokeMethod(java.lang.String methodName,
java.lang.Object[] args,
Interpreter interpreter,
CallStack callstack,
SimpleNode callerInfo)
invoke a method in this namespace with the specified args, interpreter reference, and callstack This is a convenience for users outside of this package. |
void |
loadDefaultImports()
Import standard packages. |
void |
nameSpaceChanged()
Clear all cached classes and names |
void |
prune()
Used for serialization |
void |
setMethod(java.lang.String name,
BshMethod method)
Note: this is primarily for internal use. |
void |
setName(java.lang.String name)
|
(package private) void |
setNode(SimpleNode node)
Set the node associated with the creation of this namespace. |
void |
setParent(NameSpace parent)
|
void |
setTypedVariable(java.lang.String name,
java.lang.Class type,
java.lang.Object value,
boolean isFinal)
Set the typed variable with the value. |
void |
setVariable(java.lang.String name,
java.lang.Object value)
Set a variable in this namespace. |
java.lang.String |
toString()
|
protected java.lang.Object |
unwrapVariable(java.lang.Object val)
Unwrap a typed variable to its value. |
private void |
writeObject(java.io.ObjectOutputStream s)
|
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
public static final NameSpace JAVACODE
public java.lang.String name
private NameSpace parent
private java.util.Hashtable variables
private java.util.Hashtable methods
private java.util.Hashtable importedClasses
private This thisReference
private java.util.Vector importedPackages
private static transient boolean superImport
private transient java.util.Hashtable classCache
SimpleNode callerInfoNode
java.util.Vector nameSourceListeners
Constructor Detail |
public NameSpace(java.lang.String name)
public NameSpace(NameSpace parent, java.lang.String name)
Method Detail |
public void setName(java.lang.String name)
public java.lang.String getName()
void setNode(SimpleNode node)
SimpleNode getNode()
public java.lang.Object get(java.lang.String name, Interpreter interpreter) throws EvalError
EvalError
public void setVariable(java.lang.String name, java.lang.Object value) throws EvalError
Note: this method is primarily intended for use internally. If you use this method outside of the bsh package and wish to set variables with primitive values you will have to wrap them using bsh.Primitive.
value
- a value of null will remove the variable definition.
EvalError
Primitive
public java.lang.String[] getVariableNames()
public java.lang.String[] getMethodNames()
public BshMethod[] getMethods()
private java.lang.String[] enumerationToStringArray(java.util.Enumeration e)
private BshMethod[] flattenMethodCollection(java.util.Enumeration e)
public NameSpace getParent()
public NameSpace getSuper()
public NameSpace getGlobal()
This getThis(Interpreter declaringInterpreter)
public void prune()
public void setParent(NameSpace parent)
public java.lang.Object getVariable(java.lang.String name)
Note: this method is primarily intended for use internally. If you use this method outside of the bsh package you will have to use Primitive.unwrap() to get primitive values.
Primitive.unwrap( Object )
public java.lang.Object getVariable(java.lang.String name, boolean recurse)
Note: this method is primarily intended for use internally. If you use this method outside of the bsh package you will have to use Primitive.unwrap() to get primitive values.
Primitive.unwrap( Object )
protected java.lang.Object unwrapVariable(java.lang.Object val)
protected java.lang.Object getVariableImpl(java.lang.String name, boolean recurse)
public void setTypedVariable(java.lang.String name, java.lang.Class type, java.lang.Object value, boolean isFinal) throws EvalError
Note: this method is primarily intended for use internally. If you use this method outside of the bsh package and wish to set variables with primitive values you will have to wrap them using bsh.Primitive.
value
- If value is null, you'll get the default value for the type
EvalError
Primitive
public void setMethod(java.lang.String name, BshMethod method)
Interpreter.source( String )
,
Interpreter.eval( String )
public BshMethod getMethod(java.lang.String name, java.lang.Class[] sig)
Note: this method is primarily intended for use internally. If you use this method outside of the bsh package you will have to be familiar with BeanShell's use of the Primitive wrapper class.
Primitive
public void importClass(java.lang.String name)
public void importPackage(java.lang.String name)
public java.lang.String[] getImportedPackages()
public java.util.Vector getImportedPackages(boolean recurse)
private void cacheClass(java.lang.Class c)
public java.lang.Class getClass(java.lang.String name) throws ClassPathException
ClassPathException
private java.lang.Class getClassImpl(java.lang.String name) throws ClassPathException
Check the cache first. If an unqualified name look for imported class or package. Else try to load absolute name.
This method implements caching of unqualified names (normally imports). Qualified names are cached by BshClassManager. Unqualified absolute class names (e.g. unpackaged Foo) are cached too so that we don't go searching through the imports for them each time.
ClassPathException
private java.lang.Class getImportedClassImpl(java.lang.String name) throws ClassPathException
ClassPathException
private java.lang.Class classForName(java.lang.String name)
public java.lang.String[] getAllNames()
getAllNames
in interface NameSource
protected void getAllNamesAux(java.util.Vector vec)
public void addNameSourceListener(NameSource.Listener listener)
addNameSourceListener
in interface NameSource
public static void doSuperImport() throws EvalError
EvalError
public static java.lang.Object checkAssignableFrom(java.lang.Object rhs, java.lang.Class lhsType) throws EvalError
EvalError
getAssignableForm( Object, Class )
public static java.lang.Object getAssignableForm(java.lang.Object rhs, java.lang.Class lhsType) throws EvalError
In normal cases this functions as a simple check for assignability and the value is returned unchanged. e.g. a String is assignable to an Object, but no conversion is necessary. Similarly an int is assignable to a long, so no conversion is done. In this sense assignability is in terms of what the Java reflection API will allow since the reflection api will do widening conversions in the case of sets on fields and arrays.
The primary purpose of the abstraction "returning the assignable form" abstraction is to allow non standard bsh assignment conversions. e.g. the wrapper stuff. I'm still not sure how much of that we should be doing.
This method is used in many places throughout bsh including assignment operations and method selection.
EvalError
- on non assignableBSHCastExpression.castObject( java.lang.Object, java.lang.Class )
private static void assignmentError(java.lang.Class lhs, java.lang.Class rhs) throws EvalError
EvalError
public java.lang.String toString()
toString
in class java.lang.Object
private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException
java.io.IOException
public java.lang.Object invokeMethod(java.lang.String methodName, java.lang.Object[] args, Interpreter interpreter) throws EvalError
Note: this method is primarily intended for use internally. If you use this method outside of the bsh package and wish to use variables with primitive values you will have to wrap them using bsh.Primitive.
EvalError
Primitive
public java.lang.Object invokeMethod(java.lang.String methodName, java.lang.Object[] args, Interpreter interpreter, CallStack callstack, SimpleNode callerInfo) throws EvalError
Note: this method is primarily intended for use internally. If you use this method outside of the bsh package and wish to use variables with primitive values you will have to wrap them using bsh.Primitive.
EvalError
Primitive
public void classLoaderChanged()
classLoaderChanged
in interface BshClassManager.Listener
public void nameSpaceChanged()
public void loadDefaultImports()
importClass("bsh.EvalError"); importPackage("javax.swing.event"); importPackage("javax.swing"); importPackage("java.awt.event"); importPackage("java.awt"); importPackage("java.net"); importPackage("java.util"); importPackage("java.io"); importPackage("java.lang");
Name getNameResolver(java.lang.String name)
public int getInvocationLine()
public java.lang.String getInvocationText()
public static java.lang.Class identifierToClass(Name.ClassIdentifier ci)
public void clear()
loadDefaultImports()
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |