Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Eclipse CodeRecommendersIDE	  2.0:	  Leveraging	  the	  Wisdomof	  the	  So:ware	  Engineering	  Crowds                   ...
2
Eclipse	  Code	  Recommenders	  	  	  	  	  	   All Frameworks        CodeCode                                          Ec...
“Other	  developers	  frequently	  bought	  used	  the	  following	  methods…”INTELLIGENT	  CODE	  COMPLETION
Code	  Comple8on…@Overrideprotected Control createDialogArea(final Composite parent) {    Composite container = (Composite...
All	  164	  Methods	  of	  Text	  ?
JBuTon?	  381	  Methods.
Code	  Comple8on…@Overrideprotected Control createDialogArea(final Composite parent) {    final Composite container = (Com...
Intelligent	  Code	  Comple8on    …	  or	  just	  the	  three	  missing	  ones?	                                          ...
How	  it	  works	  -­‐	  in	  a	  nutshell                                                   10
How	  it	  works	  -­‐	  in	  a	  nutshell  Framework                                                   10
How	  it	  works	  -­‐	  in	  a	  nutshell                  Framework  Example	                     Example	              ...
How	  it	  works	  -­‐	  in	  a	  nutshell                         Framework     Example	                                 ...
How	  it	  works	  -­‐	  in	  a	  nutshell                         Framework     Example	                                 ...
How	  it	  works	  -­‐	  in	  a	  nutshell                         Framework                                              ...
From	  code	  to	  models...                                                       ()                                     ...
From	  code	  to	  models...                                                       ()                                     ...
From	  models	  to	  recommenda8ons...                                                      ()                            ...
From	  models	  to	  recommenda8ons...                                    ()                                 ts           ...
From	  models	  to	  recommenda8ons...                                    ()                                 ts           ...
From	  models	  to	  recommenda8ons...                                    ()                                 ts           ...
From	  models	  to	  recommenda8ons...                                    ()                                 ts           ...
“Welcome	  to	  the	  forest...”CALL-­‐CHAIN	  COMPLETION
How	  to	  obtain	  an	  instance	  of...public class MyView extends ViewPart {    public void updateMessage(final String ...
What	  we	  need...                                                             !"#$%&(                                   ...
01/1                %1"-(                                 2B&.#)&(&            ,#."1-           2B&.#                 )#*"...
Tools	  Outline                   19
Tools	  OutlineIntelligent	  Code	  Comple8on                                                 19
Tools	  OutlineIntelligent	  Code	  Comple8on                 Smart	  Bug	  Detec8on                                      ...
Tools	  OutlineIntelligent	  Code	  Comple8on                 Smart	  Bug	  Detec8on                                      ...
Tools	  OutlineIntelligent	  Code	  Comple8on                    Smart	  Bug	  Detec8on                                   ...
Tools	  OutlineIntelligent	  Code	  Comple8on                                              Smart	  Bug	  Detec8on         ...
Tools	  OutlineIntelligent	  Code	  Comple8on                                              Smart	  Bug	  Detec8on         ...
“The	  good	  ones	  in	  the	  crock,	  the	  bad	  ones	  in…	  the	  problem	  view.”SMART	  BUG	  DETECTION	  –	  DRIV...
What’s	  wrong	  with	  this	  code?          “Hello!”                     “id”                                           21
At	  run8me	  you	  get…                              22
...and	  a	  lengthy	  stacktraceorg.eclipse.core.run8me.Asser8onFailedExcep8on:	  null	  argument: at	  org.eclipse.core....
So what have we missed?                          24
If	  all	  of	  your	  colleagues	  do	  it	  –	  why	  don’t	  you?                                                      ...
If	  all	  of	  your	  colleagues	  do	  it	  –	  why	  don’t	  you?                                                      ...
How	  to	  detect	  such	  wrong	  uses?                                                26
How	  to	  detect	  such	  wrong	  uses?                                                26
How	  to	  detect	  such	  wrong	  uses?                                                26
How	  to	  detect	  such	  wrong	  uses?                                                26
How	  to	  detect	  such	  wrong	  uses?That’s	  “strange”                                                                ...
How	  to	  detect	  such	  wrong	  uses?                                                27
Just	  one	  formula…                   0             .5         .9    1x = {observed method calls on a variable}E(x) = {e...
Missing	  Calls	  Detector	  in	  Eclipse                                                29
Applied	  on	  Eclipse	  3.5...                                     30
“Developers	  who	  bought	  overwrote	  this	  method	  typically	  also	  overwrote...”USAGE-­‐DRIVEN	  JAVADOC
In	  good	  documenta8on	  we	  trust.../**  * Rollsback the transaction if any and clears different lists to  * start wit...
In	  good	  documenta8on	  we	  trust.../**  * Rollsback the transaction if any and clears different lists to  * start wit...
In	  good	  documenta8on	  we	  trust.../**  * Rollsback the transaction if any and clears different lists to  * start wit...
In	  good documenta8on	  we	  trust...         good	  /**  * Rollsback the transaction if any and clears different lists t...
Genera8ng	  high-­‐quality	  API	  documenta8on                                                     33
Genera8ng	  high-­‐quality	  API	  documenta8on  /**   * The number of questions.   */  private int numberOfQuestions;  /*...
Genera8ng	  high-­‐quality	  API	  documenta8on  /**   * The number of questions.   */  private int numberOfQuestions;  /*...
Genera8ng	  high-­‐quality	  API	  documenta8on  /**   * The number of questions.   */  private int numberOfQuestions;  /*...
Genera8ng	  high-­‐quality	  API	  documenta8on  /**   * The number of questions.   */  private int numberOfQuestions;  /*...
Genera8ng	  high-­‐quality	  API	  documenta8on  /**   * The number of questions.   */  private int numberOfQuestions;  /*...
Genera8ng	  high-­‐quality	  API	  documenta8on  /**   * The number of questions.   */  private int numberOfQuestions;  /*...
Genera8ng	  high-­‐quality	  API	  documenta8on  /**   * The number of questions.   */  private int numberOfQuestions;  /*...
Genera8ng	  high-­‐quality API	  documenta8on             high-­‐quality	    /**   * The number of questions.   */  privat...
Genera8ng	  high-­‐quality	  API	  documenta8on  /**   * The number of questions.   */  private int numberOfQuestions;  /*...
What	  people	  say	  about	  JAutodoc...                                                35
What	  people	  say	  about	  JAutodoc...User: Anonymous              Rating: 9   2009-08-02 11:32:37Wow exactly what I ne...
What	  people	  say	  about	  JAutodoc...User: Anonymous                   Rating: 9   2009-08-02 11:32:37Wow exactly what...
What	  people	  say	  about	  JAutodoc...User: Anonymous                   Rating: 9   2009-08-02 11:32:37Wow exactly what...
What	  people	  say	  about	  JAutodoc...User: Anonymous                   Rating: 9   2009-08-02 11:32:37Wow exactly what...
How	  Recommenders	  is	  coming	  to	  rescue...                                                         36
Some	  facts	  about	  the              documenta8on	  of	  overridable	  methodsOverridable                              ...
What	  clients	  do	  with	  your	  API...        Overridden                                                              ...
What	  clients	  do	  with	  your	  API...        Overridden                                                              ...
What	  documenta8on	  would	  you	  expect	  when	               subclassing	  Dialog?        package org.eclipse.recommen...
What	  Javadoc	  gives	  you...                                     40
What	  Javadoc	  gives	  you...A	  dialog	  is	  a	  specialized	  window	  used	  for	  narrow-­‐focused	  communica8on	 ...
What	  Javadoc	  gives	  you...A	  dialog	  is	  a	  specialized	  window	  used	  for	  narrow-­‐focused	  communica8on	 ...
What	  Javadoc	  gives	  you... A	  dialog	  is	  a	  specialized	  window	  used	  for	  narrow-­‐focused	   communica8on...
What	  code	  comple8on	  offers...                                        41
What	  code	  comple8on	  offers...Which of the 56 methods  should we override?                                          41
Recommending	  method	  overrides...public class MyDialog extends Dialog {                                              42
Recommending	  Self-­‐Callspublic class MyDialog extends Dialog {   @Override   protected Control createDialogArea(Composi...
Mining	  for	  Subclassing	  parernspublic class MyViewerComparator extends ViewerComparator {                            ...
Mining	  example	  code	  snippetspublic class MyDialog extends Dialog {   @Override   protected Control createDialogArea(...
Scarered	  Resources                        46
Scarered	  Resources                        46
Scarered	  Resources                        46
Extended	  Documenta8on	  Plasorm                      + Machine Learning                                           47
Extended	  Documenta8on                           48
How	  it	  works	  -­‐	  in	  a	  nutshell                                                   49
“Why	  is	  Google	  Codesearch	  not	  ‘google	  for	  code	  search’?	  ”CODE-­‐SEARCH	  ENGINES	  LIFT	  OFF
How	  many	  request	  per	  minutes	  do   code	  search	  engines	  have?                                               ...
20Number	  for	  koders.com	  in	  2009	  according	  to	  	  “Analyzing	  and	  mining	  a	  code	  search	  engine	  usa...
Naviga8ng	  the	  API	  jungle…private CompilationUnit createCompilationUnit(String source) {    // how can I create and c...
Naviga8ng	  the	  API	  jungle…  private CompilationUnit createCompilationUnit(String source) {      // how can I create a...
When	  asking	  Google	  code	  search...                                                54
When	  asking	  Google	  code	  search...                                                54
When	  asking	  Google	  code	  search...                                                54
When	  asking	  Google	  code	  search...                                                54
Why?       55
Why?       Text-based        retrieval!                     55
Why?          Text-based           retrieval!       Inexpressive query           language!                            55
Why?          Text-based           retrieval!       Inexpressive query           language!         Ignores prior          ...
Why?          Text-based           retrieval!       Inexpressive query           language!         Ignores prior          ...
Example	  code	  search	  enginepublic class MyJavaEditor extends EditorPart {   private CompilationUnit createCompilation...
Example	  code	  search	  enginepublic class MyJavaEditor extends EditorPart {   private CompilationUnit createCompilation...
“Why	  is	  Google	  Codesearch	  not	  ‘google	  for	  code	  search’?	  ”LEVERAGING	  USER	  FEEDBACK	  TOIMPROVE	  CODE...
Leveraging	  user	  feedback                                 58
Leveraging	  user	  feedback                                 58
Refine	  the	  ranking	  based	  on	  feedback                                                     59
Refine	  the	  ranking	  based	  on	  feedback                                                     59
Learning	  how	  to	  rank                                60
Ranking	  the	  examples                             61
Ranking	  the	  examplesdocument                                        61
Ranking	  the	  examplesdocument      query                                        61
Ranking	  the	  examplesdocument      query                       feature-­‐score	  i                                     ...
Ranking	  the	  examplesdocument      query             weight	     feature-­‐score	  i                      (-­‐∞..+∞)   ...
Upda8ng	  the	  feature	  weights...                                          62
Upda8ng	  the	  feature	  weights...                                          62
Upda8ng	  the	  feature	  weights...10.000	  ∗                                                        62
Benefits	  of	  automated	  tweaking#	  kendall’s	  ι                                          #	  queries                 ...
Interac8ons	  diagram           Client                                                          Server                    ...
Applica8on	  scenarios	  for	  your	  	  company                                             Open	  Source                ...
Applica8on	  scenarios	  for	  your	  	  company                                             Open	  Source                ...
Applica8on	  scenarios	  for	  your	  	  company                                             Open	  Source                ...
Applica8on	  scenarios	  for	  your	  	  company                                             Open	  Source                ...
Applica8on	  scenarios	  for	  your	  	  company                                             Open	  Source                ...
Applica8on	  scenarios	  for	  your	  	  company                                             Open	  Source                ...
“People	  that	  bought	  had	  this	  NullPointerExcepKon,	  made	  this	  mistake:...”WHAT	  CAUSED	  THAT	  STACKTRACE?
So	  far	  we	  have…                           67
So	  far	  we	  have…Intelligent	  Code	  Comple8on                                                      67
So	  far	  we	  have…Intelligent	  Code	  Comple8on                      Extended	  Documenta8on                          ...
So	  far	  we	  have…Intelligent	  Code	  Comple8on                      Extended	  Documenta8on                          ...
So	  far	  we	  have…Intelligent	  Code	  Comple8on                                Extended	  Documenta8on   Smart	  Bug	 ...
But	  what	  if	  you	  get	  this?                                           68
Debugging	  –	  the	  old	  way                                      69
Debugging	  –	  the	  old	  way                                      69
Debugging	  –	  the	  old	  way                                      70
But	  more	  ozen	  we	  get…                                    71
How	  can	  we	  fix	  that?	  Don’t	  stacktraces	  share	  some	  commonali8es?                                          ...
How	  can	  we	  fix	  that?	  Don’t	  stacktraces	  share	  some	  commonali8es?org.eclipse.swt.SWTException: Invalid thre...
How	  can	  we	  fix	  that?	  Don’t	  stacktraces	  share	  some	  commonali8es?org.eclipse.swt.SWTException: Invalid thre...
How	  can	  we	  fix	  that?	  Don’t	  stacktraces	  share	  some	  commonali8es?   Excep8onType	  Feature   (evaluates	  i...
How	  about	  stacktraces.org?                                   73
Applica8on	  scenarios	  for	  your	  	  company                                             Open	  Source                ...
“IDE	  2.0?	  Leveraging	  the	  wisdom	  of	  the	  (Eclipse)	  community…”ECLIPSE	  CODE	  RECOMMENDERS
A	  developer’s	  day...                               Switching                              Applications                ...
From	  IDE	  1.0	  to	  IDE	  2.0                                         77
From	  IDE	  1.0	  to	  IDE	  2.0                                         77
Where	  does	  IDE	  2.0	  improve	  the	  process?      Edit Code                                            Testing     ...
Build	  directly	  from	  version	  control                                         P2                                    ...
Leveraging	  your	  IDE’s	  build	  environment                                                      80
Leveraging	  your	  IDE’s	  build	  environment  projectenvironment                                                       ...
Leveraging	  your	  IDE’s	  build	  environment                     context  projectenvironment                           ...
Leveraging	  your	  IDE’s	  build	  environment                     context                                               ...
Leveraging	  your	  IDE’s	  build	  environment                     context                                               ...
Leveraging	  your	  IDE’s	  build	  environment                     context                                               ...
Leveraging	  your	  IDE’s	  build	  environment                     context                                               ...
Crowd-­‐sourcing                   81
“Yours	  is	  ours	  and	  mine	  is	  mine...”BUT	  HOW	  ABOUT	  PRIVACY?
Usage	  data	  sharing	  exampleimport com.mycompany.*;import org.eclipse.*;public class MyCompanyDialog extends Dialog im...
Usage	  data	  sharing	  exampleimport com.mycompany.*;import org.eclipse.*;public class MyCompanyDialog extends Dialog im...
Informa8on	  cleared	  by	  privacy	  se{ngsimport com.mycompany.*;import org.eclipse.*;public class MyCompanyDialog exten...
Effec8ve	  usage	  data	  sharedimport com.mycompany.*;import org.eclipse.*;public class MyCompanyDialog extends Dialog imp...
Effec8ve	  usage	  data	  sharedimport com.mycompany.*;import org.eclipse.*;public class MyCompanyDialog extends Dialog imp...
“Support	  your	  own	  framework.	  Live	  walk-­‐through...”RECOMMENDERS	  FOR	  ANDROID
87
SummaryIntelligent	  Code	  Comple8on                                                   Usage-­‐Driven	  Javadocs         ...
Contributors	  so	  far…Jan	   Kassens,	   	   Peter	  Schroeder,	  Daniel	  Glöckner,	  Maik	   Görtz,	  Johannes	   Lerc...
Q	  &	  A              90
Q	  &	  AIntelligent	  Code	  Comple8on                                                   Usage-­‐Driven	  Javadocs       ...
It’s	  there.hrp://eclipse.org/recommenders/            Follow	  me	  on	  twirer:	  @MarcelBruch                         ...
Eclipse Code Recommenders @ cross-event Deutsche Telekom Developer Garden TechTalk and Java User Group Darmstadt
Upcoming SlideShare
Loading in …5
×

Eclipse Code Recommenders @ cross-event Deutsche Telekom Developer Garden TechTalk and Java User Group Darmstadt

1,457 views

Published on

Code Recommenders in depth techtalk slides,

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Eclipse Code Recommenders @ cross-event Deutsche Telekom Developer Garden TechTalk and Java User Group Darmstadt

  1. 1. Eclipse CodeRecommendersIDE  2.0:  Leveraging  the  Wisdomof  the  So:ware  Engineering  Crowds dt sta alk m ar chTtw:  @MarcelBruch p  D n  Teg+:  +Marcel  Bruch r ou de r  G ar se er  G a  U lop Jav v e De
  2. 2. 2
  3. 3. Eclipse  Code  Recommenders             All Frameworks CodeCode Eclipse CodeDevelopers Who Called “new Text()” Method Also Called setText() addListener() setLayout() setFont() 89% 53% 99% 35%What Do Developers Ultimately Override After Extending This Class? 100 % overwrote PreferencePage.createContents() 96 % overwrote PreferencePage.performOk() 5 % overwrote PreferencePage.performCancel() 3
  4. 4. “Other  developers  frequently  bought  used  the  following  methods…”INTELLIGENT  CODE  COMPLETION
  5. 5. Code  Comple8on…@Overrideprotected Control createDialogArea(final Composite parent) { Composite container = (Composite) super.createDialogArea(parent); swtTextWidget = new Text(container, SWT.BORDER); swtTextWidget.| return container;} What  does  the  developer  need,  i.e.,  which  methods  should   the  code  compleLon  present  to  the  user? 5
  6. 6. All  164  Methods  of  Text  ?
  7. 7. JBuTon?  381  Methods.
  8. 8. Code  Comple8on…@Overrideprotected Control createDialogArea(final Composite parent) { final Composite container = (Composite) super.createDialogArea(parent); swtTextWidget = new Text(container, SWT.BORDER); swtTextWidget.| return container;} What  does  the  developer  need,  i.e.,  which  methods  should   the  code  compleLon  present  to  the  user? 8
  9. 9. Intelligent  Code  Comple8on …  or  just  the  three  missing  ones?   9
  10. 10. How  it  works  -­‐  in  a  nutshell 10
  11. 11. How  it  works  -­‐  in  a  nutshell Framework 10
  12. 12. How  it  works  -­‐  in  a  nutshell Framework Example   Example   ...ApplicaLon  1 ApplicaLon  n 10
  13. 13. How  it  works  -­‐  in  a  nutshell Framework Example   Example   ... ApplicaLon  1 ApplicaLon  nextract  facts  about  how  the  framework  is  reused «extends:A» «extends:A» «overrides:A.b» ... «overrides:A.d» «calls:B.c» «calls:B.c» … … 10
  14. 14. How  it  works  -­‐  in  a  nutshell Framework Example   Example   ... ApplicaLon  1 ApplicaLon  nextract  facts  about  how  the  framework  is  reused «extends:A» «extends:A» «overrides:A.b» ... «overrides:A.d» «calls:B.c» «calls:B.c» … … 10
  15. 15. How  it  works  -­‐  in  a  nutshell Framework If  you   extend  A, Example   Example   you  should   ... call  B.c ApplicaLon  1 ApplicaLon  nextract  facts  about  how  the  framework  is  reused «extends:A» «extends:A» «overrides:A.b» ... «overrides:A.d» «calls:B.c» «calls:B.c» … … 10
  16. 16. From  code  to  models... () ts en () nt Ok Co rm te fo () t() t() t() ea er t> ex on ex cr .p ni tT tF tT e. ge <i se se ge ag Pa t. t. t. t.class Example extends Page { :P n: ex ex ex ex .. Text t; in i T T T T . @Override 1 0 1 1 0 0 … void createContents() { t = new Text(); t.setText(..); .. } 0 1 0 0 0 1 …} … … … … … … … 11
  17. 17. From  code  to  models... () ts en () nt Ok Co rm te fo () t() t() t() ea er t> ex on ex cr .p ni tT tF tT e. ge <i se se ge ag Pa t. t. t. t.class Example extends Page { :P n: ex ex ex ex .. Text t; in i T T T T . @Override 1 0 1 1 0 0 … void performOk() { t.getText(); .. } 0 1 0 0 0 1 …} … … … … … … … 12
  18. 18. From  models  to  recommenda8ons... () ts en () nt Ok Co rmclass MyPage extends Page { te fo () t() t() t() ea er t> ex on ex Text t; cr .p ni tT tF tT @Override e. ge <i se se ge ag Pa t. t. t. t. void createContents() { :P n: ex ex ex ex .. t = new Text(); in i T T T T . t.|<^space> 1 0 1 ? ? ? … }} 13
  19. 19. From  models  to  recommenda8ons... () ts en () nt Ok Co rm te fo () t() t() t() ea er t> ex on ex cr .p ni tT tF tT e. ge <i se se ge ag Pa t. t. t. t. :P n: ex ex ex ex .. in i T T T T . 1 0 1 1 1 0 … 1 0 1 0 0 0 … 1 0 1 1 0 0 … 0 1 0 0 0 1 … … … … … … … … 1 0 1 ? ? ? … 14
  20. 20. From  models  to  recommenda8ons... () ts en () nt Ok Co rm te fo () t() t() t() ea er t> ex on ex cr .p ni tT tF tT e. ge <i se se ge ag Pa t. t. t. t. :P n: ex ex ex ex .. in i T T T T . 1 0 1 1 1 0 … 1 0 1 0 0 0 … 1 0 1 1 0 0 … 0 1 0 0 0 1 … … … … … … … … 1 0 1 ⅔ ? ? ? … 14
  21. 21. From  models  to  recommenda8ons... () ts en () nt Ok Co rm te fo () t() t() t() ea er t> ex on ex cr .p ni tT tF tT e. ge <i se se ge ag Pa t. t. t. t. :P n: ex ex ex ex .. in i T T T T . 1 0 1 1 1 0 … 1 0 1 0 0 0 … 1 0 1 1 0 0 … 0 1 0 0 0 1 … … … … … … … … 1 0 1 ⅔ ? ⅓ ? ? … 14
  22. 22. From  models  to  recommenda8ons... () ts en () nt Ok Co rm te fo () t() t() t() ea er t> ex on ex cr .p ni tT tF tT e. ge <i se se ge ag Pa t. t. t. t. :P n: ex ex ex ex .. in i T T T T . 1 0 1 1 1 0 … 1 0 1 0 0 0 … 1 0 1 1 0 0 … 0 1 0 0 0 1 … … … … … … … … 1 0 1 ⅔ ? ⅓ ? 0 ? … 14
  23. 23. “Welcome  to  the  forest...”CALL-­‐CHAIN  COMPLETION
  24. 24. How  to  obtain  an  instance  of...public class MyView extends ViewPart { public void updateMessage(final String newMessage) { // How do I get an instance of IStatusLineManager? final IStatusLineManager manager = | manager.setMessage(newMessage); } There is no trivial solution anymore. Again, what should code completion return?
  25. 25. What  we  need... !"#$%&( 5#(!"#$*"(#67public void updateMessage(final String newMessage) { // How do I get an instance of )!"#$*"(# final IStatusLineManager manager = this .getViewSite() 5#(+,-./8&167 .getActionBars() .getStatusLineManager(); manager.setMessage(newMessage); )+,-./0&1} 5#(*(&(213"/#4&/&5#67 )*(&(213"/#4&/&5# 17
  26. 26. 01/1 %1"-( 2B&.#)&(& ,#."1- 2B&.# )#*"+# 01BF15"(# ,#+(&-./# D#-7 201-("67(1 E"5(#-# 201-C.7&91-3/#B#-( 234(#-5"1- E&A17( ?=#// 2D3 )"5F/&A ?+1//:& 01-(1/ 23>"(1%&( 2D#-7D&-&.# 2?#*"+#E1+&(1!"#$%&( 28>&F(&6/# 2?#/#+91- 2;1<6#-+=;"->1$ 2G&*".&91-H"5(1A 2;1<6#-+=%&( 2;1<"-.?#( 2;1<6#-+=%&(?"(# 2@#A:"->"-.?#*"+# 234(#-5"1-I&+<# 2;1<6#-+=%&.# 2!"#$,#J##-+# 2!"#$?"(# 2?#/#+91-%1*"># 2!"#$%&( 23>"(1,#J##-+# 2;1<6#-+=;"->1$ 2%&(?#*"+# 2;1<6#-+= 2?#/#+91-?#*"+# 2?#*"+#E1+&(1 2D#-7D&-&.# 28+91-:&5 2?(&(75E"-#D&-&.# 28+91- 2I11/:&D&-&.#
  27. 27. Tools  Outline 19
  28. 28. Tools  OutlineIntelligent  Code  Comple8on 19
  29. 29. Tools  OutlineIntelligent  Code  Comple8on Smart  Bug  Detec8on What  have  I  missed? 19
  30. 30. Tools  OutlineIntelligent  Code  Comple8on Smart  Bug  Detec8on What  have  I  missed? Extended  Documenta8on 19
  31. 31. Tools  OutlineIntelligent  Code  Comple8on Smart  Bug  Detec8on What  have  I  missed? Extended  Documenta8on Code  Example  Recommender How  do  I  get  an  instance  of…? 19
  32. 32. Tools  OutlineIntelligent  Code  Comple8on Smart  Bug  Detec8on What  have  I  missed? Stacktrace  Search  Engine Extended  Documenta8on Code  Example  Recommender What  caused  that  stacktrace? How  do  I  get  an  instance  of…? 19
  33. 33. Tools  OutlineIntelligent  Code  Comple8on Smart  Bug  Detec8on What  have  I  missed? Stacktrace  Search  Engine Extended  Documenta8on Code  Example  Recommender What  caused  that  stacktrace? How  do  I  get  an  instance  of…? 19
  34. 34. “The  good  ones  in  the  crock,  the  bad  ones  in…  the  problem  view.”SMART  BUG  DETECTION  –  DRIVEN  BY  REAL  USAGES
  35. 35. What’s  wrong  with  this  code? “Hello!” “id” 21
  36. 36. At  run8me  you  get… 22
  37. 37. ...and  a  lengthy  stacktraceorg.eclipse.core.run8me.Asser8onFailedExcep8on:  null  argument: at  org.eclipse.core.run8me.Assert.isNotNull(Assert.java:85) at  org.eclipse.core.run8me.Assert.isNotNull(Assert.java:73) at  org.eclipse.jface.wizard.Wizard.createPageControls(Wizard.java:174) at  org.eclipse.jface.wizard.WizardDialog.createPageControls(WizardDialog.java:734) at  org.eclipse.jface.wizard.WizardDialog.setWizard(WizardDialog.java:1162) at  org.eclipse.jface.wizard.WizardDialog.updateForPage(WizardDialog.java:1221) at  org.eclipse.jface.wizard.WizardDialog.access$4(WizardDialog.java:1218) at  org.eclipse.jface.wizard.WizardDialog$6.run(WizardDialog.java:1207) at  org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at  org.eclipse.jface.wizard.WizardDialog.showPage(WizardDialog.java:1205) at  org.eclipse.ui.internal.dialogs.ImportExportPage.treeDoubleClicked(ImportExportPage.java) at  org.eclipse.ui.internal.dialogs.ImportPage$2.doubleClick(ImportPage.java:72) at  org.eclipse.jface.viewers.StructuredViewer$1.run(StructuredViewer.java:824) at  org.eclipse.core.run8me.SafeRunner.run(SafeRunner.java:42) at  org.eclipse.ui.internal.JFaceU8l$1.run(JFaceU8l.java:49) at  org.eclipse.jface.u8l.SafeRunnable.run(SafeRunnable.java:175) at  org.eclipse.jface.viewers.StructuredViewer.fireDoubleClick(StructuredViewer.java:822) at  org.eclipse.jface.viewers.AbstractTreeViewer.handleDoubleSelect(AbstractTreeViewer.java) at  org.eclipse.jface.viewers.StructuredViewer$4.widgetDefaultSelected(StructuredViewer.java) ... 23
  38. 38. So what have we missed? 24
  39. 39. If  all  of  your  colleagues  do  it  –  why  don’t  you? 25
  40. 40. If  all  of  your  colleagues  do  it  –  why  don’t  you? 25
  41. 41. How  to  detect  such  wrong  uses? 26
  42. 42. How  to  detect  such  wrong  uses? 26
  43. 43. How  to  detect  such  wrong  uses? 26
  44. 44. How  to  detect  such  wrong  uses? 26
  45. 45. How  to  detect  such  wrong  uses?That’s  “strange” 26
  46. 46. How  to  detect  such  wrong  uses? 27
  47. 47. Just  one  formula… 0 .5 .9 1x = {observed method calls on a variable}E(x) = {exact similar usages for variables of type x in the code base}A(x) = {almost similar usages, i.e., x+1 method call} 28
  48. 48. Missing  Calls  Detector  in  Eclipse 29
  49. 49. Applied  on  Eclipse  3.5... 30
  50. 50. “Developers  who  bought  overwrote  this  method  typically  also  overwrote...”USAGE-­‐DRIVEN  JAVADOC
  51. 51. In  good  documenta8on  we  trust.../** * Rollsback the transaction if any and clears different lists to * start with an empty resource again. * Note that the super.doUnload is not called because that clears * the list resulting in all kinds of undesirable inverseremoves. */@Overrideprotected void doUnload() { super.doUnload();} 32
  52. 52. In  good  documenta8on  we  trust.../** * Rollsback the transaction if any and clears different lists to * start with an empty resource again. * Note that the super.doUnload is not called because that clears * the list resulting in all kinds of undesirable inverseremoves. */@Overrideprotected void doUnload() { super.doUnload();} 32
  53. 53. In  good  documenta8on  we  trust.../** * Rollsback the transaction if any and clears different lists to * start with an empty resource again. * Note that the super.doUnload is not called because that clears * the list resulting in all kinds of undesirable inverseremoves. */@Overrideprotected void doUnload() { super.doUnload();} No?  Are  you  sure? 32
  54. 54. In  good documenta8on  we  trust... good  /** * Rollsback the transaction if any and clears different lists to * start with an empty resource again. * Note that the super.doUnload is not called because that clears * the list resulting in all kinds of undesirable inverseremoves. */@Overrideprotected void doUnload() { super.doUnload();} No?  Are  you  sure? 32
  55. 55. Genera8ng  high-­‐quality  API  documenta8on 33
  56. 56. Genera8ng  high-­‐quality  API  documenta8on /** * The number of questions. */ private int numberOfQuestions; /** * Sets the number of questions. * * @param numberOfQuestions the number of questions * @throws IllegalArgumentException the illegal argument exception */ public void setNumberOfQuestions(int numberOfQuestions) throws IllegalArgumentException { if (numberOfQuestions < 0) { throw new IllegalArgumentException("numberOfQuestions < 0"); } this.numberOfQuestions = numberOfQuestions; } 33
  57. 57. Genera8ng  high-­‐quality  API  documenta8on /** * The number of questions. */ private int numberOfQuestions; /** * Sets the number of questions. * * @param numberOfQuestions the number of questions * @throws IllegalArgumentException the illegal argument exception */ public void setNumberOfQuestions(int numberOfQuestions) throws IllegalArgumentException { if (numberOfQuestions < 0) { throw new IllegalArgumentException("numberOfQuestions < 0"); } this.numberOfQuestions = numberOfQuestions; } 33
  58. 58. Genera8ng  high-­‐quality  API  documenta8on /** * The number of questions. */ private int numberOfQuestions; /** * Sets the number of questions. * * @param numberOfQuestions the number of questions * @throws IllegalArgumentException the illegal argument exception */ public void setNumberOfQuestions(int numberOfQuestions) throws IllegalArgumentException { if (numberOfQuestions < 0) { throw new IllegalArgumentException("numberOfQuestions < 0"); } this.numberOfQuestions = numberOfQuestions; } 33
  59. 59. Genera8ng  high-­‐quality  API  documenta8on /** * The number of questions. */ private int numberOfQuestions; /** * Sets the number of questions. * * @param numberOfQuestions the number of questions * @throws IllegalArgumentException the illegal argument exception */ public void setNumberOfQuestions(int numberOfQuestions) throws IllegalArgumentException { if (numberOfQuestions < 0) { throw new IllegalArgumentException("numberOfQuestions < 0"); } this.numberOfQuestions = numberOfQuestions; } 33
  60. 60. Genera8ng  high-­‐quality  API  documenta8on /** * The number of questions. */ private int numberOfQuestions; /** * Sets the number of questions. * * @param numberOfQuestions the number of questions * @throws IllegalArgumentException the illegal argument exception */ public void setNumberOfQuestions(int numberOfQuestions) throws IllegalArgumentException { if (numberOfQuestions < 0) { throw new IllegalArgumentException("numberOfQuestions < 0"); } this.numberOfQuestions = numberOfQuestions; } 33
  61. 61. Genera8ng  high-­‐quality  API  documenta8on /** * The number of questions. */ private int numberOfQuestions; /** * Sets the number of questions. * * @param numberOfQuestions the number of questions * @throws IllegalArgumentException the illegal argument exception */ public void setNumberOfQuestions(int numberOfQuestions) throws IllegalArgumentException { if (numberOfQuestions < 0) { throw new IllegalArgumentException("numberOfQuestions < 0"); } this.numberOfQuestions = numberOfQuestions; } 33
  62. 62. Genera8ng  high-­‐quality  API  documenta8on /** * The number of questions. */ private int numberOfQuestions; /** * Sets the number of questions. * * @param numberOfQuestions the number of questions * @throws IllegalArgumentException the illegal argument exception */ public void setNumberOfQuestions(int numberOfQuestions) throws IllegalArgumentException { if (numberOfQuestions < 0) { throw new IllegalArgumentException("numberOfQuestions < 0"); } this.numberOfQuestions = numberOfQuestions; } 33
  63. 63. Genera8ng  high-­‐quality API  documenta8on high-­‐quality   /** * The number of questions. */ private int numberOfQuestions; /** * Sets the number of questions. * * @param numberOfQuestions the number of questions * @throws IllegalArgumentException the illegal argument exception */ public void setNumberOfQuestions(int numberOfQuestions) throws IllegalArgumentException { if (numberOfQuestions < 0) { throw new IllegalArgumentException("numberOfQuestions < 0"); } this.numberOfQuestions = numberOfQuestions; } 34
  64. 64. Genera8ng  high-­‐quality  API  documenta8on /** * The number of questions. */ private int numberOfQuestions; /** * Sets the number of questions. * * @param numberOfQuestions the number of questions * @throws IllegalArgumentException the illegal argument exception */ public void setNumberOfQuestions(int numberOfQuestions) throws IllegalArgumentException { if (numberOfQuestions < 0) { throw new IllegalArgumentException("numberOfQuestions < 0"); } this.numberOfQuestions = numberOfQuestions; } 34
  65. 65. What  people  say  about  JAutodoc... 35
  66. 66. What  people  say  about  JAutodoc...User: Anonymous Rating: 9 2009-08-02 11:32:37Wow exactly what I needed! 35
  67. 67. What  people  say  about  JAutodoc...User: Anonymous Rating: 9 2009-08-02 11:32:37Wow exactly what I needed!User: Anonymous Rating: 9 2009-02-13 19:58:32Thank you... this plugin rocks! 35
  68. 68. What  people  say  about  JAutodoc...User: Anonymous Rating: 9 2009-08-02 11:32:37Wow exactly what I needed!User: Anonymous Rating: 9 2009-02-13 19:58:32Thank you... this plugin rocks!User: Anonymous Rating: 9 2009-02-13 19:58:32Works perfectly. Smarter than I expected! 35
  69. 69. What  people  say  about  JAutodoc...User: Anonymous Rating: 9 2009-08-02 11:32:37Wow exactly what I needed!User: Anonymous Rating: 9 2009-02-13 19:58:32Thank you... this plugin rocks!User: Anonymous Rating: 9 2009-02-13 19:58:32Works perfectly. Smarter than I expected! WTH?  What  did  you  expect?! 35
  70. 70. How  Recommenders  is  coming  to  rescue... 36
  71. 71. Some  facts  about  the documenta8on  of  overridable  methodsOverridable 2.074Overridden 623 0 700 1400 2100 37
  72. 72. What  clients  do  with  your  API... Overridden 623 Documented * 155 0 325 650*  documented  as  overridable  by  using  phrases  like  “clients  may/should/must  override/extend  this  method” 38
  73. 73. What  clients  do  with  your  API... Overridden 623 Documented * 155 478 0 325 650*  documented  as  overridable  by  using  phrases  like  “clients  may/should/must  override/extend  this  method” 38
  74. 74. What  documenta8on  would  you  expect  when   subclassing  Dialog? package org.eclipse.recommenders.examples.demo; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.window.IShellProvider; public class MyDialog extends Dialog { protected MyDialog(final IShellProvider parentShell) { super(parentShell); } } 39
  75. 75. What  Javadoc  gives  you... 40
  76. 76. What  Javadoc  gives  you...A  dialog  is  a  specialized  window  used  for  narrow-­‐focused  communica8on  with  the  user.   40
  77. 77. What  Javadoc  gives  you...A  dialog  is  a  specialized  window  used  for  narrow-­‐focused  communica8on  with  the  user.  Dialogs  are  usually  modal.  Consequently,  it  is  generally  bad  prac8ce  to  open  a  dialog  without  a  parent.  A  modal  dialog  without  a  parent  is  not  prevented  from  disappearing  behind  the  applica8ons  other  windows,  making  it  very  confusing  for  the  user.  If  there  is  more  than  one  modal  dialog  is  open  the  second  one  should  be  parented  off  of  the  shell  of  the  first  one  otherwise  it  is  possible  that  the  OS  will  cus  to  the  first  dialog  poten8ally  blocking  the  UI.   40
  78. 78. What  Javadoc  gives  you... A  dialog  is  a  specialized  window  used  for  narrow-­‐focused   communica8on  with  the  user.   Dialogs  are  usually  modal.  Consequently,  it  is  generally   bad  prac8ce  to  open  a  dialog  without  a  parent.  A  modal   dialog  without  a  parent  is  not  prevented  from   But what are the disappearing  behind  the  applica8ons  other  windows,   making  it  very  confusing  for  the  user.  hot-spots of Dialog? If  there  is  more  than  one  modal  dialog  is  open  the  second   one  should  be  parented  off  of  the  shell  of  the  first  one   otherwise  it  is  possible  that  the  OS  will  cus  to  the  first   dialog  poten8ally  blocking  the  UI.   40
  79. 79. What  code  comple8on  offers... 41
  80. 80. What  code  comple8on  offers...Which of the 56 methods should we override? 41
  81. 81. Recommending  method  overrides...public class MyDialog extends Dialog { 42
  82. 82. Recommending  Self-­‐Callspublic class MyDialog extends Dialog { @Override protected Control createDialogArea(Composite parent) { 43
  83. 83. Mining  for  Subclassing  parernspublic class MyViewerComparator extends ViewerComparator { 44
  84. 84. Mining  example  code  snippetspublic class MyDialog extends Dialog { @Override protected Control createDialogArea(Composite parent) { 45
  85. 85. Scarered  Resources 46
  86. 86. Scarered  Resources 46
  87. 87. Scarered  Resources 46
  88. 88. Extended  Documenta8on  Plasorm + Machine Learning 47
  89. 89. Extended  Documenta8on 48
  90. 90. How  it  works  -­‐  in  a  nutshell 49
  91. 91. “Why  is  Google  Codesearch  not  ‘google  for  code  search’?  ”CODE-­‐SEARCH  ENGINES  LIFT  OFF
  92. 92. How  many  request  per  minutes  do code  search  engines  have? 51
  93. 93. 20Number  for  koders.com  in  2009  according  to    “Analyzing  and  mining  a  code  search  engine  usage  log” hrp://dx.doi.org/10.1007/s10664-­‐010-­‐9144-­‐6 52
  94. 94. Naviga8ng  the  API  jungle…private CompilationUnit createCompilationUnit(String source) { // how can I create and configure an ASTParser? ASTParser parser = null; parser.setSource(source.toCharArray()); // ASTParser --> CompilationUnit: how? CompilationUnit cu = null; return cu;} 53
  95. 95. Naviga8ng  the  API  jungle… private CompilationUnit createCompilationUnit(String source) { // how can I create and configure an ASTParser? ASTParser parser = null; parser.setSource(source.toCharArray()); // ASTParser --> CompilationUnit: how? CompilationUnit cu = null; return cu; } How  to  solveString  -­‐>  ASTParser  -­‐>  CompilaLonUnit? 53
  96. 96. When  asking  Google  code  search... 54
  97. 97. When  asking  Google  code  search... 54
  98. 98. When  asking  Google  code  search... 54
  99. 99. When  asking  Google  code  search... 54
  100. 100. Why? 55
  101. 101. Why? Text-based retrieval! 55
  102. 102. Why? Text-based retrieval! Inexpressive query language! 55
  103. 103. Why? Text-based retrieval! Inexpressive query language! Ignores prior knowledge! 55
  104. 104. Why? Text-based retrieval! Inexpressive query language! Ignores prior knowledge! License Issues! 55
  105. 105. Example  code  search  enginepublic class MyJavaEditor extends EditorPart { private CompilationUnit createCompilationUnit(String source) { // how can I create and configure an ASTParser? ASTParser parser = null; parser.setSource(source.toCharArray()); // ASTParser --> CompilationUnit: how? CompilationUnit cu = null; return cu; } 56
  106. 106. Example  code  search  enginepublic class MyJavaEditor extends EditorPart { private CompilationUnit createCompilationUnit(String source) { // how can I create and configure an ASTParser? ASTParser parser = null; parser.setSource(source.toCharArray()); Query // ASTParser --> CompilationUnit: how? CompilationUnit cu = null; return cu; } 56
  107. 107. “Why  is  Google  Codesearch  not  ‘google  for  code  search’?  ”LEVERAGING  USER  FEEDBACK  TOIMPROVE  CODE  SEARCH  ENGINES
  108. 108. Leveraging  user  feedback 58
  109. 109. Leveraging  user  feedback 58
  110. 110. Refine  the  ranking  based  on  feedback 59
  111. 111. Refine  the  ranking  based  on  feedback 59
  112. 112. Learning  how  to  rank 60
  113. 113. Ranking  the  examples 61
  114. 114. Ranking  the  examplesdocument 61
  115. 115. Ranking  the  examplesdocument query 61
  116. 116. Ranking  the  examplesdocument query feature-­‐score  i [0..1] 61
  117. 117. Ranking  the  examplesdocument query weight   feature-­‐score  i (-­‐∞..+∞) [0..1] 61
  118. 118. Upda8ng  the  feature  weights... 62
  119. 119. Upda8ng  the  feature  weights... 62
  120. 120. Upda8ng  the  feature  weights...10.000  ∗ 62
  121. 121. Benefits  of  automated  tweaking#  kendall’s  ι #  queries baseline click-­‐through 63
  122. 122. Interac8ons  diagram Client Server 1 Developer «triggers»2 Search Invocation 3 Code Snippet Ranking Incomplete Source Code Query Ranking Search Function Index4 Code Snippet Presentation Code «updates» Examples 5 Feedback Processing Code Code Summarization Highlighter Weights Learning Clickthrough Cli kth h Function data 64
  123. 123. Applica8on  scenarios  for  your    company Open  Source Repositories 65
  124. 124. Applica8on  scenarios  for  your    company Open  Source Repositories Company Repositories 65
  125. 125. Applica8on  scenarios  for  your    company Open  Source Repositories Company Repositories 65
  126. 126. Applica8on  scenarios  for  your    company Open  Source Repositories Company Repositories 65
  127. 127. Applica8on  scenarios  for  your    company Open  Source Repositories Company Repositories 65
  128. 128. Applica8on  scenarios  for  your    company Open  Source Repositories Company Repositories Filesystem   65
  129. 129. “People  that  bought  had  this  NullPointerExcepKon,  made  this  mistake:...”WHAT  CAUSED  THAT  STACKTRACE?
  130. 130. So  far  we  have… 67
  131. 131. So  far  we  have…Intelligent  Code  Comple8on 67
  132. 132. So  far  we  have…Intelligent  Code  Comple8on Extended  Documenta8on 67
  133. 133. So  far  we  have…Intelligent  Code  Comple8on Extended  Documenta8on Code  Example  Recommender How  do  I  get  an  instance  of…? 67
  134. 134. So  far  we  have…Intelligent  Code  Comple8on Extended  Documenta8on Smart  Bug  Detec8on Code  Example  Recommender What  have  I  missed? How  do  I  get  an  instance  of…? 67
  135. 135. But  what  if  you  get  this? 68
  136. 136. Debugging  –  the  old  way 69
  137. 137. Debugging  –  the  old  way 69
  138. 138. Debugging  –  the  old  way 70
  139. 139. But  more  ozen  we  get… 71
  140. 140. How  can  we  fix  that?  Don’t  stacktraces  share  some  commonali8es? 72
  141. 141. How  can  we  fix  that?  Don’t  stacktraces  share  some  commonali8es?org.eclipse.swt.SWTException: Invalid thread access at org.eclipse.swt.SWT.error(SWT.java:3884) at org.eclipse.swt.SWT.error(SWT.java:3799) at org.eclipse.swt.SWT.error(SWT.java:3770) at org.eclipse.swt.widgets.Widget.error(Widget.java:463) at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355) at org.eclipse.swt.widgets.ProgressBar.setSelection(ProgressBar.java:317) at org.eclipselabs.cr.stacktraces.demo.ThreadDemo$1.run(Unknown Source) at java.lang.Thread.run(Thread.java:619) 72
  142. 142. How  can  we  fix  that?  Don’t  stacktraces  share  some  commonali8es?org.eclipse.swt.SWTException: Invalid thread access at org.eclipse.swt.SWT.error(SWT.java:3884) at org.eclipse.swt.SWT.error(SWT.java:3799) at org.eclipse.swt.SWT.error(SWT.java:3770) at org.eclipse.swt.widgets.Widget.error(Widget.java:463) at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355) at org.eclipse.swt.widgets.ProgressBar.setSelection(ProgressBar.java:317) at org.eclipselabs.cr.stacktraces.demo.ThreadDemo$1.run(Unknown Source) at java.lang.Thread.run(Thread.java:619) 72
  143. 143. How  can  we  fix  that?  Don’t  stacktraces  share  some  commonali8es? Excep8onType  Feature (evaluates  iden8cal  excep8on  type) Message  Similarity  Feature (counts  of  similar  words)org.eclipse.swt.SWTException: Invalid thread access at org.eclipse.swt.SWT.error(SWT.java:3884) at org.eclipse.swt.SWT.error(SWT.java:3799) at org.eclipse.swt.SWT.error(SWT.java:3770) at org.eclipse.swt.widgets.Widget.error(Widget.java:463) at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355) at org.eclipse.swt.widgets.ProgressBar.setSelection(ProgressBar.java:317) at org.eclipselabs.cr.stacktraces.demo.ThreadDemo$1.run(Unknown Source) at java.lang.Thread.run(Thread.java:619) TraceDiff  Similarity  Feature (counts  similar  stackframes  per  trace) 72
  144. 144. How  about  stacktraces.org? 73
  145. 145. Applica8on  scenarios  for  your    company Open  Source Repositories Company Repositories 74
  146. 146. “IDE  2.0?  Leveraging  the  wisdom  of  the  (Eclipse)  community…”ECLIPSE  CODE  RECOMMENDERS
  147. 147. A  developer’s  day... Switching Applications Edit Code Searching Code Testing NavigateDependenciesReading API Doc Comprehend Task Handling Comprehending Interruptions Code Source:  Eclipse  Mylyn  Developer  Techtalk  2011,  IEEE  TSE,  Vol.  32,  No.  12,  2006 76
  148. 148. From  IDE  1.0  to  IDE  2.0 77
  149. 149. From  IDE  1.0  to  IDE  2.0 77
  150. 150. Where  does  IDE  2.0  improve  the  process? Edit Code Testing Comprehend Task Handling Interruptions … 78
  151. 151. Build  directly  from  version  control P2 79
  152. 152. Leveraging  your  IDE’s  build  environment 80
  153. 153. Leveraging  your  IDE’s  build  environment projectenvironment 80
  154. 154. Leveraging  your  IDE’s  build  environment context projectenvironment 80
  155. 155. Leveraging  your  IDE’s  build  environment context object usage projectenvironment 80
  156. 156. Leveraging  your  IDE’s  build  environment context object usage project selectedenvironment proposals 80
  157. 157. Leveraging  your  IDE’s  build  environment context object usage project selectedenvironment proposals click feedback 80
  158. 158. Leveraging  your  IDE’s  build  environment context object usage project selectedenvironment proposals click feedback Stacktraces 80
  159. 159. Crowd-­‐sourcing 81
  160. 160. “Yours  is  ours  and  mine  is  mine...”BUT  HOW  ABOUT  PRIVACY?
  161. 161. Usage  data  sharing  exampleimport com.mycompany.*;import org.eclipse.*;public class MyCompanyDialog extends Dialog implements ICompanyService { MyCompanyController controller = new MyCompanyController(); @Override protected Control createDialogArea(Composite parent) { Composite container = (Composite) super.createDialogArea(parent); Button sync = new Button(container, SWT.CHECK); sync.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { if (sync.getSelection()) { controller.synchronize(); // lot of more things done with controller } } }); return container; } @Override public void myCompanyServiceMethod() { controller.setup(); } 83}
  162. 162. Usage  data  sharing  exampleimport com.mycompany.*;import org.eclipse.*;public class MyCompanyDialog extends Dialog implements ICompanyService { MyCompanyController controller = new MyCompanyController(); @Override protected Control createDialogArea(Composite parent) { Composite container = (Composite) super.createDialogArea(parent); Button sync = new Button(container, SWT.CHECK); sync.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { if (sync.getSelection()) { controller.synchronize(); // lot of more things done with controller } } }); return container; } @Override public void myCompanyServiceMethod() { controller.setup(); } 83}
  163. 163. Informa8on  cleared  by  privacy  se{ngsimport com.mycompany.*;import org.eclipse.*;public class MyCompanyDialog extends Dialog implements ICompanyService { MyCompanyController controller = new MyCompanyController(); @Override protected Control createDialogArea(Composite parent) { Composite container = (Composite) super.createDialogArea(parent); Button sync = new Button(container, SWT.CHECK); sync.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { if (sync.getSelection()) { controller.synchronize(); // lot of more things done with controller } } }); return container; } @Override public void myCompanyServiceMethod() { controller.setup(); } 84}
  164. 164. Effec8ve  usage  data  sharedimport com.mycompany.*;import org.eclipse.*;public class MyCompanyDialog extends Dialog implements ICompanyService { MyCompanyController controller = new MyCompanyController(); @Override protected Control createDialogArea(Composite parent) { Composite container = (Composite) super.createDialogArea(parent); Button sync = new Button(container, SWT.CHECK); sync.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { if (sync.getSelection()) { controller.synchronize(); } } }); return container; } @Override public void myCompanyServiceMethod() { controller.setup(); } 85}
  165. 165. Effec8ve  usage  data  sharedimport com.mycompany.*;import org.eclipse.*;public class MyCompanyDialog extends Dialog implements ICompanyService { MyCompanyController controller = new MyCompanyController(); @Override protected Control createDialogArea(Composite parent) { Composite container = (Composite) super.createDialogArea(parent); Button sync = new Button(container, SWT.CHECK); sync.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { if (sync.getSelection()) { controller.synchronize(); } Only  the  informaLon  how  you   }); } used  Eclipse  is  shared. return container; } @Override public void myCompanyServiceMethod() { controller.setup(); } 85}
  166. 166. “Support  your  own  framework.  Live  walk-­‐through...”RECOMMENDERS  FOR  ANDROID
  167. 167. 87
  168. 168. SummaryIntelligent  Code  Comple8on Usage-­‐Driven  Javadocs Stacktrace  Search  Engine Smart  Bug  Detec8on Code  Example  Recommender What  caused  that  stacktrace? What  have  I  missed? How  do  I  get  an  instance  of…? 88
  169. 169. Contributors  so  far…Jan   Kassens,     Peter  Schroeder,  Daniel  Glöckner,  Maik   Görtz,  Johannes   Lerch,  Johannes  Born,  Mohsen  Parisay,  Andreas  Sewe,  SebasLan  Ahlfeld,  SebasLan  Kasten,  Daniel  Staesche,  David  Kalnischkies,   SebasLan   Wörner,   Boyan   Yurukov,   Jan   Stolzenburg,   Nico   Wombacher,   Dirk  Kröhan,   Florianrian   Jakob,   Julius   Rückert,   Steffen   Remus,   Christopher   Mann,   Stefan   Henss,  Andreas   Kaluza,   Nikolay   Shindov,   Michael   Novotny,   KrisLn   Arand,   Sinem   Emeröz,   Michael  Kutschke,   SebasLan   Proksch,   Tomasz   Kalbarczyk,   Marko   MarLn,   Sheip   Dargutev,   David  Schuld,   Jens   Krause,   KrisLjan   Madunic,   Daniel   Brandtner,   Roman   GeTo,   ChrisLan   Kilb,  Johannes   Kastl,   Dennis   Sänger,   Annie   Liu,   Markus   Migenda,   Tjark   Vandommele,   SebasLan  Denel,  Florian  Nöll,   Gary  Fritz,  Dennis  Siebert,  Peter  Sinzig,  Laura  Altmüller,  Paul  Schatygin,  Jan-­‐Michael  Heller,  Minh  Hoang  Nguyen,  Sascha  Nordquist,  Paul  Emmanuel  Faidherbe,  ... 89
  170. 170. Q  &  A 90
  171. 171. Q  &  AIntelligent  Code  Comple8on Usage-­‐Driven  Javadocs Stacktrace  Search  Engine Smart  Bug  Detec8on Code  Example  Recommender What  caused  that  stacktrace? What  have  I  missed? How  do  I  get  an  instance  of…? 91
  172. 172. It’s  there.hrp://eclipse.org/recommenders/ Follow  me  on  twirer:  @MarcelBruch google+:  +Marcel  Bruch 92

×