// 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 if (eq(mainType, "Graphics2D")) alts.add(pair("BufferedImage", "graphics")); 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, "Pt")) { alts.add(pair("int \*argName*/_x, int \*argName*/_y", "pt(\*argName*/_x, \*argName*/_y)")); tok_expandMultiTypeArgument_v3(tok, i, iArgEnd, argName, mainType, alts); continue; } if (empty(alts)) fail("Unknown multi-type: " + joinSubList(tok, i, iArgEnd)); alts = mapPairB(alts, converter -> converter + "(" + argName + ")"); 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, " * O" + modifier + " ", func(LS tok, int nIdx) { eqOneOf(tok.get(nIdx+1), "Iterable", "Cl", "L") && eqGetOneOf(tok, nIdx+3, "or", "/") })) != 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); } }