java 11 and beyond
play

Java 11 and Beyond MAKING ECLIPSE JDT FUTURE READY MANOJ PALAT IBM - PowerPoint PPT Presentation

Java 11 and Beyond MAKING ECLIPSE JDT FUTURE READY MANOJ PALAT IBM @manojnp manojnp Java Releases Road Traveled++ Eclipse Releasing Every Quarter now Version Release Date 1996 1.0 1997, 1998, 2000, 2002, 2004,2006


  1. Java 11 and Beyond MAKING ECLIPSE JDT FUTURE – READY MANOJ PALAT – IBM @manojnp manojnp

  2. Java Releases – Road Traveled++ Eclipse Releasing Every Quarter now Version Release Date  1996  1.0  1997, 1998, 2000, 2002, 2004,2006  1.1,1.2,1.3,1.4,1.5,1.6  2011 (String Switch, t-w-r, dyn-support)  1.7  2014 (Lambda, Null)  1.8  Sep 2017 (Modules,  9  Mar 2018  10  Sep 2018  11  Mar 2019  12  13…  Sep 2019…

  3. Eclipse/JDT JAVA DEVELOPMENT TOOLS (JDT) UI DOM AST JAVA SEARCH JAVA MODEL Compilation Unit • Batch Declarations Workspace • • Fine grained • Compiler References Projects • • Statements, • Hierarchy CU, Type, Methods • • identifiers Java Constructs Lightweight - views • • Fully resolved • ECLIPSE JAVA COMPILER

  4. ( DEMO ) Agenda  Past  Java 7 & 8 (LE, indy)  Java 9 (Modules)  Present  Java 10 (Local Variable Type Inference)  Java 11 (var in LE, condy, Nesting)  Future  Java 12 ( Raw String, Switch Expressions)  And Beyond …

  5. Relevant Historical Features - 1.7, 1.8, 9  Java.lang.invoke.MethodHandle, MethodType (1.7)  CONSTANT_MethodHandle_info, CONSTANT_MethodType_info(1.7)  invokedynamic (1.7)  Lambda Expressions (1.8)  _(Underscore) valid identifier (1.7) warning (1.8) Invalid identifier(9)  Modules (9)  t-w-r with effectively final variables(9)

  6. Current Features - 10, 11  Local variable type inference (10)  var as lambda parameter (11)  Constant_Dynamic, ldc enablement.  Nesting  --enable-preview

  7. Local Variable Type Inference- 10, 11  Avoid boilerplate code, less ceremony  Var allowed in  variable declaration with initializers, index variable for loop   enhanced-for loop lambda expression parameter (11)   Null init or no init disallowed  Var not a keyword  Var is a reserved type  var var = 10; allowed

  8. Constant_Dynamic (11)  Reduce the cost and disruption of creating new constants  Allows flexibility  Essentially provide a new constant pool with user specs  Using the existing bootstrap mechanism of LE to this end  Not utilized by Java as of 11 (initial use expected by 12)

  9. Nest (11)  JLS allows unrestricted access within a top level type  private access between nestmates is not permitted by the JVM access rules – compiled into different classes  Enter bridge method with package private promotion  Nestmates – Nest Host, Nest Member(s)

  10. Preview Feature  Language/vm feature  Fully specified  Fully implemented  Not experimental  Impermanent  To invoke feedback  May become permanent  Unavailable by default at compile time and run-time  --enable-preview

  11. Raw String Literals (12) - preview  span multiple lines of source code and does not interpret escape sequences, such as \n, or Unicode escapes, of the form \uXXXX.  Runtime.getRuntime().exec("\"C:\\Program Files\\foo\" bar");  Runtime.getRuntime().exec(`"C:\Program Files\foo" bar`);  System.out.println("this".matches("\\w\\w\\w\\w"))  System.out.println("this".matches(`\w\w\w\w`))

  12. Raw String Literal Examples (12)  `"` // a string containing " alone  ``can`t`` // a string containing 'c', 'a', 'n', '`' and 't'  `This is a string` // a string containing 16 characters  `\n` // a string containing '\' and 'n'  `\u2022` // a string containing '\', 'u', '2', '0', '2' and '2'  `This is a  two-line string` // a single string constant

  13. Switch Expressions (12) - preview  Issues/Irritants:  Default control flow : Fall through  Default scoping (Single scope) – one monolithic  Finally, a statement  Extend the switch statement so that it can be used as either a statement or an expression, and that both forms can use either a "traditional" or "simplified" scoping and control flow behavior.

  14. Switch Expressions (325) switch (day) { case MONDAY -> System.out.println(6); switch (day) { case FRIDAY -> System.out.println(6); case MONDAY: case SUNDAY -> System.out.println(6); case FRIDAY: case TUESDAY -> System.out.println(7); case SUNDAY: case THURSDAY -> System.out.println(8); System.out.println(6); break; case SATURDAY -> System.out.println(8); case TUESDAY: case WEDNESDAY -> System.out.println(9); System.out.println(7); } break; case THURSDAY: case SATURDAY: System.out.println(8); break; switch (day) { case WEDNESDAY: System.out.println( 9); case MONDAY, FRIDAY, SUNDAY -> System.out.println(6); break; case TUESDAY -> System.out.println(7); } case THURSDAY, SATURDAY -> System.out.println(8); case WEDNESDAY -> System.out.println(9); }

  15. Switch Expressions (325) int numLetters = switch (day) {  int numLetters;  case MONDAY, FRIDAY, SUNDAY -> 6; switch (day) {   case MONDAY:  case TUESDAY -> 7;  case FRIDAY:  case THURSDAY, SATURDAY -> 8;  case SUNDAY:  case WEDNESDAY -> 9; numLetters = 6;   break; };   case TUESDAY:  numLetters = 7;  break;  int numLetters = switch (day) { case THURSDAY:  case MONDAY, FRIDAY, SUNDAY -> break 6; case SATURDAY:  case TUESDAY -> break 7; numLetters = 8;  case THURSDAY, SATURDAY -> { break;  int k = day.toString().length(); case WEDNESDAY:  int result = f(k); numLetters = 9;  break result; break;  }; default:  case WEDNESDAY -> throw IllegalStateException (“W”); numLetters = 100;  }; } 

  16. References  Java 12 Page (Official):  http://openjdk.java.net/projects/jdk/12/  Eclipse JDT Java Plan / Wiki (Mapping, Entry Points and info)  https://wiki.eclipse.org/JDT_Core/Plan/Java  Top Level Java 12 Support bug Eclipse JDT  https://bugs.eclipse.org/bugs/show_bug.cgi?id=536055  BETA_Java_12 branch  JEP 325 : http://openjdk.java.net/jeps/325  JEP 326 : http://openjdk.java.net/jeps/326

  17. Pattern Matching (13+..)  A pattern is a combination of a predicate that can be applied to a target, along with a set of binding variables that are extracted from the target if the predicate applies to it test (x is an integer)  if (x instanceof Integer) {  Conversion (cast) int intValue = ((Integer) obj).intValue();  Destructuring (extract) // use intValue } if (x matches Integer i) { Switch Expressions  // can use i here  Dynamic Constant }

  18. Thank You @man manojnp ojnp https://in.linkedin.com/in/manojnp

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend