diff --git a/build.xml b/build.xml index e75a13ac..11145062 100644 --- a/build.xml +++ b/build.xml @@ -1,10 +1,15 @@ - + + + + + + @@ -36,7 +41,7 @@ - + diff --git a/src/main/java/lua/debug/DebugStackState.java b/src/main/java/lua/debug/DebugStackState.java index e174456a..150e1aea 100644 --- a/src/main/java/lua/debug/DebugStackState.java +++ b/src/main/java/lua/debug/DebugStackState.java @@ -66,19 +66,19 @@ public class DebugStackState extends StackState implements DebugRequestListener public void addDebugEventListener(DebugEventListener listener) { if (!debugEventListeners.contains(listener)) { - debugEventListeners.add(listener); + debugEventListeners.addElement(listener); } } public void removeDebugEventListener(DebugEventListener listener) { if (debugEventListeners.contains(listener)) { - debugEventListeners.remove(listener); + debugEventListeners.removeElement(listener); } } protected void notifyDebugEventListeners(DebugEvent event) { for (int i = 0; debugEventListeners != null && i < debugEventListeners.size(); i++) { - DebugEventListener listener = (DebugEventListener)debugEventListeners.get(i); + DebugEventListener listener = (DebugEventListener)debugEventListeners.elementAt(i); listener.notifyDebugEvent(event); } } @@ -336,7 +336,7 @@ public class DebugStackState extends StackState implements DebugRequestListener DebugUtils.print("\tType: " + Lua.TYPE_NAMES[type]); if (type == Lua.LUA_TTABLE) { DebugUtils.println(" (selected)"); - variables.add( + variables.addElement( new TableVariable(localVariableCount++, varName, type, @@ -344,7 +344,7 @@ public class DebugStackState extends StackState implements DebugRequestListener } else if (type != Lua.LUA_TFUNCTION && type != LUA_TTHREAD) { DebugUtils.println(" (selected)"); - variables.add( + variables.addElement( new Variable(localVariableCount++, varName, type, @@ -358,8 +358,13 @@ public class DebugStackState extends StackState implements DebugRequestListener } else { DebugUtils.println(""); } - } - return (Variable[])variables.toArray(new Variable[0]); + } + + Variable[] result = new Variable[variables.size()]; + for (int i = 0; i < variables.size(); i++) { + result[i] = (Variable) variables.elementAt(i); + } + return result; } diff --git a/src/main/java/lua/debug/DebugUtils.java b/src/main/java/lua/debug/DebugUtils.java index 898211c7..d694f973 100644 --- a/src/main/java/lua/debug/DebugUtils.java +++ b/src/main/java/lua/debug/DebugUtils.java @@ -21,13 +21,11 @@ ******************************************************************************/ package lua.debug; -import java.io.File; - import lua.io.LoadState; import lua.value.LString; public class DebugUtils { - public static final boolean IS_DEBUG = true; + public static final boolean IS_DEBUG = false; public static void println(String message) { if (IS_DEBUG) { @@ -41,14 +39,15 @@ public class DebugUtils { } } - public static String getSourceFileName(LString source) { - String sourceStr = source.toJavaString(); - sourceStr = LoadState.getSourceName(sourceStr); - if (!LoadState.SOURCE_BINARY_STRING.equals(sourceStr)) { - File sourceFile = new File(sourceStr); - return sourceFile.getName(); - } else { - return sourceStr; - } - } + public static String getSourceFileName(LString source) { + String sourceStr = LoadState.getSourceName(source.toJavaString()); + if (!LoadState.SOURCE_BINARY_STRING.equals(sourceStr)) { + sourceStr = sourceStr.replace('\\', '/'); + int index = sourceStr.lastIndexOf('/'); + if (index != -1) { + sourceStr = sourceStr.substring(index + 1); + } + } + return sourceStr; + } } diff --git a/src/main/java/lua/debug/SerializationHelper.java b/src/main/java/lua/debug/SerializationHelper.java index 8c535ad6..16dd58b9 100644 --- a/src/main/java/lua/debug/SerializationHelper.java +++ b/src/main/java/lua/debug/SerializationHelper.java @@ -52,15 +52,14 @@ public class SerializationHelper { static final int SERIAL_TYPE_DebugResponseCallgraph = 3; static final int SERIAL_TYPE_DebugResponseStack = 4; static final int SERIAL_TYPE_DebugResponseSimple = 5; - static final int SERIAL_TYPE_DebugSupportState = 6; - static final int SERIAL_TYPE_StackFrame = 7; - static final int SERIAL_TYPE_DebugRequestType = 8; - static final int SERIAL_TYPE_DebugRequest = 9; - static final int SERIAL_TYPE_DebugRequestStack = 10; - static final int SERIAL_TYPE_DebugRequestLineBreakpointToggle = 11; - static final int SERIAL_TYPE_DebugEventType = 12; - static final int SERIAL_TYPE_DebugEvent = 13; - static final int SERIAL_TYPE_DebugEventBreakpoint = 14; + static final int SERIAL_TYPE_StackFrame = 6; + static final int SERIAL_TYPE_DebugRequestType = 7; + static final int SERIAL_TYPE_DebugRequest = 8; + static final int SERIAL_TYPE_DebugRequestStack = 9; + static final int SERIAL_TYPE_DebugRequestLineBreakpointToggle = 10; + static final int SERIAL_TYPE_DebugEventType = 11; + static final int SERIAL_TYPE_DebugEvent = 12; + static final int SERIAL_TYPE_DebugEventBreakpoint = 13; public static void serialize(Serializable object, DataOutputStream dout) throws IOException { @@ -85,9 +84,6 @@ public class SerializationHelper { } else if (object instanceof DebugResponseCallgraph) { dout.writeInt(SERIAL_TYPE_DebugResponseCallgraph); DebugResponseCallgraph.serialize(dout, (DebugResponseCallgraph)object); - } else if (object instanceof DebugSupport.State) { - dout.writeInt(SERIAL_TYPE_DebugSupportState); - DebugSupport.State.serialize(dout, (DebugSupport.State)object); } else if (object instanceof DebugRequestType) { dout.writeInt(SERIAL_TYPE_DebugRequestType); DebugRequestType.serialize(dout, (DebugRequestType)object); @@ -141,9 +137,6 @@ public class SerializationHelper { case SERIAL_TYPE_DebugResponseStack: object = DebugResponseStack.deserialize(din); break; - case SERIAL_TYPE_DebugSupportState: - object = DebugSupport.State.deserialize(din); - break; case SERIAL_TYPE_DebugRequestType: object = DebugRequestType.deserialize(din); break; diff --git a/src/main/java/lua/debug/TableVariable.java b/src/main/java/lua/debug/TableVariable.java index 8115b49b..dc1de246 100644 --- a/src/main/java/lua/debug/TableVariable.java +++ b/src/main/java/lua/debug/TableVariable.java @@ -39,8 +39,8 @@ public class TableVariable extends Variable { int size = table.size(); DebugUtils.println("table size:" + size); - Vector keyArray = new Vector(); - Vector valueArray = new Vector(); + Vector keyList = new Vector(); + Vector valueList = new Vector(); LValue[] keyValues = table.getKeys(); for (int i = 0; i < size; i++) { @@ -49,18 +49,26 @@ public class TableVariable extends Variable { continue; } - keyArray.add(keyValues[i].toString()); + keyList.addElement(keyValues[i].toString()); if (value instanceof LTable) { DebugUtils.println("table: value[" + i + "]=" + value.toString()); - valueArray.add(new TableVariable(i, "element[" + keyValues[i].toString() + "]", Lua.LUA_TTABLE, (LTable)value)); + valueList.addElement(new TableVariable(i, "element[" + keyValues[i].toString() + "]", Lua.LUA_TTABLE, (LTable)value)); } else { - valueArray.add(value.toString()); + valueList.addElement(value.toString()); } DebugUtils.println("["+ keyValues[i].toString() + "," + value.toString() + "]"); } - this.keys = (String[])keyArray.toArray(new String[0]); - this.values = (Object[]) valueArray.toArray(new Object[0]); + this.keys = new String[keyList.size()]; + for (int i = 0; i < keyList.size(); i++) { + this.keys[i] = (String)keyList.elementAt(i); + } + + this.values = new Object[valueList.size()]; + for (int i = 0; i < valueList.size(); i++) { + this.values[i] = valueList.elementAt(i); + } + if (this.keys.length != this.values.length) { throw new RuntimeException("Internal Error: key.length must equal to values.length"); } diff --git a/src/main/java/lua/debug/DebugSupport.java b/src/main/java/lua/debug/j2se/DebugSupport.java similarity index 87% rename from src/main/java/lua/debug/DebugSupport.java rename to src/main/java/lua/debug/j2se/DebugSupport.java index df274789..de0067ee 100644 --- a/src/main/java/lua/debug/DebugSupport.java +++ b/src/main/java/lua/debug/j2se/DebugSupport.java @@ -19,7 +19,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. ******************************************************************************/ -package lua.debug; +package lua.debug.j2se; import java.io.DataInputStream; import java.io.DataOutputStream; @@ -28,6 +28,8 @@ import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; +import lua.debug.DebugUtils; +import lua.debug.SerializationHelper; import lua.debug.event.DebugEvent; import lua.debug.event.DebugEventListener; import lua.debug.request.DebugRequest; @@ -35,35 +37,15 @@ import lua.debug.request.DebugRequestListener; import lua.debug.response.DebugResponse; public class DebugSupport implements DebugEventListener { - public static class State extends EnumType { - public static final State UNKNOWN = new State("UNKNOWN", 0); - public static final State RUNNING = new State("RUNNING", 1); - public static final State STOPPED = new State("STOPPED", 2); - - protected static final State[] ENUMS = new State[] { - UNKNOWN, - RUNNING, - STOPPED - }; - - public State(String name, int ordinal) { - super(name, ordinal); - } - - public static State deserialize(DataInputStream in) throws IOException { - int ordinal = in.readInt(); - if (ordinal < 0 || ordinal >= ENUMS.length) { - throw new RuntimeException("ordinal is out of the range."); - } - return ENUMS[ordinal]; - } - } - + protected static final int UNKNOWN = 0; + protected static final int RUNNING = 1; + protected static final int STOPPED = 2; + protected DebugRequestListener listener; protected int requestPort; protected int eventPort; protected Thread requestWatcherThread; - protected State state = State.UNKNOWN; + protected int state = UNKNOWN; protected ServerSocket requestSocket; protected Socket clientRequestSocket; @@ -146,7 +128,7 @@ public class DebugSupport implements DebugEventListener { this.requestWatcherThread = new Thread(new Runnable() { public void run() { - if (getState() != State.STOPPED) { + if (getState() != STOPPED) { handleRequest(); } else { releaseServer(); @@ -154,21 +136,21 @@ public class DebugSupport implements DebugEventListener { } }); this.requestWatcherThread.start(); - this.state = State.RUNNING; + this.state = RUNNING; } - public synchronized State getState() { + public synchronized int getState() { return this.state; } public synchronized void stop() { - this.state = State.STOPPED; + this.state = STOPPED; } public void handleRequest() { synchronized (clientRequestSocket) { try { - while (getState() != State.STOPPED) { + while (getState() != STOPPED) { int size = requestReader.readInt(); byte[] data = new byte[size]; requestReader.readFully(data); @@ -184,7 +166,7 @@ public class DebugSupport implements DebugEventListener { DebugUtils.println("SERVER sends response: " + response); } - if (getState() == State.STOPPED) { + if (getState() == STOPPED) { cleanup(); } } catch (EOFException e) { diff --git a/src/main/java/lua/debug/StandardLuaJVM.java b/src/main/java/lua/debug/j2se/StandardLuaJVM.java similarity index 98% rename from src/main/java/lua/debug/StandardLuaJVM.java rename to src/main/java/lua/debug/j2se/StandardLuaJVM.java index a62d682c..3c396f75 100644 --- a/src/main/java/lua/debug/StandardLuaJVM.java +++ b/src/main/java/lua/debug/j2se/StandardLuaJVM.java @@ -19,7 +19,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. ******************************************************************************/ -package lua.debug; +package lua.debug.j2se; import java.io.File; import java.io.FileInputStream; @@ -34,6 +34,8 @@ import lua.GlobalState; import lua.StackState; import lua.addon.luacompat.LuaCompat; import lua.addon.luajava.LuaJava; +import lua.debug.DebugStackState; +import lua.debug.DebugUtils; import lua.debug.event.DebugEvent; import lua.debug.event.DebugEventType; import lua.debug.request.DebugRequest; @@ -118,7 +120,7 @@ public class StandardLuaJVM implements DebugRequestListener { } private void parseScriptArgs(String[] args) - throws lua.debug.StandardLuaJVM.ParseException { + throws lua.debug.j2se.StandardLuaJVM.ParseException { if (args == null || args.length < 1) { throw new ParseException("script is missing."); } diff --git a/src/main/java/lua/debug/response/DebugResponseCallgraph.java b/src/main/java/lua/debug/response/DebugResponseCallgraph.java index a72d3a71..1f9b047c 100644 --- a/src/main/java/lua/debug/response/DebugResponseCallgraph.java +++ b/src/main/java/lua/debug/response/DebugResponseCallgraph.java @@ -43,7 +43,7 @@ public class DebugResponseCallgraph implements DebugResponse { } public String toString() { - StringBuilder buffer = new StringBuilder(); + StringBuffer buffer = new StringBuffer(); for (int i = 0; i < stackFrames.length; i++) { StackFrame frame = stackFrames[i]; buffer.append(frame.toString()); diff --git a/src/main/java/lua/debug/response/DebugResponseStack.java b/src/main/java/lua/debug/response/DebugResponseStack.java index 0349282c..32ec35f7 100644 --- a/src/main/java/lua/debug/response/DebugResponseStack.java +++ b/src/main/java/lua/debug/response/DebugResponseStack.java @@ -47,7 +47,7 @@ public class DebugResponseStack implements DebugResponse { * @see java.lang.Object#toString() */ public String toString() { - StringBuilder buffer = new StringBuilder(); + StringBuffer buffer = new StringBuffer(); for (int i = 0; variables != null && i < variables.length; i++) { buffer.append("\t" + variables[i].getName() + ":" + variables[i].getIndex() + "\n"); } diff --git a/src/test/java/lua/debug/EnumTypeTest.java b/src/test/java/lua/debug/EnumTypeTest.java index 061ae2fd..07613ddd 100644 --- a/src/test/java/lua/debug/EnumTypeTest.java +++ b/src/test/java/lua/debug/EnumTypeTest.java @@ -5,18 +5,6 @@ import lua.debug.event.DebugEventType; import lua.debug.request.DebugRequestType; public class EnumTypeTest extends TestCase { - public void testDebugSupportStateSerialization() { - try { - DebugSupport.State stateIn = DebugSupport.State.RUNNING; - byte[] data = SerializationHelper.serialize(stateIn); - DebugSupport.State stateOut - = (DebugSupport.State) SerializationHelper.deserialize(data); - assertEquals(stateIn, stateOut); - } catch (Exception e) { - fail(e.getMessage()); - } - } - public void testDebugRequestTypeSerialization() { try { DebugRequestType type = DebugRequestType.lineBreakpointClear; diff --git a/src/test/java/lua/debug/LuaJVMTest.java b/src/test/java/lua/debug/j2se/LuaJVMTest.java similarity index 97% rename from src/test/java/lua/debug/LuaJVMTest.java rename to src/test/java/lua/debug/j2se/LuaJVMTest.java index 6187a159..0329061e 100644 --- a/src/test/java/lua/debug/LuaJVMTest.java +++ b/src/test/java/lua/debug/j2se/LuaJVMTest.java @@ -19,13 +19,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. ******************************************************************************/ -package lua.debug; +package lua.debug.j2se; import java.io.IOException; import java.net.URL; import junit.framework.TestCase; -import lua.debug.StandardLuaJVM.ParseException; +import lua.debug.j2se.StandardLuaJVM; +import lua.debug.j2se.StandardLuaJVM.ParseException; /** * Sanity test for StandardLuaJVM.