blob: 0088ac37715ed34fb1f090ba7bd0553682a644f0 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 flash.tools.debugger.expression;
import flash.tools.debugger.Session;
import flash.tools.debugger.Value;
/**
* An object which returns a value given a name and
* appropriate context information.
*/
public interface Context
{
/**
* Looks for an object of the given name in this context -- for example, a member variable.
*
* The returned Object can be of any type at all. For example, it could be:
*
* <ul>
* <li> a <code>flash.tools.debugger.Variable</code> </li>
* <li> your own wrapper around <code>Variable</code> </li>
* <li> a <code>flash.tools.debugger.Value</code> </li>
* <li> any built-in Java primitive such as <code>Long</code>, <code>Integer</code>,
* <code>Double</code>, <code>Boolean</code>, or <code>String</code> </li>
* <li> any other type you want which has a good <code>toString()</code>; see below </li>
* </ul>
*
* Since the return type is just Object, the returned value is only meaningful when
* passed to other functions this interface. For example, the returned Object can be
* passed to createContext(), assign(), or toValue().
*
* @param o the object to look up; most commonly a string representing the name of
* a member variable.
*/
public Object lookup(Object o) throws NoSuchVariableException, PlayerFaultException;
/**
* Looks for the members of an object.
*
* @param o
* A variable whose members we want to look up
* @return Some object which represents the members; could even be just a
* string. See lookup() for more information about the returned
* type.
* @see #lookup(Object)
*/
public Object lookupMembers(Object o) throws NoSuchVariableException;
/**
* Creates a new context object by combining the current one and o.
* For example, if the user typed "myVariable.myMember", then this function
* will get called with o equal to the object which represents "myVariable".
* This function should return a new context which, when called with
* lookup("myMember"), will return an object for that member.
*
* @param o any object which may have been returned by this class's lookup() function
*/
public Context createContext(Object o);
/**
* Assign the object o, the value v.
*
* @param o
* a variable to assign to -- this should be some value returned
* by an earlier call to lookup().
* @param v
* a value, such as a Boolean, Long, String, etc.
*/
public void assign(Object o, Value v) throws NoSuchVariableException, PlayerFaultException;
/**
* Enables/disables the creation of variables during lookup calls.
* This is ONLY used by AssignmentExp for creating a assigning a value
* to a property which currently does not exist.
*/
public void createPseudoVariables(boolean oui);
/**
* Converts the object to a Value.
*
* @param o
* Either object that was returned by an earlier call to
* <code>lookup()</code>, or one of the raw types that can be
* returned by <code>Value.getValueAsObject()</code>.
* @return the corresponding Value, or <code>null</code>.
* @see Value#getValueAsObject()
*/
public Value toValue(Object o);
/**
* Converts the context to a Value. Very similar to
* <code>toValue(Object o)</code>, except that the object being converted
* is the object that was used to initialize this context.
*
* @return the corresponding Value, or <code>null</code>.
*/
public Value toValue();
/**
* Returns the session associated with this context, or null.
* This can legitimately be null; for example, in fdb, you are
* allowed to do things like "set $columnwidth = 120" before
* beginning a debugging session.
*/
public Session getSession();
/**
* The worker id to which this context object belongs.
*/
public int getIsolateId();
}