You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2016/04/26 06:29:13 UTC
[21/63] [abbrv] [partial] git commit: [flex-falcon]
[refs/heads/develop] - move stuff to where I think Maven wants it
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$
+ }
+
+}