package org.enumerable.lambda.enumerable.primitives; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Reader; import java.io.StringWriter; public class PrimitiveEnumerableGenerator { private static final String DIR = "src/main/java/lambda/enumerable/primitives/"; private static final String SOURCE = "EnumerableDoubles.java"; public static void main(String[] args) throws Exception { String source = readSourceForDouble(); generateSource(source, "int", "Ints", "Integer", "I"); generateSource(source, "long", "Longs", "Long", "L"); } static String readSourceForDouble() throws FileNotFoundException, IOException { Reader in = new BufferedReader(new FileReader(DIR + SOURCE)); try { StringWriter out = new StringWriter(); int c = -1; while ((c = in.read()) != -1) out.write(c); return out.toString(); } finally { in.close(); } } static void generateSource(String s, String primitiveType, String name, String boxedType, String letterForType) throws Exception { s = s.replaceAll("double", primitiveType); s = s.replaceAll("Doubles", name); s = s.replaceAll("Double", boxedType); s = s.replaceAll("/\\* don't change \\*/" + primitiveType, "/\\* don't change \\*/double"); s = s.replaceAll("/\\* don't change \\*/" + boxedType, "/\\* don't change \\*/Double"); s = s.replaceAll("Fn1D", "Fn1" + letterForType); s = s.replaceAll("Fn2DDtoO", "Fn2" + letterForType + letterForType + "toO"); s = s.replaceAll("Fn2DDtoD", "Fn2" + letterForType + letterForType + "to" + letterForType); s = s .replace(" */\npublic class", " * <i>This file was generated by\n * " + PrimitiveEnumerableGenerator.class.getName() + " from\n * " + SOURCE + ".</i>\n */\npublic class"); s = s.replaceAll(" *//.*\n", ""); s = s.replaceAll("(\\w*?\n){2,}", "\n\n"); FileWriter writer = new FileWriter(DIR + "Enumerable" + name + ".java"); try { writer.write(s.toString()); } finally { writer.close(); } System.out.println(s); } }