Skip to main content
Jump to: navigation, search

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 'val' on variable without initializer
+
** 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

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)

Back to the top