FunctionN and ExtensionFunctionN are now abstract classes, not traits
+ Indexing of their type parameters is fixed (should match actual positions in the parameter list) The reason to make them classes: * This is how they are actually implemented in the JVM back-end (for performance) This can be reconsidered later, but seems to be a reasonable solution
This commit is contained in:
@@ -52,7 +52,7 @@ public class TuplesAndFunctionsGenerator {
|
||||
private static void generateFunctions(PrintStream out, int count, boolean extension) {
|
||||
generated(out);
|
||||
for (int i = 0; i < count; i++) {
|
||||
out.print("public trait " + (extension ? "ExtensionFunction" : "Function") + i);
|
||||
out.print("public abstract class " + (extension ? "ExtensionFunction" : "Function") + i);
|
||||
out.print("<");
|
||||
if (extension) {
|
||||
out.print("in T");
|
||||
@@ -65,7 +65,7 @@ public class TuplesAndFunctionsGenerator {
|
||||
out.print(", ");
|
||||
}
|
||||
out.print("out R> {\n");
|
||||
out.print(" public fun " + (extension ? "T." : "") +
|
||||
out.print(" public abstract fun " + (extension ? "T." : "") +
|
||||
"invoke(");
|
||||
for (int j = 1; j <= i; j++) {
|
||||
out.print("p" + j + ": " + "P" + j);
|
||||
|
||||
@@ -3,72 +3,72 @@
|
||||
|
||||
package jet
|
||||
|
||||
public trait ExtensionFunction0<in T, out R> {
|
||||
public fun T.invoke() : R
|
||||
public abstract class ExtensionFunction0<in T, out R> {
|
||||
public abstract fun T.invoke() : R
|
||||
}
|
||||
public trait ExtensionFunction1<in T, in P1, out R> {
|
||||
public fun T.invoke(p1: P1) : R
|
||||
public abstract class ExtensionFunction1<in T, in P1, out R> {
|
||||
public abstract fun T.invoke(p1: P1) : R
|
||||
}
|
||||
public trait ExtensionFunction2<in T, in P1, in P2, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2) : R
|
||||
public abstract class ExtensionFunction2<in T, in P1, in P2, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2) : R
|
||||
}
|
||||
public trait ExtensionFunction3<in T, in P1, in P2, in P3, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3) : R
|
||||
public abstract class ExtensionFunction3<in T, in P1, in P2, in P3, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3) : R
|
||||
}
|
||||
public trait ExtensionFunction4<in T, in P1, in P2, in P3, in P4, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4) : R
|
||||
public abstract class ExtensionFunction4<in T, in P1, in P2, in P3, in P4, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4) : R
|
||||
}
|
||||
public trait ExtensionFunction5<in T, in P1, in P2, in P3, in P4, in P5, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5) : R
|
||||
public abstract class ExtensionFunction5<in T, in P1, in P2, in P3, in P4, in P5, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5) : R
|
||||
}
|
||||
public trait ExtensionFunction6<in T, in P1, in P2, in P3, in P4, in P5, in P6, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6) : R
|
||||
public abstract class ExtensionFunction6<in T, in P1, in P2, in P3, in P4, in P5, in P6, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6) : R
|
||||
}
|
||||
public trait ExtensionFunction7<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7) : R
|
||||
public abstract class ExtensionFunction7<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7) : R
|
||||
}
|
||||
public trait ExtensionFunction8<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8) : R
|
||||
public abstract class ExtensionFunction8<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8) : R
|
||||
}
|
||||
public trait ExtensionFunction9<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9) : R
|
||||
public abstract class ExtensionFunction9<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9) : R
|
||||
}
|
||||
public trait ExtensionFunction10<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10) : R
|
||||
public abstract class ExtensionFunction10<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10) : R
|
||||
}
|
||||
public trait ExtensionFunction11<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11) : R
|
||||
public abstract class ExtensionFunction11<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11) : R
|
||||
}
|
||||
public trait ExtensionFunction12<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12) : R
|
||||
public abstract class ExtensionFunction12<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12) : R
|
||||
}
|
||||
public trait ExtensionFunction13<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13) : R
|
||||
public abstract class ExtensionFunction13<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13) : R
|
||||
}
|
||||
public trait ExtensionFunction14<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14) : R
|
||||
public abstract class ExtensionFunction14<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14) : R
|
||||
}
|
||||
public trait ExtensionFunction15<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15) : R
|
||||
public abstract class ExtensionFunction15<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15) : R
|
||||
}
|
||||
public trait ExtensionFunction16<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16) : R
|
||||
public abstract class ExtensionFunction16<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16) : R
|
||||
}
|
||||
public trait ExtensionFunction17<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17) : R
|
||||
public abstract class ExtensionFunction17<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17) : R
|
||||
}
|
||||
public trait ExtensionFunction18<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18) : R
|
||||
public abstract class ExtensionFunction18<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18) : R
|
||||
}
|
||||
public trait ExtensionFunction19<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, in P19, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18, p19: P19) : R
|
||||
public abstract class ExtensionFunction19<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, in P19, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18, p19: P19) : R
|
||||
}
|
||||
public trait ExtensionFunction20<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, in P19, in P20, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18, p19: P19, p20: P20) : R
|
||||
public abstract class ExtensionFunction20<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, in P19, in P20, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18, p19: P19, p20: P20) : R
|
||||
}
|
||||
public trait ExtensionFunction21<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, in P19, in P20, in P21, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18, p19: P19, p20: P20, p21: P21) : R
|
||||
public abstract class ExtensionFunction21<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, in P19, in P20, in P21, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18, p19: P19, p20: P20, p21: P21) : R
|
||||
}
|
||||
public trait ExtensionFunction22<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, in P19, in P20, in P21, in P22, out R> {
|
||||
public fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18, p19: P19, p20: P20, p21: P21, p22: P22) : R
|
||||
public abstract class ExtensionFunction22<in T, in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, in P19, in P20, in P21, in P22, out R> {
|
||||
public abstract fun T.invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18, p19: P19, p20: P20, p21: P21, p22: P22) : R
|
||||
}
|
||||
|
||||
@@ -3,72 +3,72 @@
|
||||
|
||||
package jet
|
||||
|
||||
public trait Function0<out R> {
|
||||
public fun invoke() : R
|
||||
public abstract class Function0<out R> {
|
||||
public abstract fun invoke() : R
|
||||
}
|
||||
public trait Function1<in P1, out R> {
|
||||
public fun invoke(p1: P1) : R
|
||||
public abstract class Function1<in P1, out R> {
|
||||
public abstract fun invoke(p1: P1) : R
|
||||
}
|
||||
public trait Function2<in P1, in P2, out R> {
|
||||
public fun invoke(p1: P1, p2: P2) : R
|
||||
public abstract class Function2<in P1, in P2, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2) : R
|
||||
}
|
||||
public trait Function3<in P1, in P2, in P3, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3) : R
|
||||
public abstract class Function3<in P1, in P2, in P3, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3) : R
|
||||
}
|
||||
public trait Function4<in P1, in P2, in P3, in P4, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3, p4: P4) : R
|
||||
public abstract class Function4<in P1, in P2, in P3, in P4, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3, p4: P4) : R
|
||||
}
|
||||
public trait Function5<in P1, in P2, in P3, in P4, in P5, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5) : R
|
||||
public abstract class Function5<in P1, in P2, in P3, in P4, in P5, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5) : R
|
||||
}
|
||||
public trait Function6<in P1, in P2, in P3, in P4, in P5, in P6, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6) : R
|
||||
public abstract class Function6<in P1, in P2, in P3, in P4, in P5, in P6, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6) : R
|
||||
}
|
||||
public trait Function7<in P1, in P2, in P3, in P4, in P5, in P6, in P7, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7) : R
|
||||
public abstract class Function7<in P1, in P2, in P3, in P4, in P5, in P6, in P7, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7) : R
|
||||
}
|
||||
public trait Function8<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8) : R
|
||||
public abstract class Function8<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8) : R
|
||||
}
|
||||
public trait Function9<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9) : R
|
||||
public abstract class Function9<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9) : R
|
||||
}
|
||||
public trait Function10<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10) : R
|
||||
public abstract class Function10<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10) : R
|
||||
}
|
||||
public trait Function11<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11) : R
|
||||
public abstract class Function11<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11) : R
|
||||
}
|
||||
public trait Function12<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12) : R
|
||||
public abstract class Function12<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12) : R
|
||||
}
|
||||
public trait Function13<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13) : R
|
||||
public abstract class Function13<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13) : R
|
||||
}
|
||||
public trait Function14<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14) : R
|
||||
public abstract class Function14<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14) : R
|
||||
}
|
||||
public trait Function15<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15) : R
|
||||
public abstract class Function15<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15) : R
|
||||
}
|
||||
public trait Function16<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16) : R
|
||||
public abstract class Function16<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16) : R
|
||||
}
|
||||
public trait Function17<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17) : R
|
||||
public abstract class Function17<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17) : R
|
||||
}
|
||||
public trait Function18<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18) : R
|
||||
public abstract class Function18<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18) : R
|
||||
}
|
||||
public trait Function19<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, in P19, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18, p19: P19) : R
|
||||
public abstract class Function19<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, in P19, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18, p19: P19) : R
|
||||
}
|
||||
public trait Function20<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, in P19, in P20, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18, p19: P19, p20: P20) : R
|
||||
public abstract class Function20<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, in P19, in P20, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18, p19: P19, p20: P20) : R
|
||||
}
|
||||
public trait Function21<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, in P19, in P20, in P21, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18, p19: P19, p20: P20, p21: P21) : R
|
||||
public abstract class Function21<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, in P19, in P20, in P21, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18, p19: P19, p20: P20, p21: P21) : R
|
||||
}
|
||||
public trait Function22<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, in P19, in P20, in P21, in P22, out R> {
|
||||
public fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18, p19: P19, p20: P20, p21: P21, p22: P22) : R
|
||||
public abstract class Function22<in P1, in P2, in P3, in P4, in P5, in P6, in P7, in P8, in P9, in P10, in P11, in P12, in P13, in P14, in P15, in P16, in P17, in P18, in P19, in P20, in P21, in P22, out R> {
|
||||
public abstract fun invoke(p1: P1, p2: P2, p3: P3, p4: P4, p5: P5, p6: P6, p7: P7, p8: P8, p9: P9, p10: P10, p11: P11, p12: P12, p13: P13, p14: P14, p15: P15, p16: P16, p17: P17, p18: P18, p19: P19, p20: P20, p21: P21, p22: P22) : R
|
||||
}
|
||||
|
||||
+3
-2
@@ -91,8 +91,9 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
||||
this.expectedThisObject = expectedThisObject;
|
||||
|
||||
for (int i = 0; i < typeParameters.size(); ++i) {
|
||||
if (typeParameters.get(i).getIndex() != i) {
|
||||
throw new IllegalStateException();
|
||||
TypeParameterDescriptor typeParameterDescriptor = typeParameters.get(i);
|
||||
if (typeParameterDescriptor.getIndex() != i) {
|
||||
throw new IllegalStateException(typeParameterDescriptor + " index is " + typeParameterDescriptor.getIndex() + " but position is " + i);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -208,37 +208,48 @@ public class JetStandardClasses {
|
||||
ClassDescriptorImpl function = new ClassDescriptorImpl(
|
||||
STANDARD_CLASSES_NAMESPACE,
|
||||
Collections.<AnnotationDescriptor>emptyList(),
|
||||
Modality.OPEN,
|
||||
Modality.ABSTRACT,
|
||||
Name.identifier("Function" + i));
|
||||
|
||||
SimpleFunctionDescriptorImpl invoke = new SimpleFunctionDescriptorImpl(function, Collections.<AnnotationDescriptor>emptyList(), Name.identifier("invoke"), CallableMemberDescriptor.Kind.DECLARATION);
|
||||
WritableScope scopeForInvoke = createScopeForInvokeFunction(function, invoke);
|
||||
List<TypeParameterDescriptor> typeParameters = createTypeParameters(i, function);
|
||||
List<TypeParameterDescriptor> typeParameters = createTypeParameters(0, i, function);
|
||||
ConstructorDescriptorImpl constructorDescriptorForFunction = new ConstructorDescriptorImpl(function, Collections.<AnnotationDescriptor>emptyList(), true);
|
||||
FUNCTION[i] = function.initialize(
|
||||
false,
|
||||
typeParameters,
|
||||
Collections.singleton(getAnyType()), scopeForInvoke, Collections.<ConstructorDescriptor>emptySet(), null);
|
||||
Collections.singleton(getAnyType()), scopeForInvoke, Collections.<ConstructorDescriptor>singleton(constructorDescriptorForFunction), null);
|
||||
FUNCTION_TYPE_CONSTRUCTORS.add(FUNCTION[i].getTypeConstructor());
|
||||
FunctionDescriptorUtil.initializeFromFunctionType(invoke, function.getDefaultType(), new ClassReceiver(FUNCTION[i]), Modality.ABSTRACT, Visibilities.PUBLIC);
|
||||
|
||||
constructorDescriptorForFunction.initialize(function.getTypeConstructor().getParameters(),
|
||||
Collections.<ValueParameterDescriptor>emptyList(), Visibilities.PUBLIC);
|
||||
constructorDescriptorForFunction.setReturnType(function.getDefaultType());
|
||||
|
||||
ClassDescriptorImpl receiverFunction = new ClassDescriptorImpl(
|
||||
STANDARD_CLASSES_NAMESPACE,
|
||||
Collections.<AnnotationDescriptor>emptyList(),
|
||||
Modality.OPEN,
|
||||
Modality.ABSTRACT,
|
||||
Name.identifier("ExtensionFunction" + i));
|
||||
SimpleFunctionDescriptorImpl invokeWithReceiver = new SimpleFunctionDescriptorImpl(receiverFunction, Collections.<AnnotationDescriptor>emptyList(), Name.identifier("invoke"), CallableMemberDescriptor.Kind.DECLARATION);
|
||||
WritableScope scopeForInvokeWithReceiver = createScopeForInvokeFunction(receiverFunction, invokeWithReceiver);
|
||||
List<TypeParameterDescriptor> parameters = createTypeParameters(i, receiverFunction);
|
||||
List<TypeParameterDescriptor> parameters = createTypeParameters(1, i, receiverFunction);
|
||||
parameters.add(0, TypeParameterDescriptorImpl.createWithDefaultBound(
|
||||
receiverFunction,
|
||||
Collections.<AnnotationDescriptor>emptyList(),
|
||||
false, Variance.IN_VARIANCE, Name.identifier("T"), 0));
|
||||
|
||||
ConstructorDescriptorImpl constructorDescriptorForReceiverFunction = new ConstructorDescriptorImpl(function, Collections.<AnnotationDescriptor>emptyList(), true);
|
||||
RECEIVER_FUNCTION[i] = receiverFunction.initialize(
|
||||
false,
|
||||
parameters,
|
||||
Collections.singleton(getAnyType()), scopeForInvokeWithReceiver, Collections.<ConstructorDescriptor>emptySet(), null);
|
||||
Collections.singleton(getAnyType()), scopeForInvokeWithReceiver, Collections.<ConstructorDescriptor>singleton(constructorDescriptorForReceiverFunction), null);
|
||||
RECEIVER_FUNCTION_TYPE_CONSTRUCTORS.add(RECEIVER_FUNCTION[i].getTypeConstructor());
|
||||
FunctionDescriptorUtil.initializeFromFunctionType(invokeWithReceiver, receiverFunction.getDefaultType(), new ClassReceiver(RECEIVER_FUNCTION[i]), Modality.ABSTRACT, Visibilities.PUBLIC);
|
||||
|
||||
constructorDescriptorForReceiverFunction.initialize(receiverFunction.getTypeConstructor().getParameters(),
|
||||
Collections.<ValueParameterDescriptor>emptyList(), Visibilities.PUBLIC);
|
||||
constructorDescriptorForReceiverFunction.setReturnType(receiverFunction.getDefaultType());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -249,18 +260,18 @@ public class JetStandardClasses {
|
||||
return scopeForInvoke;
|
||||
}
|
||||
|
||||
private static List<TypeParameterDescriptor> createTypeParameters(int parameterCount, ClassDescriptorImpl function) {
|
||||
private static List<TypeParameterDescriptor> createTypeParameters(int baseIndex, int parameterCount, ClassDescriptorImpl function) {
|
||||
List<TypeParameterDescriptor> parameters = new ArrayList<TypeParameterDescriptor>();
|
||||
for (int j = 1; j <= parameterCount; j++) {
|
||||
for (int j = 0; j < parameterCount; j++) {
|
||||
parameters.add(TypeParameterDescriptorImpl.createWithDefaultBound(
|
||||
function,
|
||||
Collections.<AnnotationDescriptor>emptyList(),
|
||||
false, Variance.IN_VARIANCE, Name.identifier("P" + j), j));
|
||||
false, Variance.IN_VARIANCE, Name.identifier("P" + (j + 1)), baseIndex + j));
|
||||
}
|
||||
parameters.add(TypeParameterDescriptorImpl.createWithDefaultBound(
|
||||
function,
|
||||
Collections.<AnnotationDescriptor>emptyList(),
|
||||
false, Variance.OUT_VARIANCE, Name.identifier("R"), parameterCount + 1));
|
||||
false, Variance.OUT_VARIANCE, Name.identifier("R"), baseIndex + parameterCount));
|
||||
return parameters;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user