import java.util.function.Function;
import java.util.stream.Stream;
@FunctionalInterface
interface Selector<TYPE> {
Object $get
(Function
<TYPE, Object
> function
);
@SuppressWarnings("unchecked")
public default <VALUE> VALUE get(Function<TYPE, VALUE> function) {
return (VALUE) $get(
(Function<TYPE, Object>) function
);
}
public default TYPE from(Selector<TYPE> selector) {
}
public default <VALUE> TYPE with(Function<TYPE, ? extends VALUE> function, VALUE value) {
return from(f -> (f == function)
? value
: get(f)
);
}
public static <TYPE
> Object none
(Function
<TYPE, Object
> function
) { }
}
@FunctionalInterface
interface $Point
extends Point, Selector
<Point
> { public static final Function
<Point, Integer
> X
= Point::getX
; public static final Function
<Point, Integer
> Y
= Point::getY
;
@Override
public default int getX() {
return get(X);
}
@Override
public default int getY() {
return get(Y);
}
@Override
public default Point withX
(int x
) { return with(X, x);
}
@Override
public default Point withY
(int y
) { return with(Y, y);
}
@Override
public default Point from
(Selector
<Point
> selector
) { return ($Point) selector::get;
}
public static $Point none() {
return Selector::none;
}
}
public int getX();
public int getY();
public Point withX
(int x
); public Point withY
(int y
);
public static Point none
() { return $Point.none();
}
public static void main
(String[] args
) { .withX(3)
.withY(4)
;
Stream.of(
point.getX(),
point.getY()
)
;
}
}
public interface Main {
public static void main
(String...
arguments) { }
}
aW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5GdW5jdGlvbjsKaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uU3RyZWFtOwoKQEZ1bmN0aW9uYWxJbnRlcmZhY2UKaW50ZXJmYWNlIFNlbGVjdG9yPFRZUEU+IHsKICBPYmplY3QgJGdldChGdW5jdGlvbjxUWVBFLCBPYmplY3Q+IGZ1bmN0aW9uKTsKCiAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCiAgcHVibGljIGRlZmF1bHQgPFZBTFVFPiBWQUxVRSBnZXQoRnVuY3Rpb248VFlQRSwgVkFMVUU+IGZ1bmN0aW9uKSB7CiAgICByZXR1cm4gKFZBTFVFKSAkZ2V0KAogICAgICAoRnVuY3Rpb248VFlQRSwgT2JqZWN0PikgZnVuY3Rpb24KICAgICk7CiAgfQoKICBwdWJsaWMgZGVmYXVsdCBUWVBFIGZyb20oU2VsZWN0b3I8VFlQRT4gc2VsZWN0b3IpIHsKICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKCJTZWxlY3Rvcjo6ZnJvbSBpcyBub3QgaW1wbGVtZW50ZWQuIik7CiAgfQoKICBwdWJsaWMgZGVmYXVsdCA8VkFMVUU+IFRZUEUgd2l0aChGdW5jdGlvbjxUWVBFLCA/IGV4dGVuZHMgVkFMVUU+IGZ1bmN0aW9uLCBWQUxVRSB2YWx1ZSkgewogICAgcmV0dXJuIGZyb20oZiAtPiAoZiA9PSBmdW5jdGlvbikKICAgICAgPyB2YWx1ZQogICAgICA6IGdldChmKQogICAgKTsKICB9CgogIHB1YmxpYyBzdGF0aWMgPFRZUEU+IE9iamVjdCBub25lKEZ1bmN0aW9uPFRZUEUsIE9iamVjdD4gZnVuY3Rpb24pIHsKICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIm5vIHZhbHVlIik7CiAgfQp9CgpARnVuY3Rpb25hbEludGVyZmFjZQppbnRlcmZhY2UgJFBvaW50IGV4dGVuZHMgUG9pbnQsIFNlbGVjdG9yPFBvaW50PiB7CiAgcHVibGljIHN0YXRpYyBmaW5hbCBGdW5jdGlvbjxQb2ludCwgSW50ZWdlcj4gWCA9IFBvaW50OjpnZXRYOwogIHB1YmxpYyBzdGF0aWMgZmluYWwgRnVuY3Rpb248UG9pbnQsIEludGVnZXI+IFkgPSBQb2ludDo6Z2V0WTsKCiAgQE92ZXJyaWRlCiAgcHVibGljIGRlZmF1bHQgaW50IGdldFgoKSB7CiAgICByZXR1cm4gZ2V0KFgpOwogIH0KCiAgQE92ZXJyaWRlCiAgcHVibGljIGRlZmF1bHQgaW50IGdldFkoKSB7CiAgICByZXR1cm4gZ2V0KFkpOwogIH0KCiAgQE92ZXJyaWRlCiAgcHVibGljIGRlZmF1bHQgUG9pbnQgd2l0aFgoaW50IHgpIHsKICAgIHJldHVybiB3aXRoKFgsIHgpOwogIH0KCiAgQE92ZXJyaWRlCiAgcHVibGljIGRlZmF1bHQgUG9pbnQgd2l0aFkoaW50IHkpIHsKICAgIHJldHVybiB3aXRoKFksIHkpOwogIH0KCiAgQE92ZXJyaWRlCiAgcHVibGljIGRlZmF1bHQgUG9pbnQgZnJvbShTZWxlY3RvcjxQb2ludD4gc2VsZWN0b3IpIHsKICAgIHJldHVybiAoJFBvaW50KSBzZWxlY3Rvcjo6Z2V0OwogIH0KCiAgcHVibGljIHN0YXRpYyAkUG9pbnQgbm9uZSgpIHsKICAgIHJldHVybiBTZWxlY3Rvcjo6bm9uZTsKICB9Cn0KCmludGVyZmFjZSBQb2ludCB7CiAgcHVibGljIGludCBnZXRYKCk7CiAgcHVibGljIGludCBnZXRZKCk7CgogIHB1YmxpYyBQb2ludCB3aXRoWChpbnQgeCk7CiAgcHVibGljIFBvaW50IHdpdGhZKGludCB5KTsKCiAgcHVibGljIHN0YXRpYyBQb2ludCBub25lKCkgewogICAgcmV0dXJuICRQb2ludC5ub25lKCk7CiAgfQoKICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICBQb2ludCBwb2ludCA9IG5vbmUoKQogICAgICAud2l0aFgoMykKICAgICAgLndpdGhZKDQpCiAgICA7CiAgICBTdHJlYW0ub2YoCiAgICAgIHBvaW50LmdldFgoKSwKICAgICAgcG9pbnQuZ2V0WSgpCiAgICApCiAgICAgIC5mb3JFYWNoKFN5c3RlbS5vdXQ6OnByaW50bG4pCiAgICA7CiAgfQp9CgpwdWJsaWMgaW50ZXJmYWNlIE1haW4gewogIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZy4uLiBhcmd1bWVudHMpIHsKICAgIFBvaW50Lm1haW4oYXJndW1lbnRzKTsKICB9Cn0=
Main.java:9: error: illegal start of type
public default <VALUE> VALUE get(Function<TYPE, VALUE> function) {
^
Main.java:9: error: = expected
public default <VALUE> VALUE get(Function<TYPE, VALUE> function) {
^
Main.java:9: error: ';' expected
public default <VALUE> VALUE get(Function<TYPE, VALUE> function) {
^
Main.java:9: error: illegal start of type
public default <VALUE> VALUE get(Function<TYPE, VALUE> function) {
^
Main.java:9: error: = expected
public default <VALUE> VALUE get(Function<TYPE, VALUE> function) {
^
Main.java:9: error: illegal start of type
public default <VALUE> VALUE get(Function<TYPE, VALUE> function) {
^
Main.java:9: error: = expected
public default <VALUE> VALUE get(Function<TYPE, VALUE> function) {
^
Main.java:9: error: <identifier> expected
public default <VALUE> VALUE get(Function<TYPE, VALUE> function) {
^
Main.java:9: error: ';' expected
public default <VALUE> VALUE get(Function<TYPE, VALUE> function) {
^
Main.java:9: error: illegal start of type
public default <VALUE> VALUE get(Function<TYPE, VALUE> function) {
^
Main.java:9: error: = expected
public default <VALUE> VALUE get(Function<TYPE, VALUE> function) {
^
Main.java:9: error: illegal start of type
public default <VALUE> VALUE get(Function<TYPE, VALUE> function) {
^
Main.java:9: error: <identifier> expected
public default <VALUE> VALUE get(Function<TYPE, VALUE> function) {
^
Main.java:10: error: <identifier> expected
return (VALUE) $get(
^
Main.java:10: error: ';' expected
return (VALUE) $get(
^
Main.java:11: error: illegal start of type
(Function<TYPE, Object>) function
^
Main.java:11: error: '(' expected
(Function<TYPE, Object>) function
^
Main.java:12: error: illegal start of type
);
^
Main.java:12: error: <identifier> expected
);
^
Main.java:13: error: = expected
}
^
Main.java:13: error: ';' expected
}
^
Main.java:15: error: illegal start of type
public default TYPE from(Selector<TYPE> selector) {
^
Main.java:15: error: = expected
public default TYPE from(Selector<TYPE> selector) {
^
Main.java:15: error: illegal start of type
public default TYPE from(Selector<TYPE> selector) {
^
Main.java:15: error: = expected
public default TYPE from(Selector<TYPE> selector) {
^
Main.java:15: error: <identifier> expected
public default TYPE from(Selector<TYPE> selector) {
^
Main.java:15: error: ';' expected
public default TYPE from(Selector<TYPE> selector) {
^
Main.java:15: error: illegal start of type
public default TYPE from(Selector<TYPE> selector) {
^
Main.java:15: error: <identifier> expected
public default TYPE from(Selector<TYPE> selector) {
^
Main.java:16: error: = expected
throw new InternalError("Selector::from is not implemented.");
^
Main.java:16: error: ';' expected
throw new InternalError("Selector::from is not implemented.");
^
Main.java:16: error: <identifier> expected
throw new InternalError("Selector::from is not implemented.");
^
Main.java:16: error: illegal start of type
throw new InternalError("Selector::from is not implemented.");
^
Main.java:19: error: class, interface, or enum expected
public default <VALUE> TYPE with(Function<TYPE, ? extends VALUE> function, VALUE value) {
^
Main.java:24: error: class, interface, or enum expected
}
^
Main.java:26: error: class, interface, or enum expected
public static <TYPE> Object none(Function<TYPE, Object> function) {
^
Main.java:28: error: class, interface, or enum expected
}
^
Main.java:33: error: ';' expected
public static final Function<Point, Integer> X = Point::getX;
^
Main.java:33: error: <identifier> expected
public static final Function<Point, Integer> X = Point::getX;
^
Main.java:33: error: ';' expected
public static final Function<Point, Integer> X = Point::getX;
^
Main.java:34: error: ';' expected
public static final Function<Point, Integer> Y = Point::getY;
^
Main.java:34: error: <identifier> expected
public static final Function<Point, Integer> Y = Point::getY;
^
Main.java:34: error: ';' expected
public static final Function<Point, Integer> Y = Point::getY;
^
Main.java:36: error: <identifier> expected
@Override
^
Main.java:37: error: = expected
public default int getX() {
^
Main.java:37: error: ';' expected
public default int getX() {
^
Main.java:42: error: illegal start of type
public default int getY() {
^
Main.java:42: error: = expected
public default int getY() {
^
Main.java:42: error: ';' expected
public default int getY() {
^
Main.java:42: error: illegal start of type
public default int getY() {
^
Main.java:42: error: <identifier> expected
public default int getY() {
^
Main.java:42: error: = expected
public default int getY() {
^
Main.java:42: error: ';' expected
public default int getY() {
^
Main.java:43: error: <identifier> expected
return get(Y);
^
Main.java:43: error: <identifier> expected
return get(Y);
^
Main.java:47: error: class, interface, or enum expected
public default Point withX(int x) {
^
Main.java:49: error: class, interface, or enum expected
}
^
Main.java:52: error: class, interface, or enum expected
public default Point withY(int y) {
^
Main.java:54: error: class, interface, or enum expected
}
^
Main.java:57: error: class, interface, or enum expected
public default Point from(Selector<Point> selector) {
^
Main.java:59: error: class, interface, or enum expected
}
^
Main.java:61: error: class, interface, or enum expected
public static $Point none() {
^
Main.java:63: error: class, interface, or enum expected
}
^
Main.java:86: error: ')' expected
.forEach(System.out::println)
^
Main.java:86: error: illegal start of expression
.forEach(System.out::println)
^
Main.java:86: error: ';' expected
.forEach(System.out::println)
^
66 errors