[RJ-Server] Improve RJ-Com
diff --git a/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/AbstractRJComClient.java b/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/AbstractRJComClient.java
index 0c517bf..09916c8 100644
--- a/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/AbstractRJComClient.java
+++ b/core/org.eclipse.statet.rj.client/src/org/eclipse/statet/rj/server/client/AbstractRJComClient.java
@@ -946,7 +946,8 @@
sendItem= this.consoleReadCallback;
}
default:
- while ((sendItem= getC2SCmds()) == null
+ while (!this.closed
+ && (sendItem= getC2SCmds()) == null
&& (loopReadCallbackIgnore || this.consoleReadCallback != null)
&& (this.dataLevelRequest <= loopDataLevelIgnore
|| this.dataLevelRequest == this.dataLevelAnswer
diff --git a/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/DataCmdItem.java b/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/DataCmdItem.java
index 6a9ac28..7ece4a5 100644
--- a/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/DataCmdItem.java
+++ b/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/DataCmdItem.java
@@ -50,9 +50,9 @@
private final boolean reqRData;
private final boolean reqTargetExpr;
- private Operation(final String name, final int op,
+ private Operation(final int op, final String name,
final byte source, final byte target, final boolean returnData) {
- this.op= (byte) op;
+ this.op= (byte)op;
this.name= name;
this.source= source;
this.target= target;
@@ -72,33 +72,40 @@
}
- public static final Operation EVAL_EXPR_VOID= new Operation("EVAL_EXPR_VOID", 1, //$NON-NLS-1$
- Operation.EXPR, Operation.NONE, false);
- public static final Operation EVAL_FCALL_VOID= new Operation("EVAL_FCALL_VOID", 2, //$NON-NLS-1$
- Operation.FCALL, Operation.NONE, false);
+ public static final byte EVAL_EXPR_VOID_OP= 0x01;
+ public static final Operation EVAL_EXPR_VOID= new Operation(EVAL_EXPR_VOID_OP, "EVAL_EXPR_VOID", //$NON-NLS-1$
+ Operation.EXPR, Operation.NONE, false );
+ public static final byte EVAL_FCALL_VOID_OP= 0x02;
+ public static final Operation EVAL_FCALL_VOID= new Operation(EVAL_FCALL_VOID_OP, "EVAL_FCALL_VOID", //$NON-NLS-1$
+ Operation.FCALL, Operation.NONE, false );
- public static final Operation EVAL_EXPR_DATA= new Operation("EVAL_EXPR_DATA", 3, //$NON-NLS-1$
- Operation.EXPR, Operation.NONE, true);
- public static final Operation EVAL_FCALL_DATA= new Operation("EVAL_FCALL_DATA", 4, //$NON-NLS-1$
- Operation.FCALL, Operation.NONE, true);
- public static final Operation RESOLVE_DATA= new Operation("RESOLVE_DATA", 5, // EVAL_REF_DATA //$NON-NLS-1$
- Operation.POINTER, Operation.NONE, true);
+ public static final byte EVAL_EXPR_DATA_OP= 0x03;
+ public static final Operation EVAL_EXPR_DATA= new Operation(EVAL_EXPR_DATA_OP, "EVAL_EXPR_DATA", //$NON-NLS-1$
+ Operation.EXPR, Operation.NONE, true );
+ public static final byte EVAL_FCALL_DATA_OP= 0x04;
+ public static final Operation EVAL_FCALL_DATA= new Operation(EVAL_FCALL_DATA_OP, "EVAL_FCALL_DATA", //$NON-NLS-1$
+ Operation.FCALL, Operation.NONE, true );
+ public static final byte RESOLVE_DATA_OP= 0x05;
+ public static final Operation RESOLVE_DATA= new Operation(RESOLVE_DATA_OP, "RESOLVE_DATA", // EVAL_REF_DATA //$NON-NLS-1$
+ Operation.POINTER, Operation.NONE, true );
- public static final Operation ASSIGN_DATA= new Operation("ASSIGN_DATA", 6, //$NON-NLS-1$
- Operation.RDATA, Operation.EXPR, false);
- public static final Operation ASSIGN_FCALL= new Operation("ASSIGN_FCALL", 7, //$NON-NLS-1$
- Operation.FCALL, Operation.EXPR, false);
+ public static final byte ASSIGN_DATA_OP= 0x06;
+ public static final Operation ASSIGN_DATA= new Operation(ASSIGN_DATA_OP, "ASSIGN_DATA", //$NON-NLS-1$
+ Operation.RDATA, Operation.EXPR, false );
+ public static final byte ASSIGN_FCALL_OP= 0x07;
+ public static final Operation ASSIGN_FCALL= new Operation(ASSIGN_FCALL_OP, "ASSIGN_FCALL", //$NON-NLS-1$
+ Operation.FCALL, Operation.EXPR, false );
- public static final int FIND_DATA_OP= 8;
- public static final Operation FIND_DATA= new Operation("FIND_DATA", FIND_DATA_OP, //$NON-NLS-1$
- Operation.EXPR, Operation.NONE, true);
+ public static final byte FIND_DATA_OP= 0x08;
+ public static final Operation FIND_DATA= new Operation(FIND_DATA_OP, "FIND_DATA", //$NON-NLS-1$
+ Operation.EXPR, Operation.NONE, true );
- public static final int EVAL_NAMESPACE_DATA_OP= 9;
- public static final Operation EVAL_NAMESPACE_DATA= new Operation("EVAL_NAMESPACE_DATA", EVAL_NAMESPACE_DATA_OP, //$NON-NLS-1$
- Operation.EXPR, Operation.NONE, true);
- public static final int EVAL_NAMESPACE_EXPORTS_DATA_OP= 10;
- public static final Operation EVAL_NAMESPACE_EXPORTS_DATA= new Operation("EVAL_NAMESPACE_EXPORTS_DATA", EVAL_NAMESPACE_EXPORTS_DATA_OP, //$NON-NLS-1$
- Operation.EXPR, Operation.NONE, true);
+ public static final byte EVAL_NAMESPACE_DATA_OP= 0x09;
+ public static final Operation EVAL_NAMESPACE_DATA= new Operation(EVAL_NAMESPACE_DATA_OP, "EVAL_NAMESPACE_DATA", //$NON-NLS-1$
+ Operation.EXPR, Operation.NONE, true );
+ public static final byte EVAL_NAMESPACE_EXPORTS_DATA_OP= 0x0A;
+ public static final Operation EVAL_NAMESPACE_EXPORTS_DATA= new Operation(EVAL_NAMESPACE_EXPORTS_DATA_OP, "EVAL_NAMESPACE_EXPORTS_DATA", //$NON-NLS-1$
+ Operation.EXPR, Operation.NONE, true );
private static final Operation[] OPERATIONS= new Operation[11];
@@ -395,37 +402,37 @@
@Override
public boolean testEquals(final MainCmdItem other) {
- if (!(other instanceof DataCmdItem)) {
- return false;
+ if (other instanceof DataCmdItem) {
+ final DataCmdItem otherItem= (DataCmdItem) other;
+ if (getOp() != otherItem.getOp()) {
+ return false;
+ }
+ if (this.options != otherItem.options) {
+ return false;
+ }
+ if (!((this.sourceExpr != null) ?
+ this.sourceExpr.equals(otherItem.sourceExpr) :
+ null == otherItem.sourceExpr )) {
+ return false;
+ }
+ if (!((this.rdata != null) ?
+ this.rdata.equals(otherItem.rdata) :
+ null == otherItem.rdata )) {
+ return false;
+ }
+ if (!((this.targetExpr != null) ?
+ this.targetExpr.equals(otherItem.targetExpr) :
+ null == otherItem.targetExpr )) {
+ return false;
+ }
+ if (!((this.rho != null) ?
+ this.rho.equals(otherItem.rho) :
+ null == otherItem.rho )) {
+ return false;
+ }
+ return true;
}
- final DataCmdItem otherItem= (DataCmdItem) other;
- if (getOp() != otherItem.getOp()) {
- return false;
- }
- if (this.options != otherItem.options) {
- return false;
- }
- if (!((this.sourceExpr != null) ?
- this.sourceExpr.equals(otherItem.sourceExpr) :
- null == otherItem.sourceExpr )) {
- return false;
- }
- if (!((this.rdata != null) ?
- this.rdata.equals(otherItem.rdata) :
- null == otherItem.rdata )) {
- return false;
- }
- if (!((this.targetExpr != null) ?
- this.targetExpr.equals(otherItem.targetExpr) :
- null == otherItem.targetExpr )) {
- return false;
- }
- if (!((this.rho != null) ?
- this.rho.equals(otherItem.rho) :
- null == otherItem.rho )) {
- return false;
- }
- return true;
+ return false;
}
@Override
diff --git a/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/DbgCmdItem.java b/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/DbgCmdItem.java
index 387ef34..4b02742 100644
--- a/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/DbgCmdItem.java
+++ b/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/DbgCmdItem.java
@@ -62,8 +62,10 @@
public static final byte OP_RESET_FILTER_STATE= 0032;
public static final byte OP_UPDATE_TP_STATES= 0034;
+ // --
public static final byte OP_C2S_S2C= 0040;
+ // -- S2C sync
public static final byte OP_NOTIFY_TP_EVENTS= 0x41;
diff --git a/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/MainCmdC2SList.java b/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/MainCmdC2SList.java
index 3c45eb0..51eb004 100644
--- a/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/MainCmdC2SList.java
+++ b/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/MainCmdC2SList.java
@@ -19,18 +19,22 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
import org.eclipse.statet.rj.data.RJIO;
/**
* Client-to-Server list with {@link MainCmdItem}s.
*/
+@NonNullByDefault
public final class MainCmdC2SList implements RjsComObject, Externalizable {
- private final RJIO privateIO;
+ private final @Nullable RJIO privateIO;
- private MainCmdItem first;
+ private @Nullable MainCmdItem first;
public MainCmdC2SList(final RJIO io) {
@@ -73,88 +77,59 @@
@Override
public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
final RJIO io= RJIO.get(in);
- final int check= io.readCheck1();
-
- { // first
- final byte type= in.readByte();
- switch (type) {
- case MainCmdItem.T_NONE:
- this.first= null;
- io.readCheck2(check);
- io.disconnect(in);
- return;
- case MainCmdItem.T_CONSOLE_READ_ITEM:
- this.first= new ConsoleReadCmdItem(io);
- break;
- case MainCmdItem.T_CONSOLE_WRITE_ITEM:
- this.first= new ConsoleWriteCmdItem(io);
- break;
- case MainCmdItem.T_MESSAGE_ITEM:
- this.first= new ConsoleMessageCmdItem(io);
- break;
- case MainCmdItem.T_EXT_CLIENT_ITEM:
- this.first= new ExtClientCmdItem(io);
- break;
- case MainCmdItem.T_GRAPH_ITEM:
- this.first= new GDCmdItem.Answer(io);
- break;
- case MainCmdItem.T_MAIN_CTRL_ITEM:
- this.first= new MainCtrlCmdItem(io);
- break;
- case MainCmdItem.T_DATA_ITEM:
- this.first= new DataCmdItem(io);
- break;
- case MainCmdItem.T_GRAPHICS_OP_ITEM:
- this.first= new GraOpCmdItem(io);
- break;
- case MainCmdItem.T_DBG_ITEM:
- this.first= new DbgCmdItem(io);
- break;
- default:
- io.disconnect(in);
- throw new ClassNotFoundException("Unknown cmdtype id: "+type);
+ try {
+ final int check= io.readCheck1();
+
+ MainCmdItem item;
+ { // first
+ final byte cmdType= in.readByte();
+ if (cmdType == MainCmdItem.T_NONE) {
+ this.first= null;
+ io.readCheck2(check);
+ return;
+ }
+ else {
+ this.first= item= readItem(cmdType, io);
+ }
+ }
+ while (true) {
+ final byte cmdType= in.readByte();
+ if (cmdType == MainCmdItem.T_NONE) {
+ io.readCheck2(check);
+ return;
+ }
+ else {
+ item= item.next= readItem(cmdType, io);
+ }
}
}
-
- MainCmdItem item= this.first;
- while (true) {
- final byte type= in.readByte();
- switch (type) {
- case MainCmdItem.T_NONE:
- io.readCheck2(check);
- io.disconnect(in);
- return;
- case MainCmdItem.T_CONSOLE_READ_ITEM:
- item= item.next= new ConsoleReadCmdItem(io);
- continue;
- case MainCmdItem.T_CONSOLE_WRITE_ITEM:
- item= item.next= new ConsoleWriteCmdItem(io);
- continue;
- case MainCmdItem.T_MESSAGE_ITEM:
- item= item.next= new ConsoleMessageCmdItem(io);
- continue;
- case MainCmdItem.T_EXT_CLIENT_ITEM:
- item= item.next= new ExtClientCmdItem(io);
- continue;
- case MainCmdItem.T_GRAPH_ITEM:
- item= item.next= new GDCmdItem.Answer(io);
- continue;
- case MainCmdItem.T_MAIN_CTRL_ITEM:
- this.first= new MainCtrlCmdItem(io);
- break;
- case MainCmdItem.T_DATA_ITEM:
- item= item.next= new DataCmdItem(io);
- continue;
- case MainCmdItem.T_GRAPHICS_OP_ITEM:
- item= item.next= new GraOpCmdItem(io);
- continue;
- case MainCmdItem.T_DBG_ITEM:
- item= item.next= new DbgCmdItem(io);
- continue;
- default:
- io.disconnect(in);
- throw new ClassNotFoundException("Unknown cmdtype id: "+type);
- }
+ finally {
+ io.disconnect(in);
+ }
+ }
+
+ private MainCmdItem readItem(final byte cmdType, final RJIO io) throws IOException, ClassNotFoundException {
+ switch (cmdType) {
+ case MainCmdItem.T_CONSOLE_READ_ITEM:
+ return new ConsoleReadCmdItem(io);
+ case MainCmdItem.T_CONSOLE_WRITE_ITEM:
+ return new ConsoleWriteCmdItem(io);
+ case MainCmdItem.T_MESSAGE_ITEM:
+ return new ConsoleMessageCmdItem(io);
+ case MainCmdItem.T_EXT_CLIENT_ITEM:
+ return new ExtClientCmdItem(io);
+ case MainCmdItem.T_GRAPH_ITEM:
+ return new GDCmdItem.Answer(io);
+ case MainCmdItem.T_MAIN_CTRL_ITEM:
+ return new MainCtrlCmdItem(io);
+ case MainCmdItem.T_DATA_ITEM:
+ return new DataCmdItem(io);
+ case MainCmdItem.T_GRAPHICS_OP_ITEM:
+ return new GraOpCmdItem(io);
+ case MainCmdItem.T_DBG_ITEM:
+ return new DbgCmdItem(io);
+ default:
+ throw new ClassNotFoundException("Unknown cmdtype id: " + cmdType);
}
}
@@ -173,7 +148,7 @@
return RjsComObject.T_MAIN_LIST;
}
- public MainCmdItem getItems() {
+ public @Nullable MainCmdItem getItems() {
return this.first;
}
diff --git a/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/MainCmdItem.java b/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/MainCmdItem.java
index f9a8c65..34dc8e0 100644
--- a/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/MainCmdItem.java
+++ b/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/MainCmdItem.java
@@ -28,28 +28,28 @@
/**
* {@link ConsoleReadCmdItem}
*/
- public static final byte T_CONSOLE_READ_ITEM= 0x01;
+ public static final byte T_CONSOLE_READ_ITEM= 0x01;
/**
* {@link ConsoleWriteCmdItem}
*/
- public static final byte T_CONSOLE_WRITE_ITEM= 0x02;
+ public static final byte T_CONSOLE_WRITE_ITEM= 0x02;
/**
* {@link ConsoleMessageCmdItem}
*/
- public static final byte T_MESSAGE_ITEM= 0x04;
+ public static final byte T_MESSAGE_ITEM= 0x04;
/**
* {@link ExtClientCmdItem}
*/
- public static final byte T_EXT_CLIENT_ITEM= 0x05;
+ public static final byte T_EXT_CLIENT_ITEM= 0x05;
/**
* {@link GDCmdItem}
*/
- public static final byte T_GRAPH_ITEM= 0x07;
+ public static final byte T_GRAPH_ITEM= 0x07;
/**
* T_id < => initiated by server
@@ -65,23 +65,23 @@
/**
* {@link DataCmdItem}
*/
- public static final byte T_DATA_ITEM= 0x11;
+ public static final byte T_DATA_ITEM= 0x11;
/**
* {@link GraOpCmdItem}
*/
- public static final byte T_GRAPHICS_OP_ITEM= 0x12;
+ public static final byte T_GRAPHICS_OP_ITEM= 0x12;
/**
* {@link DbgCmdItem}
*/
- public static final byte T_DBG_ITEM= 0x14;
+ public static final byte T_DBG_ITEM= 0x14;
/**
* Inside server only
*/
- public static final byte T_SRV_ITEM= 0x20;
+ public static final byte T_SRV_ITEM= 0x20;
protected static final int OM_STATUS= 0x00f00000; // 0xf << OS_STATUS
diff --git a/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/MainCmdS2CList.java b/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/MainCmdS2CList.java
index 30f68cb..12e6b5c 100644
--- a/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/MainCmdS2CList.java
+++ b/core/org.eclipse.statet.rj.server/src/org/eclipse/statet/rj/server/MainCmdS2CList.java
@@ -19,12 +19,16 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
import org.eclipse.statet.rj.data.RJIO;
/**
* Server-to-Client list with {@link MainCmdItem}s.
*/
+@NonNullByDefault
public final class MainCmdS2CList implements RjsComObject, Externalizable {
@@ -35,7 +39,7 @@
private boolean isBusy;
- private MainCmdItem first;
+ private @Nullable MainCmdItem first;
public MainCmdS2CList(final MainCmdItem first, final boolean isBusy) {
@@ -84,81 +88,57 @@
this.isBusy= in.readBoolean();
final RJIO io= RJIO.get(in);
- final int check= io.readCheck1();
-
- { // first
- final byte type= in.readByte();
- switch (type) {
- case MainCmdItem.T_NONE:
- this.first= null;
- io.readCheck2(check);
- io.disconnect(in);
- return;
- case MainCmdItem.T_CONSOLE_READ_ITEM:
- this.first= new ConsoleReadCmdItem(io);
- break;
- case MainCmdItem.T_CONSOLE_WRITE_ITEM:
- this.first= new ConsoleWriteCmdItem(io);
- break;
- case MainCmdItem.T_MESSAGE_ITEM:
- this.first= new ConsoleMessageCmdItem(io);
- break;
- case MainCmdItem.T_EXT_CLIENT_ITEM:
- this.first= new ExtClientCmdItem(io);
- break;
- case MainCmdItem.T_MAIN_CTRL_ITEM:
- this.first= new MainCtrlCmdItem(io);
- break;
- case MainCmdItem.T_DATA_ITEM:
- this.first= new DataCmdItem(io);
- break;
- case MainCmdItem.T_GRAPHICS_OP_ITEM:
- this.first= new GraOpCmdItem(io);
- break;
- case MainCmdItem.T_DBG_ITEM:
- this.first= new DbgCmdItem(io);
- break;
- default:
- throw new ClassNotFoundException("Unknown cmdtype id: "+type);
+ try {
+ final int check= io.readCheck1();
+
+ MainCmdItem item;
+ { // first
+ final byte cmdType= in.readByte();
+ if (cmdType == MainCmdItem.T_NONE) {
+ this.first= null;
+ io.readCheck2(check);
+ return;
+ }
+ else {
+ this.first= item= readItem(cmdType, io);
+ }
+ }
+ while (true) {
+ final byte cmdType= in.readByte();
+ if (cmdType == MainCmdItem.T_NONE) {
+ io.readCheck2(check);
+ return;
+ }
+ else {
+ item= item.next= readItem(cmdType, io);
+ }
}
}
-
- MainCmdItem item= this.first;
- while (true) {
- final byte type= in.readByte();
- switch (type) {
- case MainCmdItem.T_NONE:
- io.readCheck2(check);
- io.disconnect(in);
- return;
- case MainCmdItem.T_CONSOLE_READ_ITEM:
- item= item.next= new ConsoleReadCmdItem(io);
- continue;
- case MainCmdItem.T_CONSOLE_WRITE_ITEM:
- item= item.next= new ConsoleWriteCmdItem(io);
- continue;
- case MainCmdItem.T_MESSAGE_ITEM:
- item= item.next= new ConsoleMessageCmdItem(io);
- continue;
- case MainCmdItem.T_EXT_CLIENT_ITEM:
- item= item.next= new ExtClientCmdItem(io);
- continue;
- case MainCmdItem.T_MAIN_CTRL_ITEM:
- this.first= new MainCtrlCmdItem(io);
- break;
- case MainCmdItem.T_DATA_ITEM:
- item= item.next= new DataCmdItem(io);
- continue;
- case MainCmdItem.T_GRAPHICS_OP_ITEM:
- item= item.next= new GraOpCmdItem(io);
- continue;
- case MainCmdItem.T_DBG_ITEM:
- item= item.next= new DbgCmdItem(io);
- continue;
- default:
- io.disconnect(in);
- throw new ClassNotFoundException("Unknown cmdtype id: "+type);
- }
+ finally {
+ io.disconnect(in);
+ }
+ }
+
+ private MainCmdItem readItem(final byte cmdType, final RJIO io) throws IOException, ClassNotFoundException {
+ switch (cmdType) {
+ case MainCmdItem.T_CONSOLE_READ_ITEM:
+ return new ConsoleReadCmdItem(io);
+ case MainCmdItem.T_CONSOLE_WRITE_ITEM:
+ return new ConsoleWriteCmdItem(io);
+ case MainCmdItem.T_MESSAGE_ITEM:
+ return new ConsoleMessageCmdItem(io);
+ case MainCmdItem.T_EXT_CLIENT_ITEM:
+ return new ExtClientCmdItem(io);
+ case MainCmdItem.T_MAIN_CTRL_ITEM:
+ return new MainCtrlCmdItem(io);
+ case MainCmdItem.T_DATA_ITEM:
+ return new DataCmdItem(io);
+ case MainCmdItem.T_GRAPHICS_OP_ITEM:
+ return new GraOpCmdItem(io);
+ case MainCmdItem.T_DBG_ITEM:
+ return new DbgCmdItem(io);
+ default:
+ throw new ClassNotFoundException("Unknown cmdtype id: " + cmdType);
}
}
@@ -229,20 +209,22 @@
final StringBuilder sb= new StringBuilder(128);
sb.append("MainCmdS2CList (isBusy=");
sb.append(this.isBusy);
- sb.append(')');
- if (this.first != null) {
- sb.append(':');
+ sb.append("):");
+ if (this.first == null) {
+ sb.append("\n<ITEM />");
}
- MainCmdItem item= this.first;
- int i= 0;
- while (item != null) {
- sb.append("\n<ITEM i=\"");
- sb.append(i);
- sb.append("\">\n");
- sb.append(item.toString());
- sb.append("\n</ITEM>");
- item= item.next;
- i++;
+ else {
+ MainCmdItem item= this.first;
+ int i= 0;
+ while (item != null) {
+ sb.append("\n<ITEM i=\"");
+ sb.append(i);
+ sb.append("\">\n");
+ sb.append(item.toString());
+ sb.append("\n</ITEM>");
+ item= item.next;
+ i++;
+ }
}
return sb.toString();
}