http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/SessionManager.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/SessionManager.java b/debugger/src/main/java/flash/tools/debugger/SessionManager.java new file mode 100644 index 0000000..e67e68b --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/SessionManager.java @@ -0,0 +1,390 @@ +/* + * 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 java.io.IOException; + +/** + * A SessionManager controls connection establishment and preferences + * for all debugging sessions with the Flash Player. + * + * To begin a new debugging session: + * + * <ol> + * <li> Get a <code>SessionManager</code> from <code>Bootstrap.sessionManager()</code> </li> + * <li> Call <code>SessionManager.startListening()</code> </li> + * <li> If you want to have the API launch the Flash Player for you, call + * <code>SessionManager.launch()</code>. If you want to launch the Flash Player + * and then have the API connect to it, then launch the Flash Player and then + * call <code>SessionManager.accept()</code>. <em>Note:</em> <code>launch()</code> + * and <code>accept()</code> are both blocking calls, so you probably don't want + * to call them from your main UI thread. </li> + * <li> Finally, call <code>SessionManager.stopListening()</code>. + * </ol> + */ +public interface SessionManager +{ + /** + * The preferences are set using the setPreference() method, and + * take effect immediately thereafter. + */ + + /** + * The value used for <code>$accepttimeout</code> controls how long (in + * milliseconds) <code>accept()</code> waits before timing out. The + * default value for this preference is 120000 (2 minutes). + */ + public static final String PREF_ACCEPT_TIMEOUT = "$accepttimeout"; //$NON-NLS-1$ + + /** + * Valid values for <code>$urimodification</code> are 0 (off) and 1 (on). + * The default value is 1 (on), which allows this API to modify the URI + * passed to <code>launch()</code> as necessary for creating a debuggable + * version of an MXML file. + */ + public static final String PREF_URI_MODIFICATION = "$urimodification"; //$NON-NLS-1$ + + /** + *----------------------------------------------------------------- + * The following are Session specific preferences. These can be + * modified in this class, resulting in all future sessions using + * the values or they can be modified at the session level via + * Session.setPreference(). + *----------------------------------------------------------------- + */ + + /** + * <code>$responsetimeout</code> is used to determine how long (in + * milliseconds) the session will wait, for a player response before giving + * up on the request and throwing an Exception. + */ + public static final String PREF_RESPONSE_TIMEOUT = "$responsetimeout"; //$NON-NLS-1$ + + /** + * <code>$sockettimeout</code> is used to determine how long (in + * milliseconds) the session will wait on a Socket recv call. + * On timeout, we do not immediately abort the session, instead we + * write a squelch message to player. If the write succeeds, we assume + * everything is normal.This helps identify broken connections that + * are relevant when performing WiFi debugging. + * This is -1 by default to indicate no timeout + * (for backward compatibility). + */ + public static final String PREF_SOCKET_TIMEOUT = "$sockettimeout"; //$NON-NLS-1$ + + /** + * <code>$contextresponsetimeout</code> is used to determine how long (in + * milliseconds) the session will wait for a player response from a request + * to get context, before giving up on the request and throwing an + * Exception. + */ + public static final String PREF_CONTEXT_RESPONSE_TIMEOUT = "$contextresponsetimeout"; //$NON-NLS-1$ + + /** + * <code>$getvarresponsetimeout</code> is used to determine how long (in + * milliseconds) the session will wait, for a player response to a get + * variable request before giving up on the request and throwing an + * Exception. + */ + public static final String PREF_GETVAR_RESPONSE_TIMEOUT = "$getvarresponsetimeout"; //$NON-NLS-1$ + + /** + * <code>$setvarresponsetimeout</code> is the amount of time (in + * milliseconds) that a setter in the user's code will be given to execute, + * before the player interrupts it with a ScriptTimeoutError. Default value + * is 5000 ms. + */ + public static final String PREF_SETVAR_RESPONSE_TIMEOUT = "$setvarresponsetimeout"; //$NON-NLS-1$ + + /** + * <code>$swfswdloadtimeout<code> is used to determine how long (in milliseconds) + * the session will wait, for a player response to a swf/swd load + * request before giving up on the request and throwing an Exception. + */ + public static final String PREF_SWFSWD_LOAD_TIMEOUT = "$swfswdloadtimeout"; //$NON-NLS-1$ + + /** + * <code>$suspendwait</code> is the amount of time (in milliseconds) that + * a Session will wait for the Player to suspend, after a call to + * <code>suspend()</code>. + */ + public static final String PREF_SUSPEND_WAIT = "$suspendwait"; //$NON-NLS-1$ + + /** + * <code>$invokegetters</code> is used to determine whether a getter + * property is invoked or not when requested via <code>getVariable()</code> + * The default value is for this to be enabled. + */ + public static final String PREF_INVOKE_GETTERS = "$invokegetters"; //$NON-NLS-1$ + + public static final String PLAYER_SUPPORTS_GET = "$playersupportsget"; //$NON-NLS-1$ + + /** + * <code>$hiervars</code> is used to determine whether the members of + * a variable are shown in a hierchical way. + */ + public static final String PREF_HIERARCHICAL_VARIABLES = "$hiervars"; //$NON-NLS-1$ + + /** + * The value used for <code>$connecttimeout</code> controls how long (in + * milliseconds) <code>connect()</code> waits before timing out. The + * default value for this preference is 120000 (2 minutes). + */ + public static final String PREF_CONNECT_TIMEOUT = "$connecttimeout"; //$NON-NLS-1$ + + /** + * The value used for <code>$connectwaitinterval</code> controls how long (in + * milliseconds) we wait between subsequent <code>connect()</code> calls. The + * default value for this preference is 250. + */ + public static final String PREF_CONNECT_WAIT_INTERVAL = "$connectwaitinterval"; //$NON-NLS-1$ + + /** + * The value used for <code>$connectretryattempts</code> controls how many times + * the debugger retries connecting to the application. This is time bound by + * <code>$connecttimeout</code>. The default value for this preference is -1 and + * indicates that the debugger should retry till the timeout period has elapsed. + * Setting this to zero will disable the retry mechanism. + */ + public static final String PREF_CONNECT_RETRY_ATTEMPTS = "$connectretryattempts"; //$NON-NLS-1$ + + /** + * Set preference for this manager and for subsequent Sessions + * that are initiated after this call. + * + * If an invalid preference is passed, it will be silently ignored. + * @param pref preference name, one of the strings listed above + * @param value value to set for preference + */ + public void setPreference(String pref, int value); + + /** + * Set preference for this manager and for subsequent Sessions + * that are initiated after this call. + * + * If an invalid preference is passed, it will be silently ignored. + * @param pref preference name, one of the strings listed above + * @param value value to set for preference + */ + public void setPreference(String pref, String value); + + /** + * Return the value of a particular preference item + * + * @param pref preference name, one of the strings listed above + * @throws NullPointerException if pref does not exist + */ + public int getPreference(String pref) throws NullPointerException; + + /** + * Listens for Player attempts to open a debug session. This method must be + * called prior to <code>accept()</code> being invoked. + * + * @throws IOException + * if opening the server side socket fails + */ + public void startListening() throws IOException; + + /** + * Stops listening for new Player attempts to open a debug session. The + * method DOES NOT terminate currently connected sessions, but will cause + * threads blocked in <code>accept</code> to throw SocketExceptions. + */ + public void stopListening() throws IOException; + + /** + * Is this object currently listening for Debug Player connections + * @return TRUE currently listening + */ + public boolean isListening(); + + /** + * Launches a Player using the given string as a URI, as defined by RFC2396. + * It is expected that the operating system will be able to launch the + * appropriate player application given this URI. + * <p> + * For example "http://localhost:8100/flex/my.mxml" or for a local file on + * Windows, "file://c:/my.swf" + * <p> + * This call will block until a session with the newly launched player is + * created. + * <p> + * It is the caller's responsibility to ensure that no other thread is + * blocking in <code>accept()</code>, since that thread will gain control + * of this session. + * <p> + * Before calling <code>launch()</code>, you should first call + * <code>supportsLaunch()</code>. If <code>supportsLaunch()</code> + * returns false, then you will have to tell the user to manually launch the + * Flash player. + * <p> + * Also, before calling <code>launch()</code>, you must call + * <code>startListening()</code>. + * + * @param uri + * which will launch a Flash player under running OS. For + * Flash/Flex apps, this can point to either a SWF or an HTML + * file. For AIR apps, this must point to the application.xml + * file for the application. + * @param airLaunchInfo + * If trying to launch an AIR application, this argument must be + * specified; it gives more information about how to do the + * launch. If trying to launch a regular web-based Flash or Flex + * application, such as one that will be in a browser or in the + * standalone Flash Player, this argument should be + * <code>null</code>. + * @param forDebugging + * if <code>true</code>, then the launch is for the purposes + * of debugging. If <code>false</code>, then the launch is + * simply because the user wants to run the movie but not debug + * it; in that case, the return value of this function will be + * <code>null</code>. + * @param waitReporter + * a progress monitor to allow accept() to notify its parent how + * long it has been waiting for the Flash player to connect to + * it. May be <code>null</code> if the caller doesn't need to + * know how long it's been waiting. + * @param launchNotification + * a notifier to notify the caller about ADL Exit Code. + * Main usage is for ADL Exit Code 1 (Successful invocation of an + * already running AIR application. ADL exits immediately). + * May be <code>null</code> if no need to listen ADL. + * Will only be called if forDebugging is false. (If forDebugging + * is true, error conditions are handled by throwing an exception.) + * The callback will be called on a different thread. + * @return a Session to use for debugging, or null if forDebugging==false. + * The return value is not used to indicate an error -- exceptions + * are used for that. If this function returns without throwing an + * exception, then the return value will always be non-null if + * forDebugging==true, or null if forDebugging==false. + * @throws BindException + * if <code>isListening()</code> == false + * @throws FileNotFoundException + * if file cannot be located + * @throws CommandLineException + * if the program that was launched exited unexpectedly. This + * will be returned, for example, when launching an AIR + * application, if adl exits with an error code. + * CommandLineException includes functions to return any error + * text that may have been sent to stdout/stderr, and the exit + * code of the program. + * @throws IOException + * see Runtime.exec() + */ + public Session launch(String uri, AIRLaunchInfo airLaunchInfo, + boolean forDebugging, IProgress waitReporter, ILaunchNotification launchNotification) throws IOException; + + /** + * Returns information about the Flash player which will be used to run the + * given URI. + * + * @param uri + * The URI which will be passed to <code>launch()</code> -- for + * example, <code>http://flexserver/mymovie.mxml</code> or + * <code>c:\mymovie.swf</code>. If launching an AIR app, this + * should point to the app's *-app.xml file. + * @param airLaunchInfo + * If launching an AIR app, this should, if possible, contain + * info about the version of AIR being launched, but it can be + * null if you don't have that information. If launching a + * web-based app, this should be null. + * @return a {@link Player} which can be used to determine information about + * the player -- for example, whether it is a debugger-enabled + * player. Returns <code>null</code> if the player cannot be + * determined. <em>Important:</em> There are valid situations in + * which this will return <code>null</code> + */ + public Player playerForUri(String uri, AIRLaunchInfo airLaunchInfo); + + /** + * Returns whether this platform supports the <code>launch()</code> + * command; that is, whether the debugger can programmatically launch the + * Flash player. If this function returns false, then the debugger will have + * to tell the user to manually launch the Flash player. + * + * @return true if this platform supports the <code>launch()</code> + * command. + */ + public boolean supportsLaunch(); + + /** + * Blocks until the next available player debug session commences, or until + * <code>getPreference(PREF_ACCEPT_TIMEOUT)</code> milliseconds pass. + * <p> + * Before calling <code>launch()</code>, you must call + * <code>startListening()</code>. + * <p> + * Once a Session is obtained, Session.bind() must be called prior to any + * other Session method. + * + * @param waitReporter + * a progress monitor to allow accept() to notify its parent how + * long it has been waiting for the Flash player to connect to it. + * May be <code>null</code> if the caller doesn't need to know how + * long it's been waiting. + * @throws BindException + * if isListening() == false + * @throws IOException - + * see java.net.ServerSocket.accept() + */ + public Session accept(IProgress waitReporter) throws IOException; + + /** + * Tells the session manager to use the specified IDebuggerCallbacks for + * performing certain operatios, such as finding the Flash Player and + * launching the debug target. If you do not call this, the session manager + * will use a <code>DefaultDebuggerCallbacks</code> object. + */ + public void setDebuggerCallbacks(IDebuggerCallbacks debugger); + + /** + * Initiate a debug session by connecting to the specified port. Blocks + * until a connection is made, or until + * <code>getPreference(PREF_CONNECT_TIMEOUT)</code> milliseconds pass. + * <p> + * This work-flow is a reverse of <code>accept()</code> and suited for + * cases where the player is unable to initiate the connection. The + * player must be listening on the specified port for an incoming debug + * connection. In addition, this function calls bind() on the session + * to determine if the handshake was successful so that retry works + * correctly even across port-forwards. + * <p> + * Use <code>stopConnecting()</code> to cancel connect, + * <code>isConnecting()</code> to check if we are currently trying to + * connect. + * + * @param port - The port to connect to. See DProtocol.DEBUG_CONNECT_PORT. + * @param waitReporter + * @return A Session object on which bind() has already been called. + * @throws IOException - This may have a wrapped VersionException due to bind() + */ + public Session connect(int port, IProgress waitReporter) throws IOException; + + /** + * Stops connecting to the Player for a debug session. The + * method DOES NOT terminate currently connected sessions, but will cause + * threads blocked in <code>connect</code> to throw SocketExceptions. + */ + public void stopConnecting() throws IOException; + + /** + * Is this object currently connecting to the Debug Player + * @return TRUE currently connecting + */ + public boolean isConnecting(); +}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/SessionManager2.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/SessionManager2.java b/debugger/src/main/java/flash/tools/debugger/SessionManager2.java new file mode 100644 index 0000000..c1801d9 --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/SessionManager2.java @@ -0,0 +1,184 @@ +/* + * 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 java.io.IOException; + +public interface SessionManager2 extends SessionManager { + + /** + * This is, functionally, a clone of the SessionManager.launch() method. There are however some differences. + * -This is to be called only for run launches. only for debug launches, the launch() method creates a Session and + * binds it to the launch and since the launch() method returns the Session, which will be null in a Run Launch case, + * we have no way of accessing the Process that was created for the launch. + * -To enable auto termination of run launches, we need to know the system Process for us to terminate it when + * necessary. + * -This method creates the process and binds a process listener to it and then returns the process. + * + * + * @param uri + * which will launch a Flash player under running OS. For + * Flash/Flex apps, this can point to either a SWF or an HTML + * file. For AIR apps, this must point to the application.xml + * file for the application. + * @param airLaunchInfo + * If trying to launch an AIR application, this argument must be + * specified; it gives more information about how to do the + * launch. If trying to launch a regular web-based Flash or Flex + * application, such as one that will be in a browser or in the + * standalone Flash Player, this argument should be + * <code>null</code>. + * @param waitReporter + * a progress monitor to allow accept() to notify its parent how + * long it has been waiting for the Flash player to connect to + * it. May be <code>null</code> if the caller doesn't need to + * know how long it's been waiting. + * @param launchNotification + * a notifier to notify the caller about ADL Exit Code. + * Main usage is for ADL Exit Code 1 (Successful invocation of an + * already running AIR application. ADL exits immediately). + * May be <code>null</code> if no need to listen ADL. + * The callback will be called on a different thread. + * @return a Process to use for the run launch. + * The return value is not used to indicate an error -- exceptions + * are used for that. If this function returns without throwing an + * exception, then the return value will always be non-null. + * @throws IOException + * see Runtime.exec() + */ + public Process launchForRun(String uri, AIRLaunchInfo airLaunchInfo, + IProgress waitReporter, ILaunchNotification launchNotification) throws IOException; + /** + * This is, functionally, a clone of the SessionManager.launch() method. There are however some differences. + * -This is to be called only for run launches. only for debug launches, the launch() method creates a Session and + * binds it to the launch and since the launch() method returns the Session, which will be null in a Run Launch case, + * we have no way of accessing the Process that was created for the launch. + * -To enable auto termination of run launches, we need to know the system Process for us to terminate it when + * necessary. + * -This method creates the process and binds a process listener to it and then returns the process. + * + * - This method used the ILauncher instance passed to launch the application. + * + * @param uri + * which will launch a Flash player under running OS. For + * Flash/Flex apps, this can point to either a SWF or an HTML + * file. For AIR apps, this must point to the application.xml + * file for the application. + * @param airLaunchInfo + * If trying to launch an AIR application, this argument must be + * specified; it gives more information about how to do the + * launch. If trying to launch a regular web-based Flash or Flex + * application, such as one that will be in a browser or in the + * standalone Flash Player, this argument should be + * <code>null</code>. + * @param waitReporter + * a progress monitor to allow accept() to notify its parent how + * long it has been waiting for the Flash player to connect to + * it. May be <code>null</code> if the caller doesn't need to + * know how long it's been waiting. + * @param launchNotification + * a notifier to notify the caller about ADL Exit Code. + * Main usage is for ADL Exit Code 1 (Successful invocation of an + * already running AIR application. ADL exits immediately). + * May be <code>null</code> if no need to listen ADL. + * The callback will be called on a different thread. + * @param launcher + * a launcher instance which will be used to launch. + * @return a Process to use for the run launch. + * The return value is not used to indicate an error -- exceptions + * are used for that. If this function returns without throwing an + * exception, then the return value will always be non-null. + * @throws IOException + */ + public Process launchForRun(String uri, AIRLaunchInfo airLaunchInfo, + IProgress waitReporter, ILaunchNotification launchNotification, ILauncher launcher) throws IOException; + + + /** + * Launches the given string as a URI using the ILauncher Instance. + * + * This API is to provide more flexibility to handle the Player launch in different platforms. + * + * This call will block until a session with the newly launched player is + * created. + * <p> + * It is the caller's responsibility to ensure that no other thread is + * blocking in <code>accept()</code>, since that thread will gain control + * of this session. + * <p> + * Before calling <code>launch()</code>, you should first call + * <code>supportsLaunch()</code>. If <code>supportsLaunch()</code> + * returns false, then you will have to tell the user to manually launch the + * Flash player. + * <p> + * Also, before calling <code>launch()</code>, you must call + * <code>startListening()</code>. + * + * @param uri + * which will launch a Flash player under running OS. For + * Flash/Flex apps, this can point to either a SWF or an HTML + * file. For AIR apps, this must point to the application.xml + * file for the application. + * @param airLaunchInfo + * If trying to launch an AIR application, this argument must be + * specified; it gives more information about how to do the + * launch. If trying to launch a regular web-based Flash or Flex + * application, such as one that will be in a browser or in the + * standalone Flash Player, this argument should be + * <code>null</code>. + * @param forDebugging + * if <code>true</code>, then the launch is for the purposes + * of debugging. If <code>false</code>, then the launch is + * simply because the user wants to run the movie but not debug + * it; in that case, the return value of this function will be + * <code>null</code>. + * @param waitReporter + * a progress monitor to allow accept() to notify its parent how + * long it has been waiting for the Flash player to connect to + * it. May be <code>null</code> if the caller doesn't need to + * know how long it's been waiting. + * @param launchNotification + * a notifier to notify the caller about ADL Exit Code. + * Main usage is for ADL Exit Code 1 (Successful invocation of an + * already running AIR application. ADL exits immediately). + * May be <code>null</code> if no need to listen ADL. + * Will only be called if forDebugging is false. (If forDebugging + * is true, error conditions are handled by throwing an exception.) + * The callback will be called on a different thread. + * @return a Session to use for debugging, or null if forDebugging==false. + * The return value is not used to indicate an error -- exceptions + * are used for that. If this function returns without throwing an + * exception, then the return value will always be non-null if + * forDebugging==true, or null if forDebugging==false. + * @throws BindException + * if <code>isListening()</code> == false + * @throws FileNotFoundException + * if file cannot be located + * @throws CommandLineException + * if the program that was launched exited unexpectedly. This + * will be returned, for example, when launching an AIR + * application, if adl exits with an error code. + * CommandLineException includes functions to return any error + * text that may have been sent to stdout/stderr, and the exit + * code of the program. + * @throws IOException + * Exception during launch. + */ + public Session launch(String uri, AIRLaunchInfo airLaunchInfo, + boolean forDebugging, IProgress waitReporter, ILaunchNotification launchNotification, ILauncher launcher) throws IOException; + +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/SourceFile.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/SourceFile.java b/debugger/src/main/java/flash/tools/debugger/SourceFile.java new file mode 100644 index 0000000..6fe0978 --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/SourceFile.java @@ -0,0 +1,124 @@ +/* + * 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; + +/** + * A SourceFile contains information about a specific segment + * of ActionScript source code. The source code could be + * derived from a number of locations; an ActionScript file, a + * snip-it of code from a frame, compiler generated code, etc. + */ +public interface SourceFile +{ + /** + * Base path for this filename, without the package-name portion. For + * example, if class mx.controls.Button.as was in + * C:\flex\sdk\frameworks\mx\controls\Button.as, then getBasePath() + * would return "C:\flex\sdk\frameworks" (note that the "mx\controls" + * part would NOT be returned). + * @return base path, or null + */ + public String getBasePath(); + + /** + * Get the package name portion of the path for this file. For example, if + * class mx.controls.Button.as was in + * C:\flex\sdk\frameworks\mx\controls\Button.as, then getPackageName() would + * return "mx\controls". + * + * @return package name, or "" (never null) + */ + public String getPackageName(); + + /** + * File name of this SourceFile. In the case of a disk-based SourceFile, + * this is the same as the filename with no path, e.g. 'myfile.as' + * @return filename, or "" (never null) + */ + public String getName(); + + /** + * Full path and file name, if its exists, for this SourceFile. For + * disk-based SourceFiles, this is equivalent to + * <code>getBasePath + slash + getPackageName() + slash + getName()</code> + * where "slash" is a platform-specific slash character. + * @return path, never null + */ + public String getFullPath(); + + /** + * Raw, unprocessed file name for this SourceFile. + * @since As of Version 2 + */ + public String getRawName(); + + /** + * Returns the number of source lines in the given file + * @return -1 indicates an error. Call getError() to + * obtain specific reason code. + */ + public int getLineCount(); + + /** + * Return a unique identifier for this SourceFile. + */ + public int getId(); + + /** + * Obtains the textual content of the given line + * from within a source file. + * Line numbers start at 1 and go to getLineCount(). + * + * @return the line of source of the file. Any carriage + * return and/or line feed are stripped from the + * end of the string. + */ + public String getLine(int lineNum); + + /** + *--------------------------------------------------- + * WARNING: The functions below will return null + * and/or 0 values while + * Session.fileMetaDataLoaded() is false. + *--------------------------------------------------- + */ + + /** + * Return the function name for a given line number, or <code>null</code> + * if not known or if the line matches more than one function. + * @since Version 3. + */ + public String getFunctionNameForLine(Session s, int lineNum); + + /** + * Return the line number for the given function name + * if it doesn't exists -1 is returned + */ + public int getLineForFunctionName(Session s, String name); + + /** + * Get a list of all function names for this SourceFile + */ + public String[] getFunctionNames(Session s); + + /** + * Return the offset within the SWF for a given line + * number. + */ + public int getOffsetForLine(int lineNum); +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/SourceLocator.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/SourceLocator.java b/debugger/src/main/java/flash/tools/debugger/SourceLocator.java new file mode 100644 index 0000000..23d49d7 --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/SourceLocator.java @@ -0,0 +1,51 @@ +/* + * 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 java.io.InputStream; + +/** + * A callback interface which should be implemented by the client debugger + * (such as fdb), to locate source files. + * + * This is only necessary if the client debugger wants the DJAPI to "own" + * the source code. Zorn, for example, will probably *not* want to + * implement this interface, because Eclipse itself will load the source + * files from disk. + */ +public interface SourceLocator +{ + /** + * Callback from DJAPI to the debugger, to find a source file. + * Returns null if it can't find the file. + */ + public InputStream locateSource(String path, String pkg, String name); + + /** + * Returns a number which indicates how many times this SourceLocator's + * search algorithm has been changed since it was created. For example, + * if a SourceLocator allows the user to change the list of directories + * that are searched, then each time the user changes that list of + * directories, the return value from getChangeCount() should change. + * + * The DJAPI uses this in order to figure out if it should try again + * to look for a source file that it had previously been unable to + * find. + */ + public int getChangeCount(); +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/SuspendReason.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/SuspendReason.java b/debugger/src/main/java/flash/tools/debugger/SuspendReason.java new file mode 100644 index 0000000..b35c748 --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/SuspendReason.java @@ -0,0 +1,48 @@ +/* + * 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; + +/** + * Reasons for which the Flash Player will suspend itself + */ +public interface SuspendReason +{ + public static final int Unknown = 0; + + /** We hit a breakpoint */ + public static final int Breakpoint = 1; + + /** A watchpoint was triggered */ + public static final int Watch = 2; + + /** A fault occurred */ + public static final int Fault = 3; + + public static final int StopRequest = 4; + + /** A step completed */ + public static final int Step = 5; + + public static final int HaltOpcode = 6; + + /** + * Either a new SWF was loaded, or else one or more scripts (ABCs) + * from an existing SWF were loaded. + */ + public static final int ScriptLoaded = 7; +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/SuspendedException.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/SuspendedException.java b/debugger/src/main/java/flash/tools/debugger/SuspendedException.java new file mode 100644 index 0000000..49c2308 --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/SuspendedException.java @@ -0,0 +1,33 @@ +/* + * 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; + +/** + * SuspendedException is thrown when the Player + * is in a state for which the action cannot be performed. + */ +public class SuspendedException extends PlayerDebugException +{ + private static final long serialVersionUID = 1168900295788494483L; + + @Override + public String getMessage() + { + return Bootstrap.getLocalizationManager().getLocalizedTextString("suspended"); //$NON-NLS-1$ + } +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/SwfInfo.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/SwfInfo.java b/debugger/src/main/java/flash/tools/debugger/SwfInfo.java new file mode 100644 index 0000000..c1632a8 --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/SwfInfo.java @@ -0,0 +1,110 @@ +/* + * 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; + +/** + * The SwfInfo object contains information relating to + * a particular swf file that was loaded by the Player. + * Each SWF file contains a list of actionscript source + * files from which execution is performed. + * + * It is important to note 2 or more SWF files may contain + * multiple copies of the same source code. From the + * Player's perspective and the API perspective these + * copies are unique and it is up to the user of the + * API to detect these 'duplicate' files and either + * filter them from the user and/or present an + * appropriate disambiguous representation of + * the file names. Also internally they are treated + * as two distinct files and thus breakpoints + * will most likely need to be set on both files + * independently. + */ +public interface SwfInfo +{ + /** + * The full path of the SWF. + */ + public String getPath(); + + /** + * The URL for the SWF. Includes any options + * at the end of the URL. For example ?debug=true + */ + public String getUrl(); + + /** + * The size of this SWF in bytes + */ + public int getSwfSize(); + + /** + * The size of the debug SWD file, if any + * This may also be zero if the SWD load is in progress + * @throws InProgressException if the SWD has not yet been loaded + */ + public int getSwdSize(Session s) throws InProgressException; + + /** + * Indication that this SWF, which was previously loaded into + * the Player, is now currently unloaded. All breakpoints + * set on any of the files contained within this SWF will + * be inactive. These breakpoints will still exist in the + * list returned by Session.getBreakpointList() + */ + public boolean isUnloaded(); + + /** + * Indicates whether the contents of the SWF file + * have been completely processed. + * Completely processed means that calls to getSwdSize + * and other calls that may throw an InProgressException will + * not throw this exception. Additionally the function + * and offset related calls within SourceFile will return + * non-null values once this call returns true. + * @since Version 2 + */ + public boolean isProcessingComplete(); + + /** + * Number of source files in this SWF. + * May be zero if no debug + * @throws InProgressException if the SWD has not yet been loaded + */ + public int getSourceCount(Session s) throws InProgressException; + + /** + * List of source files that are contained within + * this SWF. + * @throws InProgressException if the SWD has not yet been loaded + * @since Version 2 + */ + public SourceFile[] getSourceList(Session s) throws InProgressException; + + /** + * Returns true if the given source file is contained + * within this SWF. + * @since Version 2 + */ + public boolean containsSource(SourceFile f); + + /** + * Return the worker ID to which this SWF belongs. + */ + public int getIsolateId(); +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/Value.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/Value.java b/debugger/src/main/java/flash/tools/debugger/Value.java new file mode 100644 index 0000000..1f97e9e --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/Value.java @@ -0,0 +1,255 @@ +/* + * 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.concrete.DVariable; + +/** + * An ActionScript value, for example, the value of a variable or constant. + * + * @author mmorearty + */ +public interface Value +{ + /** + * A special object representing ActionScript's "undefined" value. + */ + public static final Object UNDEFINED = new Object() { + @Override + public String toString() { + return "undefined"; //$NON-NLS-1$ + } + }; + + /** + * The value returned if somone calls getId() for a Variable + * which stores a variable of simple type such as String or + * integer, rather than an Object or MovieClip. + * @see getId() + */ + public static final long UNKNOWN_ID = -1; + + /** + * The special ID for pseudo-variable "_global". (Note, this only + * exists in AS2, not AS3.) + * @see getId() + */ + public static final long GLOBAL_ID = -2; + + /** + * The special ID for pseudo-variable "this". + * @see getId() + */ + public static final long THIS_ID = -3; + + /** + * The special ID for pseudo-variable "_root". (Note, this only + * exists in AS2, not AS3.) + * @see getId() + */ + public static final long ROOT_ID = -4; + + /** + * The special ID for the top frame of the stack. Locals and + * arguments are "members" of this pseudo-variable. + * + * All the stack frames have IDs counting down from here. For example, + * the top stack frame has ID <code>BASE_ID</code>; the next + * stack frame has ID <code>BASE_ID - 1</code>; and so on. + * + * @see getId() + */ + public static final long BASE_ID = -100; + + /** + * _level0 == LEVEL_ID, _level1 == LEVEL_ID-1, ... + * + * all IDs below this line are dynamic. + */ + public static final long LEVEL_ID = -300; + + /** + * The return value of getTypeName() if this value represents the traits of a class. + */ + public static final String TRAITS_TYPE_NAME = "traits"; //$NON-NLS-1$ + + /** + * Variable type can be one of VariableType.OBJECT, + * VariableType.FUNCTION, VariableType.NUMBER, VariableType.STRING, + * VariableType.UNDEFINED, VariableType.NULL. + */ + public int getType(); + + /** + * The type name of the value: + * + * <ul> + * <li> <code>"Number"</code> </li> + * <li> <code>"Boolean"</code> </li> + * <li> <code>"String"</code> </li> + * <li> <code>"null"</code> </li> + * <li> <code>"undefined"</code> </li> + * <li> <code>Value.TRAITS_TYPE_NAME</code> if this value represents the + * traits of a class </li> + * <li> <code>"[package::]Classname@hexaddr"</code> if this value + * represents an instance of a non-primitive object. For example, if this is + * an instance of mx.core.Application, the type name might be + * "mx.core::Application@1234abcd". </li> + * </ul> + */ + public String getTypeName(); + + /** + * The class name of the value. This isn't actually very useful, and should + * probably go away; it had more relevant in ActionScript 2, when the return + * value from this function could have been any one of the strings returned + * by {@link DVariable#classNameFor(long, boolean)}. + * + * In the AS3 world, the only possible return values from this function are: + * + * <ul> + * <li> <code>"Object"</code> for instances of non-primitive classes such + * as Object, Array, etc. </li> + * <li> <code>""</code> all primitive values (Number, Boolean, String, + * null, undefined), or the traits of a class. </li> + * </ul> + */ + public String getClassName(); + + /** + * 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 a unique ID for the object referred to by this variable. + * If two variables point to the same underlying object, their + * getId() functions will return the same value. + * + * This is only meaningful for variables that store an Object or + * MovieClip. For other types of variables (e.g. integers and + * strings), this returns <code>UNKNOWN_ID</code>. + */ + public long getId(); + + /** + * Returns the value of the variable, as an Object. The return + * value will always be one of the following: + * + * <ul> + * <li> <code>null</code> </li> + * <li> <code>Value.UNDEFINED</code> </li> + * <li> a <code>Boolean</code> </li> + * <li> a <code>Double</code> (careful, it might be <code>Double.NaN</code>) </li> + * <li> a <code>String</code> </li> + * <li> a <code>Long</code> if this value represents a non-primitive + * type, such as an Object. If it is a Long, then it is the id of + * the Value (the same value returned by <code>getId()</code>). + * </ul> + */ + public Object getValueAsObject(); + + /** + * Returns the value of the variable, converted to a string. Strings + * are returned as the exact value of the string itself, with no + * extra quotation marks and no escaping of characters within the + * string. + */ + public String getValueAsString(); + + /** + * Returns all child members of this variable. Can only be called for + * variables of type Object or MovieClip. + * @throws NotConnectedException + * @throws NoResponseException + * @throws NotSuspendedException + */ + public Variable[] getMembers(Session s) throws NotSuspendedException, NoResponseException, NotConnectedException; + + /** + * Returns a specific child member of this variable. Can only be called for + * variables of type <code>Object<code> or <code>MovieClip<code>. + * @param s the session + * @param name just a varname name, without its namespace (see <code>getName()</code>) + * @return the specified child member, or null if there is no such child. + * @throws NotConnectedException + * @throws NoResponseException + * @throws NotSuspendedException + */ + public Variable getMemberNamed(Session s, String name) throws NotSuspendedException, NoResponseException, NotConnectedException; + + /** + * Returns the number of child members of this variable. If called for + * a variable which has a simple type such as integer or string, + * returns zero. + * @throws NotConnectedException + * @throws NoResponseException + * @throws NotSuspendedException + */ + public int getMemberCount(Session s) throws NotSuspendedException, NoResponseException, NotConnectedException; + + /** + * Returns the list of classes that contributed members to this object, from + * the class itself all the way down to <code>Object</code> (or, if + * allLevels == false, down to the lowest-level class that actually + * contributed members). + * + * @param allLevels + * if <code>true</code>, the caller wants the entire class + * hierarchy. If <code>false</code>, the caller wants only + * that portion of the class hierarchy that actually contributed + * member variables to the object. For example, + * <code>Object</code> has no members, so if the caller passes + * <code>true</code> then the returned array of strings will + * always end with <code>Object</code>, but if the caller + * passes <code>false</code> then the returned array of strings + * will <em>never</em> end with <code>Object</code>. + * @return an array of fully qualified class names. + */ + public String[] getClassHierarchy(boolean allLevels); + + /** + * Returns all child members of this variable that are private and are present + * in its inheritance chain. Only relevant after a call to getMembers(). + * + * Warning: This may contain variables with the same name (when there is more + * than two level inheritance). + */ + public Variable[] getPrivateInheritedMembers(); + + /** + * Get all the private variables with the given name. Usually one, but more + * may be present if the inheritance chain is long. + * @param name Variable name. + */ + public Variable[] getPrivateInheritedMemberNamed(String name); + + /** + * Get the worker id of the isolate to which this value belongs. + */ + public int getIsolateId(); +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/ValueAttribute.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/ValueAttribute.java b/debugger/src/main/java/flash/tools/debugger/ValueAttribute.java new file mode 100644 index 0000000..00b62c8 --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/ValueAttribute.java @@ -0,0 +1,42 @@ +/* + * 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; + +/** + * @author mmorearty + */ +public interface ValueAttribute +{ + + /** + * Indicates that the value that has been returned for a variable + * is actually not its real value; instead, it is the message of + * an exception that was thrown while executing the getter for + * the variable. + */ + public static final int IS_EXCEPTION = 0x00040000; + + /** + * Indicates that an object is actually a Class. For example, if you have + * + * <pre> var someClass:Class = Button;</pre> + * + * ... then someClass will have IS_CLASS set to true. + */ + public static final int IS_CLASS = 0x04000000; +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/Variable.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/Variable.java b/debugger/src/main/java/flash/tools/debugger/Variable.java new file mode 100644 index 0000000..a424525 --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/Variable.java @@ -0,0 +1,169 @@ +/* + * 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(); +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/VariableAttribute.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/VariableAttribute.java b/debugger/src/main/java/flash/tools/debugger/VariableAttribute.java new file mode 100644 index 0000000..8283137 --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/VariableAttribute.java @@ -0,0 +1,168 @@ +/* + * 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; + +/** + * Specific attributes which further qualify a Variable. The values in the low + * 16 bits correspond to the enumeration fields defined in the player's + * "splay.h" file, e.g. <code>kDontEnumerate</code> etc. The values from the + * high 16 bits correspond to <code>enum InVariableFlags</code> from + * playerdebugger.h, e.g. <code>kIsArgument</code> etc. + */ +public interface VariableAttribute +{ + /** + * Indicates that this member is invisible to an enumeration + * of its parent. + */ + public static final int DONT_ENUMERATE = 0x00000001; + + /** + * Indicates that a variable is read-only. + */ + public static final int READ_ONLY = 0x00000004; + + /** + * Indicates that a variable is a local. + */ + public static final int IS_LOCAL = 0x00000020; + + /** + * Indicates that a variable is an argument to a function. + */ + public static final int IS_ARGUMENT = 0x00010000; + + /** + * Indicates that a variable is "dynamic" -- that is, whether it + * is a dynamic property of a class declared with keyword "dynamic". + * Note, this attribute only works with AS3 and above. + */ + public static final int IS_DYNAMIC = 0x00020000; + + // 0x00040000 is reserved for IS_EXCEPTION, which is now part of + // ValueAttribute rather than VariableAttribute. + + /** + * Indicates that a variable has a getter. + */ + public static final int HAS_GETTER = 0x00080000; + + /** + * Indicates that a variable has a setter. + */ + public static final int HAS_SETTER = 0x00100000; + + /** + * Indicates that a variable is a static member of its parent. + */ + public static final int IS_STATIC = 0x00200000; + + /** + * Indicates that a variable was declared "const". READ_ONLY, on the other + * hand, applies both to "const" variables and also to various other types + * of objects. IS_CONST implies READ_ONLY; READ_ONLY does not imply + * IS_CONST. + */ + public static final int IS_CONST = 0x00400000; + + /** + * Indicates that a variable is a public member of its parent. + * + * Note: the scope attributes are not bitfields. To determine the scope + * of a variable, use variable.getScope() and compare the result to the + * various *_SCOPE values using ==. For example: + * + * <pre> + * if (myVar.getScope() == VariableAttribute.PUBLIC_SCOPE) ... + * </pre> + */ + public static final int PUBLIC_SCOPE = 0x00000000; + + /** + * Indicates that a variable is a private member of its parent. + * + * Note: the scope attributes are not bitfields. To determine the scope + * of a variable, use variable.getScope() and compare the result to the + * various *_SCOPE values using ==. For example: + * + * <pre> + * if (myVar.getScope() == VariableAttribute.PRIVATE_SCOPE) ... + * </pre> + */ + public static final int PRIVATE_SCOPE = 0x00800000; + + /** + * Indicates that a variable is a protected member of its parent. + * + * Note: the scope attributes are not bitfields. To determine the scope + * of a variable, use variable.getScope() and compare the result to the + * various *_SCOPE values using ==. For example: + * + * <pre> + * if (myVar.getScope() == VariableAttribute.PROTECTED_SCOPE) ... + * </pre> + */ + public static final int PROTECTED_SCOPE = 0x01000000; + + /** + * Indicates that a variable is an internal member of its parent. + * Internally scoped variables are visible to all classes that + * are in the same package. + * + * Note: the scope attributes are not bitfields. To determine the scope + * of a variable, use variable.getScope() and compare the result to the + * various *_SCOPE values using ==. For example: + * + * <pre> + * if (myVar.getScope() == VariableAttribute.INTERNAL_SCOPE) ... + * </pre> + */ + public static final int INTERNAL_SCOPE = 0x01800000; + + /** + * Indicates that a variable is scoped by a namespace. For + * example, it may have been declared as: + * <code>my_namespace var x;</code> + * + * Note: the scope attributes are not bitfields. To determine the scope + * of a variable, use variable.getScope() and compare the result to the + * various *_SCOPE values using ==. For example: + * + * <pre> + * if (myVar.getScope() == VariableAttribute.NAMESPACE_SCOPE) ... + * </pre> + */ + public static final int NAMESPACE_SCOPE = 0x02000000; + + /** + * A mask which can be used to get back only the scope-related + * attributes. + * + * Note: the scope attributes are not bitfields. To determine the scope + * of a variable, use variable.getScope() and compare the result to the + * various *_SCOPE values using ==. For example: + * + * <pre> + * if (myVar.getScope() == VariableAttribute.PRIVATE_SCOPE) ... + * </pre> + */ + public static final int SCOPE_MASK = PUBLIC_SCOPE|PRIVATE_SCOPE|PROTECTED_SCOPE|INTERNAL_SCOPE|NAMESPACE_SCOPE; + + // 0x04000000 is reserved for IS_CLASS, which is now part of + // ValueAttribute rather than VariableAttribute. +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/VariableType.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/VariableType.java b/debugger/src/main/java/flash/tools/debugger/VariableType.java new file mode 100644 index 0000000..48554da --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/VariableType.java @@ -0,0 +1,34 @@ +/* + * 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; + +/** + * An identifier for the type of a Variable. + */ +public interface VariableType +{ + public static final int NUMBER = 0; + public static final int BOOLEAN = 1; + public static final int STRING = 2; + public static final int OBJECT = 3; + public static final int FUNCTION = 4; + public static final int MOVIECLIP = 5; + public static final int NULL = 6; + public static final int UNDEFINED = 7; + public static final int UNKNOWN = 8; +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/VersionException.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/VersionException.java b/debugger/src/main/java/flash/tools/debugger/VersionException.java new file mode 100644 index 0000000..5ecb0ca --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/VersionException.java @@ -0,0 +1,34 @@ +/* + * 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; + +/** + * VersionException is thrown when the Session + * is connected to a Player that does not support + * a given operation. + */ +public class VersionException extends PlayerDebugException +{ + private static final long serialVersionUID = 4966523681921720567L; + + @Override + public String getMessage() + { + return Bootstrap.getLocalizationManager().getLocalizedTextString("unexpectedPlayerVersion"); //$NON-NLS-1$ + } +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/Watch.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/Watch.java b/debugger/src/main/java/flash/tools/debugger/Watch.java new file mode 100644 index 0000000..d8d9aef --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/Watch.java @@ -0,0 +1,52 @@ +/* + * 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; + +/** + * The Watch object represents a single watchpoint within a Session + * A watchpoint is a mechanism by which execution of the Player + * can be halted when a particular variable is accessed. The + * access type can be one of read, write or read/write. + * @since Version 2 + */ +public interface Watch +{ + /** + * Value id of the value whose member is being watched. + * For example if the watch is placed on 'a.b.c' then the id + * will be that of the value 'a.b'. Session.getVariable() + * can be used to obtain the variable. This combined with + * the memberName() forms the unique identifier for the Watch. + */ + public long getValueId(); + + /** + * Name of variable member that is being watched. + */ + public String getMemberName(); + + /** + * The kind of watch placed on the variable being watched. + */ + public int getKind(); + + /** + * The isolate to which this watchpoint belongs. + */ + public int getIsolateId(); +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/WatchKind.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/WatchKind.java b/debugger/src/main/java/flash/tools/debugger/WatchKind.java new file mode 100644 index 0000000..b5a9d01 --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/WatchKind.java @@ -0,0 +1,33 @@ +/* + * 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; + +/** + * A descriptor for the type of watchpoint. + * It may be one of three values; read, write or + * both read and write. + * @since Version 2 + */ +public interface WatchKind +{ + /* kind of a watchpoint (one of) */ + public static final int NONE = 0; + public static final int READ = 1; + public static final int WRITE = 2; + public static final int READWRITE = 3; +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/concrete/AIRPlayer.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/concrete/AIRPlayer.java b/debugger/src/main/java/flash/tools/debugger/concrete/AIRPlayer.java new file mode 100644 index 0000000..2aeefd3 --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/concrete/AIRPlayer.java @@ -0,0 +1,64 @@ +/* + * 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.concrete; + +import java.io.File; + +import flash.tools.debugger.Browser; +import flash.tools.debugger.Player; + +/** + * @author Mike Morearty + */ +public class AIRPlayer implements Player +{ + File m_adl; + + /** + * @param adl + * The path to adl (Mac/Linux) or adl.exe (Windows); may be null + */ + public AIRPlayer(File adl) + { + m_adl = adl; + } + + /* + * @see flash.tools.debugger.Player#getType() + */ + public int getType() + { + return AIR; + } + + /* + * @see flash.tools.debugger.Player#getPath() + */ + public File getPath() + { + return m_adl; + } + + /* + * @see flash.tools.debugger.Player#getBrowser() + */ + public Browser getBrowser() + { + return null; + } +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/concrete/AbstractPlayer.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/concrete/AbstractPlayer.java b/debugger/src/main/java/flash/tools/debugger/concrete/AbstractPlayer.java new file mode 100644 index 0000000..d147768 --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/concrete/AbstractPlayer.java @@ -0,0 +1,55 @@ +/* + * 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.concrete; + +import java.io.File; + +import flash.tools.debugger.Browser; +import flash.tools.debugger.Player; + +/** + * @author mmorearty + */ +public abstract class AbstractPlayer implements Player +{ + private Browser m_browser; + private File m_flashPlayer; + + public AbstractPlayer(File webBrowser, File flashPlayer) + { + if (webBrowser != null) + m_browser = new DBrowser(webBrowser); + m_flashPlayer = flashPlayer; + } + + /* + * @see flash.tools.debugger.Player#getPath() + */ + public File getPath() + { + return m_flashPlayer; + } + + /* + * @see flash.tools.debugger.Player#getBrowser() + */ + public Browser getBrowser() + { + return m_browser; // this is null if we're using the standalone player + } +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/concrete/ActiveXPlayer.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/concrete/ActiveXPlayer.java b/debugger/src/main/java/flash/tools/debugger/concrete/ActiveXPlayer.java new file mode 100644 index 0000000..45cf5eb --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/concrete/ActiveXPlayer.java @@ -0,0 +1,39 @@ +/* + * 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.concrete; + +import java.io.File; + +/** + * @author mmorearty + */ +public class ActiveXPlayer extends AbstractPlayer +{ + public ActiveXPlayer(File iexploreExe, File path) + { + super(iexploreExe, path); + } + + /* + * @see flash.tools.debugger.Player#getType() + */ + public int getType() + { + return ACTIVEX; + } +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/concrete/BinaryOp.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/concrete/BinaryOp.java b/debugger/src/main/java/flash/tools/debugger/concrete/BinaryOp.java new file mode 100644 index 0000000..d5bd0b4 --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/concrete/BinaryOp.java @@ -0,0 +1,47 @@ +/* + * 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.concrete; + +/** + * @author Mike Morearty + */ +public enum BinaryOp { + // These correspond to the values in the player, in playerdebugger.h, + // enum BinaryOp. These values must be kept synchronized with those + // ones. + Is(0, "is"), //$NON-NLS-1$ + Instanceof(1, "instanceof"), //$NON-NLS-1$ + In(2, "in"), //$NON-NLS-1$ + As(3, "as"); //$NON-NLS-1$ + + private int m_value; + private String m_name; + + private BinaryOp(int value, String name) { + m_value = value; + m_name = name; + } + + public int getValue() { + return m_value; + } + + public String getName() { + return m_name; + } +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/concrete/DBrowser.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/concrete/DBrowser.java b/debugger/src/main/java/flash/tools/debugger/concrete/DBrowser.java new file mode 100644 index 0000000..cd69fa4 --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/concrete/DBrowser.java @@ -0,0 +1,65 @@ +/* + * 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.concrete; + +import java.io.File; + +import flash.tools.debugger.Browser; + +/** + * @author mmorearty + */ +public class DBrowser implements Browser +{ + private File m_path; + private int m_type; + + public DBrowser(File exepath) + { + m_path = exepath; + String exename = exepath.getName().toLowerCase(); + if (exename.equals("iexplore.exe")) //$NON-NLS-1$ + m_type = INTERNET_EXPLORER; + else if (exename.equals("mozilla.exe")) //$NON-NLS-1$ + m_type = MOZILLA; + else if (exename.equals("firefox.exe")) //$NON-NLS-1$ + m_type = MOZILLA_FIREFOX; + else if (exename.equals("opera.exe")) //$NON-NLS-1$ + m_type = OPERA; + else if (exename.equals("netscape.exe")) //$NON-NLS-1$ + m_type = NETSCAPE_NAVIGATOR; + else + m_type = UNKNOWN; + } + + /* + * @see flash.tools.debugger.Browser#getType() + */ + public int getType() + { + return m_type; + } + + /* + * @see flash.tools.debugger.Browser#getPath() + */ + public File getPath() + { + return m_path; + } +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/07f5a7de/debugger/src/main/java/flash/tools/debugger/concrete/DIsolate.java ---------------------------------------------------------------------- diff --git a/debugger/src/main/java/flash/tools/debugger/concrete/DIsolate.java b/debugger/src/main/java/flash/tools/debugger/concrete/DIsolate.java new file mode 100644 index 0000000..3a0b21b --- /dev/null +++ b/debugger/src/main/java/flash/tools/debugger/concrete/DIsolate.java @@ -0,0 +1,49 @@ +/* + * 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.concrete; + +import flash.tools.debugger.Isolate; + +/** + * Concrete implementation of an Isolate. + * @author anirudhs + */ +public class DIsolate implements Isolate { + + /** Isolate object behind the primordial or main thread (always exists) */ + public static final DIsolate DEFAULT_ISOLATE = new DIsolate(Isolate.DEFAULT_ID); + + private int id; + + public DIsolate(int id) { + this.id = id; + } + + /* (non-Javadoc) + * @see flash.tools.debugger.Isolate#getId() + */ + @Override + public int getId() { + return id; + } + + @Override + public String toString() { + return "Worker " + getId(); //$NON-NLS-1$ + } + +}