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.
Difference between revisions of "JDT Core/Plan/4.8/JEP286"
(Created page with "= Planning page for JDT Implementation of Local Variable Type Inference (JEP 286) for Photon (4.8) = Main tracking bug: [https://bugs.eclipse.org/bugs/show_bug.cgi?id=525750...") |
m |
||
Line 17: | Line 17: | ||
=== Error reports === | === Error reports === | ||
* Errors where local variable type cannot be inferred: | * Errors where local variable type cannot be inferred: | ||
− | ** Cannot use ' | + | ** Cannot use 'var' on variable without initializer |
** Lambda expression needs an explicit target-type | ** Lambda expression needs an explicit target-type | ||
** Variable initializer is 'null' | ** Variable initializer is 'null' |
Revision as of 09:56, 21 November 2017
Contents
Planning page for JDT Implementation of Local Variable Type Inference (JEP 286) for Photon (4.8)
Main tracking bug: JEP286 Bug
Break-down of items
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
Add DOM access to aforementioned AST+type bits.
New info + quick fix (nice to have)
Convert diamond operator to var, like fixing "List<String> names = new LinkedList<>()" into "var names = new LinkedList<String>()"
Code hover
Show type of variable (if not already handled by framework)