bundles/org.apache.jasper.glassfish/src/org/apache/jasper/tagplugins/jstl/ForEach.java
private void generateIterators(TagPluginContext ctxt) {

	// Object[]
	ctxt.generateDeclaration("ObjectArrayIterator", 
	    "private Iterator toIterator(final Object[] a){\n" +
	    "  return (new Iterator() {\n" +
	    "    int index=0;\n" +
	    "    public boolean hasNext() {\n" +
	    "      return index < a.length;}\n" +
	    "    public Object next() {\n" +
	    "      return a[index++];}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

	// boolean[]
	ctxt.generateDeclaration("booleanArrayIterator", 
	    "private Iterator toIterator(final boolean[] a){\n" +
	    "  return (new Iterator() {\n" +
	    "    int index=0;\n" +
	    "    public boolean hasNext() {\n" +
	    "      return index < a.length;}\n" +
	    "    public Object next() {\n" +
	    "      return new Boolean(a[index++]);}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

	// byte[]
	ctxt.generateDeclaration("byteArrayIterator", 
	    "private Iterator toIterator(final byte[] a){\n" +
	    "  return (new Iterator() {\n" +
	    "    int index=0;\n" +
	    "    public boolean hasNext() {\n" +
	    "      return index < a.length;}\n" +
	    "    public Object next() {\n" +
	    "      return new Byte(a[index++]);}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

	// char[]
	ctxt.generateDeclaration("charArrayIterator", 
	    "private Iterator toIterator(final char[] a){\n" +
	    "  return (new Iterator() {\n" +
	    "    int index=0;\n" +
	    "    public boolean hasNext() {\n" +
	    "      return index < a.length;}\n" +
	    "    public Object next() {\n" +
	    "      return new Character(a[index++]);}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

	// short[]
	ctxt.generateDeclaration("shortArrayIterator", 
	    "private Iterator toIterator(final short[] a){\n" +
	    "  return (new Iterator() {\n" +
	    "    int index=0;\n" +
	    "    public boolean hasNext() {\n" +
	    "      return index < a.length;}\n" +
	    "    public Object next() {\n" +
	    "      return new Short(a[index++]);}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

	// int[]
	ctxt.generateDeclaration("intArrayIterator", 
	    "private Iterator toIterator(final int[] a){\n" +
	    "  return (new Iterator() {\n" +
	    "    int index=0;\n" +
	    "    public boolean hasNext() {\n" +
	    "      return index < a.length;}\n" +
	    "    public Object next() {\n" +
	    "      return new Integer(a[index++]);}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

	// long[]
	ctxt.generateDeclaration("longArrayIterator", 
	    "private Iterator toIterator(final long[] a){\n" +
	    "  return (new Iterator() {\n" +
	    "    int index=0;\n" +
	    "    public boolean hasNext() {\n" +
	    "      return index < a.length;}\n" +
	    "    public Object next() {\n" +
	    "      return new Long(a[index++]);}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

	// float[]
	ctxt.generateDeclaration("floatArrayIterator",
	    "private Iterator toIterator(final float[] a){\n" +
	    "  return (new Iterator() {\n" +
	    "    int index=0;\n" +
	    "    public boolean hasNext() {\n" +
	    "      return index < a.length;}\n" +
	    "    public Object next() {\n" +
	    "      return new Float(a[index++]);}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

	// double[]
	ctxt.generateDeclaration("doubleArrayIterator",
	    "private Iterator toIterator(final double[] a){\n" +
	    "  return (new Iterator() {\n" +
	    "    int index=0;\n" +
	    "    public boolean hasNext() {\n" +
	    "      return index < a.length;}\n" +
	    "    public Object next() {\n" +
	    "      return new Double(a[index++]);}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

	// Enumeration
	ctxt.generateDeclaration("enumIterator",
	    "private Iterator toIterator(final Enumeration e){\n" +
	    "  return (new Iterator() {\n" +
	    "    public boolean hasNext() {\n" +
	    "      return e.hasMoreElements();}\n" +
	    "    public Object next() {\n" +
	    "      return e.nextElement();}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

    }
private void generateIterators(TagPluginContext ctxt) {

	// Object[]
	ctxt.generateDeclaration("ObjectArrayIterator", 
	    "private Iterator toIterator(final Object[] a){\n" +
	    "  return (new Iterator() {\n" +
	    "    int index=0;\n" +
	    "    public boolean hasNext() {\n" +
	    "      return index < a.length;}\n" +
	    "    public Object next() {\n" +
	    "      return a[index++];}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

	// boolean[]
	ctxt.generateDeclaration("booleanArrayIterator", 
	    "private Iterator toIterator(final boolean[] a){\n" +
	    "  return (new Iterator() {\n" +
	    "    int index=0;\n" +
	    "    public boolean hasNext() {\n" +
	    "      return index < a.length;}\n" +
	    "    public Object next() {\n" +
	    "      return new Boolean(a[index++]);}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

	// byte[]
	ctxt.generateDeclaration("byteArrayIterator", 
	    "private Iterator toIterator(final byte[] a){\n" +
	    "  return (new Iterator() {\n" +
	    "    int index=0;\n" +
	    "    public boolean hasNext() {\n" +
	    "      return index < a.length;}\n" +
	    "    public Object next() {\n" +
	    "      return new Byte(a[index++]);}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

	// char[]
	ctxt.generateDeclaration("charArrayIterator", 
	    "private Iterator toIterator(final char[] a){\n" +
	    "  return (new Iterator() {\n" +
	    "    int index=0;\n" +
	    "    public boolean hasNext() {\n" +
	    "      return index < a.length;}\n" +
	    "    public Object next() {\n" +
	    "      return new Character(a[index++]);}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

	// short[]
	ctxt.generateDeclaration("shortArrayIterator", 
	    "private Iterator toIterator(final short[] a){\n" +
	    "  return (new Iterator() {\n" +
	    "    int index=0;\n" +
	    "    public boolean hasNext() {\n" +
	    "      return index < a.length;}\n" +
	    "    public Object next() {\n" +
	    "      return new Short(a[index++]);}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

	// int[]
	ctxt.generateDeclaration("intArrayIterator", 
	    "private Iterator toIterator(final int[] a){\n" +
	    "  return (new Iterator() {\n" +
	    "    int index=0;\n" +
	    "    public boolean hasNext() {\n" +
	    "      return index < a.length;}\n" +
	    "    public Object next() {\n" +
	    "      return new Integer(a[index++]);}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

	// long[]
	ctxt.generateDeclaration("longArrayIterator", 
	    "private Iterator toIterator(final long[] a){\n" +
	    "  return (new Iterator() {\n" +
	    "    int index=0;\n" +
	    "    public boolean hasNext() {\n" +
	    "      return index < a.length;}\n" +
	    "    public Object next() {\n" +
	    "      return new Long(a[index++]);}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

	// float[]
	ctxt.generateDeclaration("floatArrayIterator",
	    "private Iterator toIterator(final float[] a){\n" +
	    "  return (new Iterator() {\n" +
	    "    int index=0;\n" +
	    "    public boolean hasNext() {\n" +
	    "      return index < a.length;}\n" +
	    "    public Object next() {\n" +
	    "      return new Float(a[index++]);}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

	// double[]
	ctxt.generateDeclaration("doubleArrayIterator",
	    "private Iterator toIterator(final double[] a){\n" +
	    "  return (new Iterator() {\n" +
	    "    int index=0;\n" +
	    "    public boolean hasNext() {\n" +
	    "      return index < a.length;}\n" +
	    "    public Object next() {\n" +
	    "      return new Double(a[index++]);}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

	// Enumeration
	ctxt.generateDeclaration("enumIterator",
	    "private Iterator toIterator(final Enumeration e){\n" +
	    "  return (new Iterator() {\n" +
	    "    public boolean hasNext() {\n" +
	    "      return e.hasMoreElements();}\n" +
	    "    public Object next() {\n" +
	    "      return e.nextElement();}\n" +
	    "    public void remove() {}\n" +
	    "  });\n" +
	    "}"
	);

    }
private void generateIterators ( TagPluginContext ctxt ) { // Object[] ctxt . generateDeclaration ( "ObjectArrayIterator" , "private Iterator toIterator(final Object[] a){\n" + "  return (new Iterator() {\n" + "    int index=0;\n" + "    public boolean hasNext() {\n" + "      return index < a.length;}\n" + "    public Object next() {\n" + "      return a[index++];}\n" + "    public void remove() {}\n" + "  });\n" + "}" ) ; // boolean[] ctxt . generateDeclaration ( "booleanArrayIterator" , "private Iterator toIterator(final boolean[] a){\n" + "  return (new Iterator() {\n" + "    int index=0;\n" + "    public boolean hasNext() {\n" + "      return index < a.length;}\n" + "    public Object next() {\n" + "      return new Boolean(a[index++]);}\n" + "    public void remove() {}\n" + "  });\n" + "}" ) ; // byte[] ctxt . generateDeclaration ( "byteArrayIterator" , "private Iterator toIterator(final byte[] a){\n" + "  return (new Iterator() {\n" + "    int index=0;\n" + "    public boolean hasNext() {\n" + "      return index < a.length;}\n" + "    public Object next() {\n" + "      return new Byte(a[index++]);}\n" + "    public void remove() {}\n" + "  });\n" + "}" ) ; // char[] ctxt . generateDeclaration ( "charArrayIterator" , "private Iterator toIterator(final char[] a){\n" + "  return (new Iterator() {\n" + "    int index=0;\n" + "    public boolean hasNext() {\n" + "      return index < a.length;}\n" + "    public Object next() {\n" + "      return new Character(a[index++]);}\n" + "    public void remove() {}\n" + "  });\n" + "}" ) ; // short[] ctxt . generateDeclaration ( "shortArrayIterator" , "private Iterator toIterator(final short[] a){\n" + "  return (new Iterator() {\n" + "    int index=0;\n" + "    public boolean hasNext() {\n" + "      return index < a.length;}\n" + "    public Object next() {\n" + "      return new Short(a[index++]);}\n" + "    public void remove() {}\n" + "  });\n" + "}" ) ; // int[] ctxt . generateDeclaration ( "intArrayIterator" , "private Iterator toIterator(final int[] a){\n" + "  return (new Iterator() {\n" + "    int index=0;\n" + "    public boolean hasNext() {\n" + "      return index < a.length;}\n" + "    public Object next() {\n" + "      return new Integer(a[index++]);}\n" + "    public void remove() {}\n" + "  });\n" + "}" ) ; // long[] ctxt . generateDeclaration ( "longArrayIterator" , "private Iterator toIterator(final long[] a){\n" + "  return (new Iterator() {\n" + "    int index=0;\n" + "    public boolean hasNext() {\n" + "      return index < a.length;}\n" + "    public Object next() {\n" + "      return new Long(a[index++]);}\n" + "    public void remove() {}\n" + "  });\n" + "}" ) ; // float[] ctxt . generateDeclaration ( "floatArrayIterator" , "private Iterator toIterator(final float[] a){\n" + "  return (new Iterator() {\n" + "    int index=0;\n" + "    public boolean hasNext() {\n" + "      return index < a.length;}\n" + "    public Object next() {\n" + "      return new Float(a[index++]);}\n" + "    public void remove() {}\n" + "  });\n" + "}" ) ; // double[] ctxt . generateDeclaration ( "doubleArrayIterator" , "private Iterator toIterator(final double[] a){\n" + "  return (new Iterator() {\n" + "    int index=0;\n" + "    public boolean hasNext() {\n" + "      return index < a.length;}\n" + "    public Object next() {\n" + "      return new Double(a[index++]);}\n" + "    public void remove() {}\n" + "  });\n" + "}" ) ; // Enumeration ctxt . generateDeclaration ( "enumIterator" , "private Iterator toIterator(final Enumeration e){\n" + "  return (new Iterator() {\n" + "    public boolean hasNext() {\n" + "      return e.hasMoreElements();}\n" + "    public Object next() {\n" + "      return e.nextElement();}\n" + "    public void remove() {}\n" + "  });\n" + "}" ) ; }
Generate iterators for data types supported in items
Generate iterators for data types supported in items