def conversionN()

in bijection-clojure/codegen/GeneratorWorkaroundJava.scala [7:38]


def conversionN(n: Int) = {
  val intypes = (1 to n).map(i => "I" + i.toString).toList
  val invalues = intypes.map(_.toLowerCase)
  val intv = intypes.zip(invalues).map{ case (t, v) => s"$t $v"}
  val inobjv = invalues.map(v => s"Object $v")
  val casts = intypes.zip(invalues).map{ case (t, v) => s"($t)$v"}
  def render(args: List[String]) = args.mkString(", ")
  
s"""
  public static final <O, ${render(intypes)}> Bijection<Function$n<${render(intypes)}, O>, IFn> function${n}ToIFn() {
    return new AbstractBijection<Function$n<${render(intypes)}, O>, IFn>() {
      public final AFn apply(Function${n}<${render(intypes)}, O> fna) {
        final Function${n}<${render(intypes)}, O> fn = fna;
        return new AFn() {
          public final Object invoke(${render(inobjv)}) {
            return (Object)fn.apply(${render(casts)});
          }
        };
      }

      public final Function${n}<${render(intypes)}, O> invert(IFn fna) {
        final IFn fn = fna;
        return new Function${n}<${render(intypes)}, O>(){
          public final O apply(${render(intv)}) {
            return (O)fn.invoke(${render(invalues)});
          }
        };
      }
    };
  }
"""
}