// example: // sS loadTextFile(File/S file) { ... } svoid tok_multiTypeArguments_v2(LS tok) { int i; // File/S while ((i = jfind(tok, "File/ ", (_tok, nIdx) -> eqGetOneOf(_tok, nIdx+5, "S", "String"))) >= 0) { S argName = tok.get(i+6); S mainType = tok.get(i), altType = tok.get(i+4); S converter = "newFile"; S expr = converter + "(" + argName + ")"; tok_expandMultiTypeArgument(tok, i, i+8, argName, mainType, altType, expr); } // Graphics2D etc, IIntegralImage etc, ... while ((i = jfind(tok, " etc ")) >= 0) { S mainType = tok.get(i); S argName = tok.get(i+4); int iArgEnd = i+6; new LPairS alts; // altType, converter bool v3; if (eq(mainType, "Graphics2D")) alts.add(pair("BufferedImage", "graphics")); else if (eq(mainType, "File")) alts.add(pair("String", "toFile")); else if (eq(mainType, "BWImage")) alts.add(pair("BufferedImage", "toBWImage")); else if (eq(mainType, "IIntegralImage")) { alts.add(pair("BufferedImage", "IntegralImage")); alts.add(pair("MakesBufferedImage", "IntegralImage")); } else if (eq(mainType, "BufferedImage")) alts.add(pair("MakesBufferedImage", "toBufferedImage")); else if (eq(mainType, "Runnable")) alts.add(pair("IF0", "if0ToRunnable")); else if (eq(mainType, "Component")) alts.add(pair("Swingable", "toComponent")); else if (eq(mainType, "JComponent")) alts.add(pair("Swingable", "toJComponent")); else if (eq(mainType, "WidthAndHeight")) { alts.add(pair("Dimension", "toWidthAndHeight")); alts.add(pair("int \*argName*/_w, int \*argName*/_h", "widthAndHeight(\*argName*/_w, \*argName*/_h)")); set v3; } else if (eq(mainType, "Pt")) { alts.add(pair("int \*argName*/_x, int \*argName*/_y", "pt(\*argName*/_x, \*argName*/_y)")); set v3; } else if (eqOneOf(mainType, "DoublePt", "IDoublePt")) { alts.add(pair("double \*argName*/_x, double \*argName*/_y", "doublePt(\*argName*/_x, \*argName*/_y)")); set v3; } if (empty(alts)) fail("Unknown multi-type: " + joinSubList(tok, i, iArgEnd)); if (v3) tok_expandMultiTypeArgument_v3(tok, i, iArgEnd, argName, mainType, alts); else tok_expandMultiTypeArgument_v2(tok, i, iArgEnd, argName, mainType, alts); } // Iterable or X[], Iterable<> or X... IntRange r; for (S modifier : ll("[]", "...")) while ((r = jfind_range(tok, "Iterable<> or " + modifier + " ")) != null) { i = r.start+1; S mainType = joinSubList(tok, i, i+7); S altType = joinSubList(tok, i+10, r.end-3); S argName = tok.get(r.end-2); S converter = "asList"; S expr = converter + "(" + argName + ")"; tok_expandMultiTypeArgument(tok, i, r.end, argName, mainType, altType, expr); } // Iterable or O[], Iterable or X..., Cl/O[], etc for (S modifier : ll("[]", "...")) while ((r = jfind_range(tok, " * *" + modifier + " ", func(LS tok, int nIdx) { eqOneOf(tok.get(nIdx+1), "Iterable", "Collection", "Cl", "List", "L") && eqGetOneOf(tok, nIdx+3, "or", "/") && eqGetOneOf(tok, nIdx+5, "O", "Object") })) != null) { i = r.start+1; S mainType = tok.get(i); S altType = joinSubList(tok, i+4, r.end-3); S argName = tok.get(r.end-2); S converter = "asList"; S expr = converter + "(" + argName + ")"; tok_expandMultiTypeArgument(tok, i, r.end, argName, mainType, altType, expr); } }