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 UI/Java8"

(IMPORTANT NOTE)
(IMPORTANT NOTE)
Line 19: Line 19:
 
   *
 
   *
 
  </code>
 
  </code>
 +
 +
*Use the following @since tag on all newly added members: "3.9 BETA_JAVA8"
  
 
= Things to remember/caveats  =
 
= Things to remember/caveats  =

Revision as of 10:26, 19 March 2013

This page tracks the work in progress to add Java™ 8 support (mainly jsr308 "Type Annotations" and jsr335 "Lambda Expressions") into Eclipse JDT UI. See JDT Core/Java8 for the work in the JDT Core plug-ins.

Work areas

  • Annotations on types
    • Annotations that moved to another node in the AST
    • MethodDeclaration#thrownExceptions() -> thrownExceptionsTypes()
    • Annotations on Extra Dimensions
  • Receiver parameter on instance methods and inner class constructors
  • Default Methods
  • Lambda Expressions
    • check code that walks the parent chain to find the enclosing Block or BodyDeclaration
  • Method References

IMPORTANT NOTE

  • The following lines must be added in all headers of modified files for Java™ 8 implementation:
 * This is an implementation of an early-draft specification developed under the Java
 * Community Process (JCP) and is made available for testing and evaluation purposes
 * only. The code is not compatible with any specification of the JCP.
 *

  • Use the following @since tag on all newly added members: "3.9 BETA_JAVA8"

Things to remember/caveats

  • Goal of the first pass is to make Eclipse work with the new language features. For more advanced support (new quick fixes / refactorings / templates / ...), please file an enhancement request with the [1.8] tag.
  • Bugs that went into the BETA_JAVA8 branch should be RESOLVED/FIXED with Target Milestone "BETA_JAVA8" and the [1.8] tag in front of the summary.
  • For ASTNode changes:
    • Search for references to a changed AST Node and update code that relies on the concrete structure
    • Remember there are multiple ways to access AST node properties:
      • via getter/setter or List-valued accessor
      • via the StructuralPropertyDescriptor constant
      • for properties declared in an abstract class: via get*Property() instance method
    • Check references to superclasses of the changed/added node type. E.g. for IntersectionType, code that thinks it handles all known subtypes of Type needs to be adjusted.
    • Add new node types to switch or if-else-if statements
    • Think about cases where code could use StructuralPropertyDescriptors
  • Think about cases where new bindings can show up.

DOM AST node changes in JLS8

If everything is correct, then you should find these as references to ASTNode#unsupportedIn2_3_4() and #supportedOnlyIn2_3_4().

+AnnotatableType (abstract superclass):
  +annotations: List<Annotation> (also in subtypes PrimitiveType, ArrayType, SimpleType, QualifiedType, WildcardType)

+ExtraDimensions
  +annotations: List<Annotation>

+LambdaExpression:
  +parentheses: boolean
  +parameters: List<SingleVariableDeclaration> or List<VariableDeclarationFragment>
  +body: Block or Expression
  +resolveMethodBinding(): IMethodBinding

~MethodDeclaration:
  +extraDimensions: List<ExtraDimension> (incl. annotations on extra dimensions)
  +receiverType: AnnotatableType
  +receiverQualifier: SimpleName
  -thrownExceptions: List<Name>
  +thrownExceptionTypes: List<Type>

~SingleVariableDeclaration:
  +varargsAnnotations: List<Annotation>

~TypeParameter:
  +annotations: List<Annotation>

~VariableDeclaration:
  +extraDimensions List<ExtraDimension> (also in subtypes SingleVariableDeclaration, VariableDeclarationFragment)

For JLS4, the changes were:

~TryStatement:
  +resources: List<VariableDeclarationExpression>

+UnionType
  +types: List<Type>

TODOs

  • 'default' flag:
    • show in the UI?
    • update JdtFlags?

Back to the top