| /* |
| * 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; |
| |
| import flash.tools.debugger.events.FaultEvent; |
| |
| /** |
| * A Variable is any ActionScript variable, such as a String, Number, etc. |
| * It encapsulates the concept of a type and a value. |
| */ |
| public interface Variable |
| { |
| /** |
| * The name of the variable. |
| */ |
| public String getName(); |
| |
| /** |
| * The fully qualified name of the variable, i.e. "namespace::name" |
| * if there is a namespace, or just "name" if not. |
| */ |
| public String getQualifiedName(); |
| |
| /** |
| * The namespace of the variable. This is everything before the |
| * "::". For example: |
| * |
| * <ul> |
| * <li> If a variable was declared "private var x", then the |
| * namespace is "ClassName$3", where "3" might be |
| * any number. </li> |
| * <li> If a variable was declared within a namespace, e.g. |
| * "mynamespace var x", then the namespace might be |
| * "http://blahblah::x", where "http://blahblah" is the URL |
| * of the namespace. |
| * <li> If a variable was declared neither public nor private |
| * (and is therefore "internal"), and it is inside of a |
| * package, then the namespace might be |
| * "packagename". </li> |
| * </ul> |
| * |
| * @return namespace or "", never <code>null</code> |
| */ |
| public String getNamespace(); |
| |
| /** |
| * Returns just the scope bits of the attributes. The scope values from |
| * VariableAttribute (PUBLIC_SCOPE etc.) are NOT bitfields, so the returned |
| * value can be compared directly to VariableAttribute.PUBLIC_SCOPE, etc. |
| * using "==". |
| * |
| * @see VariableAttribute |
| */ |
| public int getScope(); |
| |
| /** |
| * For a member variable of an instance of some class, its "level" indicates |
| * how far up the class hierarchy it is from the actual class of the instance. |
| * For example, suppose you have this code: |
| * |
| * <pre> |
| * class A { int a } |
| * class B extends A { int b } |
| * class C extends B { int c } |
| * var myObject: C |
| * </pre> |
| * |
| * In this case, for <code>myObject</code>, the "level" of variable <code>c</code> |
| * is 0; the level of <code>b</code> is 1; and the level of <code>a</code> is 2. |
| */ |
| public int getLevel(); |
| |
| /** |
| * The class in which this member was actually defined. For example, if class |
| * B extends class A, and class A has member variable V, then for variable |
| * V, the defining class is always "A", even though the parent variable might |
| * be an instance of class B. |
| */ |
| public String getDefiningClass(); |
| |
| /** |
| * Variable attributes define further information |
| * regarding the variable. They are bitfields identified |
| * as VariableAttribute.xxx |
| * |
| * @see VariableAttribute |
| */ |
| public int getAttributes(); |
| |
| /** |
| * @see VariableAttribute |
| */ |
| public boolean isAttributeSet(int variableAttribute); |
| |
| /** |
| * Returns the value of the variable. |
| */ |
| public Value getValue(); |
| |
| /** |
| * Returns whether the value of the variable has changed since the last |
| * time the program was suspended. If the previous value of the |
| * variable is unknown, this function will return <code>false</code>. |
| */ |
| public boolean hasValueChanged(Session s); |
| |
| /** |
| * Changes the value of a variable. New members cannot be added to a Variable, |
| * only the value of existing scalar members can be modified. |
| * |
| * @param type |
| * the type of the member which is being set. Use |
| * VariableType.UNDEFINED in order to set the variable to an |
| * undefined state; the contents of 'value' will be ignored. |
| * @param value |
| * the string value of the member. May be 'true' or 'false' for |
| * Boolean types or any valid number for Number types. |
| * @return null, if set was successful; or a FaultEvent if a setter was |
| * invoked and the setter threw an exception. In that case, look at |
| * FaultEvent.information to see the error text of the exception |
| * that occurred. |
| * @throws NoResponseException |
| * if times out |
| * @throws NotSuspendedException |
| * if Player is running |
| * @throws NotConnectedException |
| * if Player is disconnected from Session |
| */ |
| public FaultEvent setValue(Session s, int type, String value) throws NotSuspendedException, NoResponseException, NotConnectedException; |
| |
| /** |
| * @return True if this variable has a getter, and the getter has not yet been invoked. |
| */ |
| public boolean needsToInvokeGetter(); |
| |
| /** |
| * Executes the getter for this variable, and changes its value accordingly. Note that |
| * the <code>HAS_GETTER</code> flag is not affected by this call -- even after this |
| * call, <code>HAS_GETTER</code> will still be true. If you want to test whether the |
| * getter has already been executed, call <code>needsToInvokeGetter()</code>. |
| * <p> |
| * Has no effect if <code>needsToInvokeGetter()</code> is false. |
| * |
| * @throws NotSuspendedException |
| * @throws NoResponseException |
| * @throws NotConnectedException |
| */ |
| public void invokeGetter(Session s) throws NotSuspendedException, NoResponseException, NotConnectedException; |
| |
| /** |
| * Get the worker id of the isolate to which this value belongs. |
| */ |
| public int getIsolateId(); |
| } |