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.
Difference between revisions of "JDT UI/Java8"
< JDT UI
(→Work areas) |
|||
Line 19: | Line 19: | ||
* | * | ||
</code> | </code> | ||
+ | |||
+ | = 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 [https://bugs.eclipse.org/bugs/enter_bug.cgi?product=JDT&component=UI&short_desc=%5B1.8%5D+&bug_severity=enhancement 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 = | = DOM AST node changes in JLS8 = |
Revision as of 06:57, 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.
Contents
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 should 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. *
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?