Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

JDT Core/Plan/4.8/JEP286

< JDT Core‎ | Plan/4.8
Revision as of 11:30, 21 November 2017 by Jesper.selskabet.org (Talk | contribs) (Added bugzilla numbers for JEP 286)

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.

Back to the top