diff --git a/src/core/org/luaj/vm/LuaState.java b/src/core/org/luaj/vm/LuaState.java index 58cf9848..650a27f8 100644 --- a/src/core/org/luaj/vm/LuaState.java +++ b/src/core/org/luaj/vm/LuaState.java @@ -70,8 +70,12 @@ import org.luaj.lib.TableLib; */ public class LuaState extends Lua { - public static final String PROPERTY_LUAJ_DEBUG = "Luaj-Debug"; - protected static final String DEBUG_CLASS_NAME = "org.luaj.debug.DebugLuaState"; + protected static final String DEBUG_CLASS_NAME = "org.luaj.debug.DebugLuaState"; + + public static final String PROPERTY_LUAJ_DEBUG = "Luaj-Debug"; + public static final String PROPERTY_LUAJ_DEBUG_SUSPEND_AT_START = "Luaj-Debug-SuspendAtStart"; + public static final String PROPERTY_LUAJ_DEBUG_HOST = "Luaj-Debug-Host"; + public static final String PROPERTY_LUAJ_DEBUG_PORT = "Luaj-Debug-Port"; /* thread status; 0 is OK */ private static final int LUA_YIELD = 1; diff --git a/src/core/org/luaj/vm/Platform.java b/src/core/org/luaj/vm/Platform.java index be081bb2..518a1fec 100644 --- a/src/core/org/luaj/vm/Platform.java +++ b/src/core/org/luaj/vm/Platform.java @@ -1,24 +1,24 @@ /******************************************************************************* -* Copyright (c) 2007 LuaJ. All rights reserved. -* -* Permission is hereby granted, free of charge, to any person obtaining a copy -* of this software and associated documentation files (the "Software"), to deal -* in the Software without restriction, including without limitation the rights -* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the Software is -* furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in -* all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -* THE SOFTWARE. -******************************************************************************/ + * Copyright (c) 2007 LuaJ. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + ******************************************************************************/ package org.luaj.vm; import java.io.IOException; @@ -27,83 +27,116 @@ import java.io.InputStreamReader; import java.io.Reader; /** - * Singleton to manage platform-specific behaviors. - * - * @deprecated - will probably be replaced with Config, LuaConfig or something similar. + * Singleton to manage platform-specific behaviors. + * + * @deprecated - will probably be replaced with Config, LuaConfig or something + * similar. */ abstract public class Platform { - private static Platform instance; + private static Platform instance; - /** - * Singleton to be used for platform operations. - * - * The default Platform gets files as resources, - * and converts them to characters using the default - * InputStreamReader class. - */ - public static Platform getInstance() { + /** + * Singleton to be used for platform operations. + * + * The default Platform gets files as resources, and converts them to + * characters using the default InputStreamReader class. + */ + public static Platform getInstance() { if (instance == null) { instance = new Platform() { - public Reader createReader(InputStream inputStream) { - return new InputStreamReader(inputStream); - } - - public InputStream openFile(String fileName) { - return getClass().getResourceAsStream("/" + fileName); - } - - /** - * Assumes J2SE platform, return the corresponding system property - */ - public String getProperty(String propertyName) { - return System.getProperty(propertyName); - } - - /** - * Provides a J2SE DebugSupport instance. - */ - public DebugNetSupport getDebugSupport() throws IOException { - return null; - } - }; - } - return instance; - } + public Reader createReader(InputStream inputStream) { + return new InputStreamReader(inputStream); + } - /** - * Set the Platform instance. - * - * This may be useful to define a file search path, - * or custom character encoding conversion properties. - */ - public static void setInstance( Platform platform ) { - instance = platform; - } - - /** - * Return an InputStream or null if not found for a particular file name. - * @param fileName Name of the file to open - * @return InputStream or null if not found. - */ - abstract public InputStream openFile( String fileName ); - - /** - * Create Reader from an InputStream - * @param inputStream InputStream to read from - * @return Reader instance to use for character input - */ - abstract public Reader createReader( InputStream inputStream ); - - /** - * Returns the value for the given platform property. - * @param propertyName Property name - * @return Property value - */ - abstract public String getProperty(String propertyName); - - /** - * Returns an platform dependent DebugSupport instance. - * @return an platform dependent DebugSupport instance. - */ - abstract public DebugNetSupport getDebugSupport() throws IOException; + public InputStream openFile(String fileName) { + return getClass().getResourceAsStream("/" + fileName); + } + + /** + * Assumes J2SE platform, return the corresponding system + * property + */ + public String getProperty(String propertyName) { + return System.getProperty(propertyName); + } + + /** + * Provides a J2SE DebugSupport instance. + */ + public DebugNetSupport getDebugSupport() throws IOException { + return null; + } + }; + } + return instance; + } + + /** + * Set the Platform instance. + * + * This may be useful to define a file search path, or custom character + * encoding conversion properties. + */ + public static void setInstance(Platform platform) { + instance = platform; + } + + /** + * Return an InputStream or null if not found for a particular file name. + * + * @param fileName + * Name of the file to open + * @return InputStream or null if not found. + */ + abstract public InputStream openFile(String fileName); + + /** + * Create Reader from an InputStream + * + * @param inputStream + * InputStream to read from + * @return Reader instance to use for character input + */ + abstract public Reader createReader(InputStream inputStream); + + /** + * Returns the value for the given platform property. + * + * @param propertyName + * Property name + * @return Property value + */ + abstract public String getProperty(String propertyName); + + /** + * Returns an platform dependent DebugSupport instance. + * + * @return an platform dependent DebugSupport instance. + */ + abstract public DebugNetSupport getDebugSupport() throws IOException; + + /** + * Convenience method for the subclasses to figure out the debug host. + * @return the debug host property. If it is not present, null is returned. + */ + protected String getDebugHost() { + String host = getProperty(LuaState.PROPERTY_LUAJ_DEBUG_HOST); + return host; + } + + /** + * Convenience method for the subclasses to figure out the debug port. + * @return -1 if the port is not found in the platform properties; the port + * as an integer if it is present in the platform properties and valid. + */ + protected int getDebugPort() { + String portStr = getProperty(LuaState.PROPERTY_LUAJ_DEBUG_PORT); + int port = -1; + if (portStr != null) { + try { + port = Integer.parseInt(portStr); + } catch (NumberFormatException e) {} + } + return port; + } } diff --git a/src/debug/org/luaj/debug/DebugLuaState.java b/src/debug/org/luaj/debug/DebugLuaState.java index 3f33cdab..50338b3c 100644 --- a/src/debug/org/luaj/debug/DebugLuaState.java +++ b/src/debug/org/luaj/debug/DebugLuaState.java @@ -49,11 +49,7 @@ import org.luaj.vm.LuaState; import org.luaj.vm.Platform; -public class DebugLuaState extends LuaState implements DebugRequestListener { - public static final String PROPERTY_LUAJ_DEBUG_SUSPEND_AT_START = "Luaj-Debug-SuspendAtStart"; - public static final String PROPERTY_LUAJ_DEBUG_HOST = "Luaj-Debug-Host"; - public static final String PROPERTY_LUAJ_DEBUG_PORT = "Luaj-Debug-Port"; - +public class DebugLuaState extends LuaState implements DebugRequestListener { private static final boolean TRACE = (null != System.getProperty("TRACE")); // stepping constants and stepping state diff --git a/src/test/java/org/luaj/debug/j2se/LuaJVMTest.java b/src/test/java/org/luaj/debug/j2se/LuaJVMTest.java index dbca7135..74b75f04 100644 --- a/src/test/java/org/luaj/debug/j2se/LuaJVMTest.java +++ b/src/test/java/org/luaj/debug/j2se/LuaJVMTest.java @@ -66,26 +66,10 @@ public class LuaJVMTest extends TestCase { * Provides a J2SE DebugSupport instance. */ public DebugNetSupport getDebugSupport() throws IOException { - int port = getDebugPortNumber(); + int port = getDebugPort(); DebugSupportImpl debugSupport = new DebugSupportImpl(port); return debugSupport; } - - private int getDebugPortNumber() throws IOException { - String portStr = - getProperty(DebugLuaState.PROPERTY_LUAJ_DEBUG_PORT); - int port = -1; - if (portStr == null) { - throw new IOException("Port number must be specified in the System property"); - } else { - try { - port = Integer.parseInt(portStr); - } catch (NumberFormatException e) { - throw new IOException("Bad port number: " + portStr); - } - } - return port; - } }); }