You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

RecordPatternsPreview1Aspect.aj 1.2KB

1234567891011121314151617181920212223242526272829303132333435
  1. public aspect RecordPatternsPreview1Aspect {
  2. public static void main(String[] args) {
  3. doSomething(new Point(2, 7));
  4. doSomething(new Rectangle(
  5. new ColoredPoint(new Point(1, 6), Color.RED),
  6. new ColoredPoint(new Point(4, 6), Color.BLUE)
  7. ));
  8. }
  9. public static void doSomething(Object object) {
  10. System.out.println("Doing something with " + object);
  11. }
  12. before(Object object): execution(* doSomething(*)) && args(object) {
  13. if (object instanceof Point p) {
  14. int x = p.x();
  15. int y = p.y();
  16. System.out.println(x + y);
  17. }
  18. if (object instanceof Point(int x, int y))
  19. System.out.println(x * y);
  20. if (object instanceof Rectangle(ColoredPoint ul, ColoredPoint lr))
  21. System.out.println("Upper-left color: " + ul.c());
  22. if (object instanceof Rectangle(ColoredPoint(Point p, Color c), ColoredPoint lr))
  23. System.out.println("Upper-left color: " + c);
  24. if (object instanceof Rectangle(ColoredPoint(Point(var x, var y), var c), var lr))
  25. System.out.println("Upper-left x coordinate: " + x);
  26. }
  27. }
  28. record Point(int x,int y){}
  29. enum Color { RED, GREEN, BLUE }
  30. record ColoredPoint(Point p, Color c) {}
  31. record Rectangle(ColoredPoint upperLeft, ColoredPoint lowerRight) {}