Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
JDT Core/Plan/4.8/JEP286
< JDT Core | Plan/4.8
Revision as of 11:30, 21 November 2017 by Unnamed Poltroon (Talk) (Added bugzilla numbers for JEP 286)
Contents
Planning page for JDT Implementation of Local Variable Type Inference (JEP 286) for Photon (4.8)
Main tracking bug: JEP286 Bug
Compiler changes
Changes regarding the compiler: Compiler Bug
Grammar changes
Since var is not a keyword, but a reserved type name AND we need to be backwards compatible anyway, it should be handled in type resolution instead of grammar. Local variable type inference should be denoted by a bit AST node and type binding.
Type checking
- Determine the type of the var declaration
- Determine upwards/downwards type projection for type
- Fallback to "Object" type in case of error
Error reports
- Errors where local variable type cannot be inferred:
- Cannot use 'var' on variable without initializer
- Lambda expression needs an explicit target-type
- Variable initializer is 'null'
- Inferred type is non denotable
- When method reference needs an explicit target-type.
- array initializer needs an explicit target-type
- Error when defining a type called 'var':
This should be a configurable 'warning'/'info' for Java 9 and earlier.
Code generation
Shouldn't be much work since the stack frame would be filled in with the bound type anyway.
DOM support
Changes regarding the DOM: DOM Bug
UI Changes
This hasn't been looked into yet. Some ideas:
Code hover
- Show inferred type of variable
Preferences
- 'Code Style' option to prefer 'var' over specific types (to control the irritants generated by the compiler)
Quick fixes
- Convert 'var' into the resolved type
- Convert explicit typed local variable into 'var', like changing "String coolIde = "Eclipse";" into "var coolIde = "Eclipse";"
- Convert diamond operator to var, like fixing "List<String> names = new LinkedList<>()" into "var names = new LinkedList<String>()"
Code templates
- Use 'var' in templates for loops and introduce new variable, if preferred by the code style.