import org.python.core.Py; //导入方法依赖的package包/类
/**
* Returns adapter for variables which have or haven't children (based on parameter hasChildren)
*
* @param properties whether we want properties = basic types (false) or complex types = list, dicts, classes (true)
* @return list of adapters
*/
private ArrayList filterEngineVariables(ScriptEngine engine, boolean hasChildren){
ScriptContext context = engine.getContext();
List scopes = context.getScopes();
int scope = scopes.get(0);
final Bindings bindings = context.getBindings(scope);
Set> entries = bindings.entrySet();
Object value;
PyObjectWrapper wrapper = null;
PyObjectAdapter adapter = null;
ArrayList list = new ArrayList();
for (Entry entry : entries) {
final String key = entry.getKey();
value = entry.getValue();
wrapper = PyObjectWrappersManager.getWrapper(value.getClass());
if (wrapper instanceof PyUnsupportedWrapper) continue;
if (hasChildren) {
// we want only types with children
if (!wrapper.hasChildren(value)) continue;
} else {
// we want only basic types
if (wrapper.hasChildren(value)) continue;
}
adapter = new PyObjectAdapter(
key,
new PyObjectPlace(){
private Bindings b = bindings;
private String k = key;
@Override
public Object get() {
try{
return b.get(k);
} catch (Exception e) {
return Py.None;
}
}
@Override
public void set(PyObject newValue) {
bindings.put(key, newValue);
}
}
);
list.add(adapter);
}
return list;
}