// optional S bla; // => S bla() { ret getOpt(this, "bla"); } // void bla(S bla) { setOpt(this, "bla", bla); } svoid tok_optionalFields(LS tok) { for (int i : jfindAll_reverse(tok, "optional ")) { int iSemicolon = tok_endOfStatement(tok, i)-1; S var = tok.get(iSemicolon-2); S type = joinSubList(tok, i+2, iSemicolon-3); tokReplace_reTok(tok, i, iSemicolon+1, "public \*type*/ \*var*/() { ret (\*type*/ getOpt(this, \*quote(var)*/); }\n" + "public void var(\*type*/ var) { setOpt(this, \*quote(var)*/, \*var*/); }"); } }