static S migrateClassesInStructureText(S s, O... migrations) { L tok = javaTokForStructure(s); int n = l(tok); for (int i = 0; i < l(migrations); i += 2) { S from = cast migrations[i]; S fromPlusDollar = from + "$"; O to = migrations[i+1]; S replacement = to instanceof S ? (S) to : dropPrefix("main$", className((Class) to); for (int i = 1; i < n; i += 2) { S t = tok.get(i) if (eq(t, from)) tok.set(i, to); else if (startsWith(t, fromPlusDollar)) tok.set(i, to + t.substring(l(from))); } } ret join(tok); } sS migrateClassesInStructureText(S s, MapSO migrations) { ret migrateClassesInStructureText(s, mapToParams(migrations)); }