jdt embraces lambda expressions - eclipsecon north america 2014
DESCRIPTION
Java 8 is coming. It is happening right here. Developers of your favorite Java IDE are participating in shaping this long awaited milestone for the Java ecosystem: On time with the GA of Java 8, JDT will ship its first release with support for developing in Java 8. If you have a basic understanding of the new features in Java 8, come here and learn how the JDT team mastered the challenges of lifting the Eclipse Java IDE to the next language version. The main focus of this talk will be on lambda expressions, touching also some changes in the libraries that leverage lambda expressions. We will expose some examples demonstrating the complexity of the language and mention some caveats which should help you avoid some unpleasent surprises. We will demo how to get started using Java 8 in Eclipse and show the latest tool features for working with lambda expressions including new quick assists etc. Finally, we'll give a retrospective discussion of the situation of the JDT team, in terms of team changes, contributors, deadlines, interaction with expert groups, with the Eclipse community, and more.TRANSCRIPT
![Page 1: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/1.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
1
Srikanth SankaranIBM India
Stephan HerrmannGK Software
Noopur Gupta
IBM India
![Page 2: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/2.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
2
Java 8 features:
JSR335 - Project Lambda
Lambda Expressions & Method References
Extensions to
Overload resolution & Type inference
Support for “code carrying” interface methods.
JSR308 - Type Annotations
JEP120 - Repeating Annotations
JEP118 - Method Parameter Reflection
JSR269 - Pluggable Annotation Processor API &
javax.lang.model API enhancements for Java 8
![Page 3: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/3.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
3
![Page 4: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/4.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
4
![Page 5: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/5.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
5
![Page 6: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/6.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
6
![Page 7: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/7.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
7
![Page 8: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/8.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
8
![Page 9: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/9.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
9
![Page 10: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/10.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
10
LambdaExpression ::= LambdaParameters '->' LambdaBody
LambdaParameters -> BeginLambda LambdaParameterList
LambdaParameterList -> '(' FormalParameterListopt ')„
LambdaBody -> Expression
LambdaBody -> Block
I i = BeginLambda (x) -> { };
![Page 11: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/11.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
11
![Page 12: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/12.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
12
![Page 13: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/13.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
13
![Page 14: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/14.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
14
![Page 15: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/15.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
15
Scanning + Parsing => Parse tree
+ Resolution => Resolved parse tree
+ Data/control flow analysis => Flow analyzed parse tree
+ Code generation => Class files.
() -> { throw new Exception(); } is void and value compatible.
![Page 16: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/16.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
16
![Page 17: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/17.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
17
o Changes the very notion of a type.
o Some subsystems should view @NonNull String != @ReadOnly String
o while others should view them as being the same.
o Abstractions need to support either world view efficiently.
String is a String is a String
![Page 18: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/18.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
18
![Page 19: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/19.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
19
![Page 20: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/20.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
20
![Page 21: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/21.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
21
Collectors.<Person,String,Integer>toMap(..)
Collectors.toMap(..)
Collector<String,Integer> coll = new MyCollector<>();
![Page 22: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/22.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
22
![Page 23: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/23.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
23
![Page 24: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/24.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
24
![Page 25: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/25.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
25
![Page 26: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/26.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
26
![Page 27: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/27.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
27
![Page 28: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/28.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
28
![Page 29: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/29.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
29
Recipe for disaster:● implement java.util.List → compile against JRE 7 → OK
● upgrade to JRE 8 but compile as 1.7
Undefined compiler behavior● 1.7 compiler cannot handle default methods (from .class)
● exact answer depends on compiler implementation details
● there is no specification
● ecj and javac differ
● assimilation is difficult
![Page 30: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/30.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
30
![Page 31: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/31.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
31
![Page 32: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/32.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
Enter
+Ctrl 1
32
![Page 33: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/33.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
33
Enter
+Ctrl 1
![Page 34: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/34.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
34
Enter
+Ctrl 1
![Page 35: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/35.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
35
Enter
+Ctrl 1
![Page 36: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/36.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
36
![Page 37: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/37.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
37
Lambda Expression:
Method Reference:
![Page 38: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/38.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
38
Demo
Examples:
![Page 39: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/39.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
39
![Page 40: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/40.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
40
![Page 41: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/41.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
41
![Page 42: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/42.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
42
![Page 43: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/43.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
43
![Page 44: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/44.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
44
![Page 45: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/45.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
45
![Page 46: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/46.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
46
![Page 47: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/47.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
47
![Page 48: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/48.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
48
Far too risky to
cram late into 8
(Nov 2013)
![Page 49: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/49.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
49
List <: List<String> ?
Raw types
![Page 50: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/50.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
50
“Problem detected during type inference: ...”
![Page 51: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/51.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
51
![Page 52: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/52.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
52
![Page 53: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/53.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
53
![Page 54: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/54.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
54
![Page 55: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/55.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
55
![Page 56: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/56.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
56
![Page 57: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/57.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
57
![Page 58: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/58.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
58
![Page 59: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/59.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
59
![Page 60: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/60.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
60
Dramatis personæ - The usual suspects
Jay Arthanareeswaran
Deepak Azad
Shankha Banerjee
Anirban Chakarborty
Vikas Chandra
Noopur Gupta
Ayushman Jain
Manju Mathew
Manoj Palat
Srikanth Sankaran
Sarika Sinha
Jesper S. Møller
Stephan Herrmann
Markus Keller
Dani Megert
Andy Clement
Steve Francisco
Michael Rennie
Olivier Thomann
Curtis Windatt
Walter Harley
David Williams
![Page 61: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/61.jpg)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
61
![Page 62: JDT Embraces Lambda Expressions - EclipseCon North America 2014](https://reader033.vdocuments.net/reader033/viewer/2022052410/554fa21db4c905ad218b4aed/html5/thumbnails/62.jpg)
EVALUATE THIS SESSION
Sign-in: www.eclipsecon.org
Select session from schedule
Evaluate:
1
2
3