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$
+	}	
+
+}