println("    empty" + className + ".init(" + emptyHashCode + ", null, null, null);");
println("    empty" + className + ".init(" + emptyHashCode + ", empty" + className + ", null, null);");
	private void genFactoryInitialization(ADT api) {		Iterator types = api.typeIterator();		while (types.hasNext()) {			Type type = (Type) types.next();			int listTypesCount = 0;			println("    " + TypeGenerator.className(type) + ".initialize(this);");			if (type instanceof ListType) {				String emptyHashCode = new Integer(42 * (2 + listTypesCount)).toString();				String className = ListTypeGenerator.className(type);				println("    proto" + className + " = new " + className + "();");				println("    proto" + className + ".init(" + emptyHashCode + ", null, null, null);");				println("    empty" + className + " = (" + className + ") build(proto" + className + ");");				println("    empty" + className + ".init(" + emptyHashCode + ", null, null, null);");				listTypesCount++;			} else {				Iterator alts = type.alternativeIterator();				while (alts.hasNext()) {					Alternative alt = (Alternative) alts.next();					String altClassName = AlternativeGenerator.className(type, alt);					String protoVar = "proto" + altClassName;					String funVar = "fun" + altClassName;					String afunName = type.getId() + "_" + alt.getId();					println();					println("    " + altClassName + ".initializePattern();");					println(						"    "							+ funVar							+ " = makeAFun(\""							+ "_"							+ afunName							+ "\", "							+ type.getAltArity(alt)							+ ", false);");					println("    " + protoVar + " = new " + altClassName + "();");				}			}			println();		}		Iterator bottoms = api.bottomTypeIterator();		while (bottoms.hasNext()) {			String type = (String) bottoms.next();			if (!converter.isReserved(type)) {				println("    " + StringConversions.makeCapitalizedIdentifier(type) + ".initialize(this);");			}		}	}