EclipseCon NA 2014 | JDT Embraces Lambda Expressions
1
Srikanth Sankaran
IBM India
Stephan Herrmann
GK Software
Noopur Gupta
IBM India
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
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
3
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
4
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
5
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
6
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
7
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
8
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
9
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
10
LambdaExpression ::= LambdaParameters '->' LambdaBody
LambdaParameters -> BeginLambda LambdaParameterList
LambdaParameterList -> '(' FormalParameterListopt ')„
LambdaBody -> Expression
LambdaBody -> Block
I i = BeginLambda (x) -> { };
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
11
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
12
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
13
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
14
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.
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
16
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
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
18
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
19
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
20
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
21
Collectors.<Person,String,Integer>toMap(..)
Collectors.toMap(..)
Collector<String,Integer> coll = new MyCollector<>();
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
22
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
23
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
24
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
25
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
26
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
27
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
28
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
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
30
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
31
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
Enter
+Ctrl 1
32
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
33
Enter
+Ctrl 1
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
34
Enter
+Ctrl 1
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
35
Enter
+Ctrl 1
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
36
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
37
Lambda Expression:
Method Reference:
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
38
Demo
Examples:
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
39
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
40
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
41
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
42
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
43
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
44
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
45
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
46
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
47
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
48
Far too risky to
cram late into 8
(Nov 2013)
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
49
List <: List<String> ?
Raw types
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
50
“Problem detected during type inference: ...”
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
51
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
52
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
53
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
54
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
55
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
56
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
57
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
58
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
59
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
EclipseCon NA 2014 | JDT Embraces Lambda Expressions
61
EVALUATE THIS SESSION
Sign-in: www.eclipsecon.org
Select session from schedule
Evaluate:
1
2
3

JDT Embraces Lambda Expressions - EclipseCon North America 2014

  • 1.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 1 Srikanth Sankaran IBM India Stephan Herrmann GK Software Noopur Gupta IBM India
  • 2.
    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
  • 3.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 3
  • 4.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 4
  • 5.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 5
  • 6.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 6
  • 7.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 7
  • 8.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 8
  • 9.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 9
  • 10.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 10 LambdaExpression ::= LambdaParameters '->' LambdaBody LambdaParameters -> BeginLambda LambdaParameterList LambdaParameterList -> '(' FormalParameterListopt ')„ LambdaBody -> Expression LambdaBody -> Block I i = BeginLambda (x) -> { };
  • 11.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 11
  • 12.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 12
  • 13.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 13
  • 14.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 14
  • 15.
    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.
  • 16.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 16
  • 17.
    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
  • 18.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 18
  • 19.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 19
  • 20.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 20
  • 21.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 21 Collectors.<Person,String,Integer>toMap(..) Collectors.toMap(..) Collector<String,Integer> coll = new MyCollector<>();
  • 22.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 22
  • 23.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 23
  • 24.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 24
  • 25.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 25
  • 26.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 26
  • 27.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 27
  • 28.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 28
  • 29.
    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
  • 30.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 30
  • 31.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 31
  • 32.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions Enter +Ctrl 1 32
  • 33.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 33 Enter +Ctrl 1
  • 34.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 34 Enter +Ctrl 1
  • 35.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 35 Enter +Ctrl 1
  • 36.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 36
  • 37.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 37 Lambda Expression: Method Reference:
  • 38.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 38 Demo Examples:
  • 39.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 39
  • 40.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 40
  • 41.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 41
  • 42.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 42
  • 43.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 43
  • 44.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 44
  • 45.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 45
  • 46.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 46
  • 47.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 47
  • 48.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 48 Far too risky to cram late into 8 (Nov 2013)
  • 49.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 49 List <: List<String> ? Raw types
  • 50.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 50 “Problem detected during type inference: ...”
  • 51.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 51
  • 52.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 52
  • 53.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 53
  • 54.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 54
  • 55.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 55
  • 56.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 56
  • 57.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 57
  • 58.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 58
  • 59.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 59
  • 60.
    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
  • 61.
    EclipseCon NA 2014| JDT Embraces Lambda Expressions 61
  • 62.
    EVALUATE THIS SESSION Sign-in:www.eclipsecon.org Select session from schedule Evaluate: 1 2 3