- 1 Planning page for JDT Implementation of Local Variable Type Inference (JEP 286) for Photon (4.8)
Planning page for JDT Implementation of Local Variable Type Inference (JEP 286) for Photon (4.8)
Main tracking bug: JEP286 Bug
Changes regarding the compiler: Compiler Bug
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.
- Determine the type of the var declaration
- Determine upwards/downwards type projection for type
- Fallback to "Object" type in case of error
- 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 'void'
- 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.
Shouldn't be much work since the stack frame would be filled in with the bound type anyway.
Java Search support
Changes regarding the Search: Search Bug
Changes regarding the DOM: DOM Bug
Content Assist support
- Top level bug at https://bugs.eclipse.org/bugs/show_bug.cgi?id=529556
- var to be included in completion - https://bugs.eclipse.org/bugs/show_bug.cgi?id=529552
- type. completions if the type is var - tracked via https://bugs.eclipse.org/bugs/show_bug.cgi?id=529556
- name of the variable? Default camel case type to a little alphabet prefixed name will not work here - alternatives (low prio).
- changes to priority of proposals ?
- Show inferred type of variable - bug 531041.
- Allow JDT UI to target Java 10 in Compiler Preferences - bug 529432
- Clean up option to prefer 'var' over specific types (to control the irritants generated by the compiler) - [based on need - low prio].
- Convert 'var' into the resolved type - bug 531039.
- Convert explicit typed local variable into 'var', like changing "String coolIde = "Eclipse";" into "var coolIde = "Eclipse";" It should also include: Convert diamond operator to var, like fixing "List<String> names = new LinkedList<>()" into "var names = new LinkedList<String>()" - bug 531040.
- New templates with 'var' in for loops and introduce new variable - [can be added if useful - need examples - low prio].