Index: modules/beans/src/main/java/java/beans/XMLEncoder.java =================================================================== --- modules/beans/src/main/java/java/beans/XMLEncoder.java (revision 417695) +++ modules/beans/src/main/java/java/beans/XMLEncoder.java (working copy) @@ -128,6 +128,7 @@ printBytes(0, mainTag.toStringOnClose()); } + // FIXME processing of default constructor: investigate private void printObjectTag(int tabCount, Object object, ObjectNode node) { Class nodeType = null; @@ -202,7 +203,7 @@ // preprocessing is done, print it! if (objectPrinted) { - // if object has been already printed then only print the + // if object has already been printed then only print the // reference printBytes(tabCount, tag.toStringShortForm()); } @@ -225,22 +226,21 @@ printed.add(node); if (isArray(nodeType)) { // if array - Iterator it = node.statements(); + Iterator it = node.statements(); while(it.hasNext()) { - Statement s = (Statement) it.next(); + Statement s = it.next(); printVoidTag(++tabCount, s); --tabCount; } } else { // if object - Iterator i1; - Iterator i2; + Iterator i1; + Iterator i2; for(int i = 0; i < arguments.length; ++i) { if(arguments[i] != null) { - ObjectNode succNode = (ObjectNode) nodes.get( - arguments[i]); + ObjectNode succNode = nodes.get(arguments[i]); printObjectTag(++tabCount, arguments[i], succNode); } else { @@ -252,7 +252,7 @@ i1 = node.expressions(); while(i1.hasNext()) { - Expression e = (Expression) i1.next(); + Expression e = i1.next(); printVoidTag(++tabCount, e); --tabCount; @@ -260,7 +260,7 @@ i2 = node.statements(); while(i2.hasNext()) { - Statement s = (Statement) i2.next(); + Statement s = i2.next(); printVoidTag(++tabCount, s); --tabCount; @@ -331,7 +331,8 @@ for(int i = tag.hasAttr("index") ? 1 : 0; i < args.length; ++i) { if(args[i] != null) { - ObjectNode node2 = (ObjectNode) nodes.get(args[i]); + ObjectNode node2 = nodes.get(args[i]); + printObjectTag(++tabCount, args[i], node2); } else { printNullTag(++tabCount); @@ -375,6 +376,7 @@ } else { tag.addAttr("method", stat.getMethodName()); } + printBytes(tabCount, tag.toStringOnOpen()); @@ -395,6 +397,7 @@ private void printNullTag(int tabCount) { printBytes(tabCount, ""); } + private void printBytes(int tabCount, String s) { try { Index: modules/beans/src/main/java/org/apache/harmony/beans/ObjectNode.java =================================================================== --- modules/beans/src/main/java/org/apache/harmony/beans/ObjectNode.java (revision 417695) +++ modules/beans/src/main/java/org/apache/harmony/beans/ObjectNode.java (working copy) @@ -36,12 +36,13 @@ private Expression initializer; private Object objectValue = null; - private HashMap nodes; + private HashMap nodes; + + private LinkedHashSet statements = + new LinkedHashSet(); + private Vector expressions = new Vector(); + private Vector referencedExpressions = new Vector(); - private LinkedHashSet statements = new LinkedHashSet(); - private Vector expressions = new Vector(); - private Vector referencedExpressions = new Vector(); - private int referencesNumber = 0; private String id = null; @@ -50,7 +51,9 @@ this.nodes = null; } - public ObjectNode(Expression initializer, HashMap nodes) { + public ObjectNode(Expression initializer, + HashMap nodes) + { this.initializer = initializer; this.nodes = nodes; } @@ -70,7 +73,8 @@ for(int i = 0; i < oldArgs.length; ++i) { if(oldArgs[i] != null) { - ObjectNode node = (ObjectNode) nodes.get(oldArgs[i]); + ObjectNode node = nodes.get(oldArgs[i]); + newArgs[i] = node.getObjectValue(); } else { newArgs[i] = null; @@ -88,6 +92,7 @@ public Class getObjectType() throws Exception { Object value = getObjectValue(); + return (value != null) ? value.getClass() : null; } @@ -124,20 +129,19 @@ expressions.add(expression); } - // FIXME should be replaced with HashSet public void addStatement(Statement statement) { statements.add(statement); } - public Iterator expressions() { + public Iterator expressions() { return expressions.iterator(); } - public Iterator referencedExpressions() { + public Iterator referencedExpressions() { return referencedExpressions.iterator(); } - public Iterator statements() { + public Iterator statements() { return statements.iterator(); } }