// 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")); } 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[] while ((i = jfind(tok, "Iterable<> or [] ")) >= 0) { S mainType = joinSubList(tok, i, i+5); S altType = joinSubList(tok.get, i+10, i+15); S argName = tok.get(i+16); S converter = "asList"; S expr = converter + "(" + argName + ")"; tok_expandMultiTypeArgument(tok, i, i+18, argName, mainType, altType, expr); } }