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

Difference between revisions of "JDT Core/Plan/4.8/JEP286"

(Added bugzilla numbers for JEP 286)
 
(11 intermediate revisions by 4 users not shown)
Line 20: Line 20:
 
** Lambda expression needs an explicit target-type  
 
** Lambda expression needs an explicit target-type  
 
** Variable initializer is 'null'
 
** Variable initializer is 'null'
** Inferred type is non denotable
+
** Inferred type is 'void'
 
** When method reference needs an explicit target-type.
 
** When method reference needs an explicit target-type.
 
** array initializer needs an explicit target-type
 
** array initializer needs an explicit target-type
Line 28: Line 28:
 
=== Code generation ===
 
=== Code generation ===
 
Shouldn't be much work since the stack frame would be filled in with the bound type anyway.
 
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: [https://bugs.eclipse.org/bugs/show_bug.cgi?id=529434 Search Bug]
  
 
== DOM support ==
 
== DOM support ==
 
Changes regarding the DOM: [https://bugs.eclipse.org/bugs/show_bug.cgi?id=527558 DOM Bug]
 
Changes regarding the DOM: [https://bugs.eclipse.org/bugs/show_bug.cgi?id=527558 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 ?
  
 
== UI Changes ==
 
== UI Changes ==
This hasn't been looked into yet. Some ideas:
+
 
 +
* Switch ASTs to JLS10 - [https://bugs.eclipse.org/bugs/show_bug.cgi?id=530298 bug 530298], [https://bugs.eclipse.org/bugs/show_bug.cgi?id=531142 bug 531142].
  
 
=== Code hover ===
 
=== Code hover ===
* Show inferred type of variable
+
* Show inferred type of variable - [https://bugs.eclipse.org/bugs/show_bug.cgi?id=531041 bug 531041].
  
 
=== Preferences ===
 
=== Preferences ===
* 'Code Style' option to prefer 'var' over specific types (to control the irritants generated by the compiler)
+
* Allow JDT UI to target Java 10 in Compiler Preferences - [https://bugs.eclipse.org/bugs/show_bug.cgi?id=529432 bug 529432]
 +
* Clean up option to prefer 'var' over specific types (to control the irritants generated by the compiler) - [based on need - low prio].
  
=== Quick fixes ===
+
=== Quick assists ===
* Convert 'var' into the resolved type
+
* Convert 'var' into the resolved type - [https://bugs.eclipse.org/bugs/show_bug.cgi?id=531039 bug 531039].
* Convert explicit typed local variable into 'var', like changing "String coolIde = "Eclipse";" into "var coolIde = "Eclipse";"
+
* 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>()" - [https://bugs.eclipse.org/bugs/show_bug.cgi?id=531040 bug 531040].
* Convert diamond operator to var, like fixing "List<String> names = new LinkedList<>()" into "var names = new LinkedList<String>()"
+
  
 
=== Code templates ===
 
=== Code templates ===
* Use 'var' in templates for loops and introduce new variable, if preferred by the code style.
+
* New templates with 'var' in for loops and introduce new variable - [can be added if useful - need examples - low prio].
 +
 
 +
[[Category:JDT]]

Latest revision as of 09:19, 13 March 2018

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 '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.

Code generation

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

DOM support

Changes regarding the DOM: DOM Bug

Content Assist support

UI Changes

Code hover

Preferences

  • 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].

Quick assists

  • 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.

Code templates

  • New templates with 'var' in for loops and introduce new variable - [can be added if useful - need examples - low prio].

Back to the top