Error Prone Support workshop - internal conference

RickOssendrijver1 25 views 69 slides Jul 06, 2024
Slide 1
Slide 1 of 69
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62
Slide 63
63
Slide 64
64
Slide 65
65
Slide 66
66
Slide 67
67
Slide 68
68
Slide 69
69

About This Presentation

-


Slide Content

1

2
Agenda
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Agenda
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduce Error Prone and Refaster (10 min)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)6
Error Prone Support (5 min)5
Picnic and its code quality1
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!
Standardization and repetitive discussions
Introduce Error Prone and Refaster2
Refaster - Workshop part 14
Error Prone - Workshop part 25
Error Prone Support3
Using Error Prone in practice!6Using Error Prone in practice! (15 min)5Using Error Prone in practice!6Using Error Prone in practice! (15 min)5Using Error Prone in practice! (15 min)5Using Error Prone in practice!6Using Error Prone in practice! (15 min)7Error Prone @ Picnic

3
Understanding code
“developers on average spend as
much as 58% of their time
comprehending existing source code”
- Felienne Hermans

4

5
Code reviews and discussions

6

7
Tools
Google/google-java-format
Reformats Java source code to comply
with Google Java Style.
checkstyle/checkstyle
Helps programmers write Java code
that adheres to a coding standard.
spotbugs/spotbugs
A tool for static analysis to look
for bugs in Java code.
SonarSource/sonarqube
Continuous Inspection.

8
Agenda
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Agenda
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduce Error Prone and Refaster (10 min)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)6
Error Prone Support (5 min)5
Picnic and its code quality1
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!
Standardization and repetitive discussions
Introduce Error Prone and Refaster2
Refaster - Workshop part 14
Error Prone - Workshop part 25
Error Prone Support3
Using Error Prone in practice!6Using Error Prone in practice! (15 min)5Using Error Prone in practice!6Using Error Prone in practice! (15 min)5Using Error Prone in practice! (15 min)5Using Error Prone in practice!6Using Error Prone in practice! (15 min)7Error Prone @ Picnic

9
Open-source static analysis
Compiler plugin
500+ Error Prone checks
Complex
Error Prone
Google/error-prone
Catch common Java mistakes
as compile-time errors

10
Refaster
Examples from: http://errorprone.info/docs/refaster
Define refactorings with templates.
becomes
becomes

11
Demo
Let’s demonstrate!
https://github.com/rickie/error-prone-demo

12
Maven profile 1

13
Maven profile 2

14
Demo
Let’s demonstrate!
https://github.com/rickie/error-prone-demo

15
Bug patterns
https://errorprone.info/bugpatterns

16
Error Prone as superpower

17

18
Error Prone as superpower
Input:
Output:

19
Agenda
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Agenda
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduce Error Prone and Refaster (10 min)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)6
Error Prone Support (5 min)5
Picnic and its code quality1
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!
Standardization and repetitive discussions
Introduce Error Prone and Refaster2
Refaster - Workshop part 14
Error Prone - Workshop part 25
Error Prone Support3
Using Error Prone in practice!6Using Error Prone in practice! (15 min)5Using Error Prone in practice!6Using Error Prone in practice! (15 min)5Using Error Prone in practice! (15 min)5Using Error Prone in practice!6Using Error Prone in practice! (15 min)7Error Prone @ Picnic

20
Picnic open-sourced: Error Prone Support!
900+ Refaster rules
40+ Error Prone bug checks
Picnic-opinionated set of rules
Migrations
https://error-prone.picnic.tech

21
Picnic’s Error Prone Support
Running Refaster rules
Test support
Improved reporting
Documentation

22
Error Prone Support website
https://error-prone.picnic.tech

23
Agenda
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Agenda
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduce Error Prone and Refaster (10 min)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)6
Error Prone Support (5 min)5
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!
Standardization and repetitive discussions
Introduce Error Prone and Refaster2
Refaster - Workshop part 14
Error Prone - Workshop part 25
Error Prone Support3
Using Error Prone in practice!6Using Error Prone in practice! (15 min)5Using Error Prone in practice!6Using Error Prone in practice! (15 min)5Using Error Prone in practice! (15 min)5Using Error Prone in practice!6Using Error Prone in practice! (15 min)7Error Prone @ Picnic
1

24
Deep dive Refaster
-Background information

-Goals

-How does Refaster work?

-Advanced features

25
Refaster
-2015 - Louis Wasserman (source)

-Two tools

-Closed source

26

27
Deep dive Refaster
Goals of Refaster (source):
-Scalability
-Expressivity
-Usability
When to use Refaster? (docs)

-Method A to method B.

-Migrate a fluent sequence of method invocations to some other
pattern.

-Migrate a sequence of consecutive statements to an alternative.

28
Running Refaster

29
Running Refaster - The Picnic Way
Link to an example configuration in Error Prone Support

30
Running Refaster - The Picnic Way
Refaster runner - `pom.xml` in Error Prone Support

31
Refaster @ Picnic

32
Advanced Refaster features

33
Multiple
`@BeforeTemplate`s

34
Refaster#anyOf

35
@AlsoNegation

36
Import policies

IMPORT_TOP_LEVEL

IMPORT_CLASS_DIRECTLY

STATIC_IMPORT_ALWAYS

37
Block Template

38
@Placeholder

39
Argument types

40
Workshop Refaster
60+ minutes

Tip: use the slides
PicnicSupermarket/
error-prone-support
branch: workshop
Workshop README

41
Agenda
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Agenda
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduce Error Prone and Refaster (10 min)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)6
Error Prone Support (5 min)5
Picnic and its code quality1
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!
Standardization and repetitive discussions
Introduce Error Prone and Refaster2
Refaster - Workshop part 14
Error Prone - Workshop part 25
Error Prone Support3
Using Error Prone in practice!6Using Error Prone in practice! (15 min)5Using Error Prone in practice!6Using Error Prone in practice! (15 min)5Using Error Prone in practice! (15 min)5Using Error Prone in practice!6Using Error Prone in practice! (15 min)7Error Prone @ Picnic

42
Deep dive Error Prone
-Background

-How to write a BugPattern?

-Automatically fixing code

-How to test a BugPattern?

43
Error Prone background
-2012 - Edward Aftandilian

-Code review and unit testing

-Subclass JavaCompiler

-CompilationUnit level
Source: Error Prone paper

44
Rules for an Error Prone check
1.The bug should be easy to understand.

2.The fix should be easy to make.

3.No false positives.

4.The bug should represent a correctness issue.

5.The bug should occur with a small but noticeable frequency.
https://errorprone.info/docs/criteria

45
How does Error Prone work?
Java code Abstract Syntax Tree Tree Node

46
Abstract Syntax Tree

47
Abstract Syntax Tree

48
Creating a BugChecker

49
Automatically fixing code!
Flagging vs. Fixing

50

51
Testing our BugChecker

52
Testing our
BugChecker

53
Refaster vs. Error Prone
Easy: work with
concrete syntax
Complex: AST
manipulation code
Limited
expressiveness
Full AST available
Refactoring only Also flags
without suggestions

54
Workshop part 2 - Error Prone
60 minutes

Prize

Workshop README

55
Agenda
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Agenda
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduce Error Prone and Refaster (10 min)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)6
Error Prone Support (5 min)5
Picnic and its code quality1
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!
Standardization and repetitive discussions
Introduce Error Prone and Refaster2
Refaster - Workshop part 14
Error Prone - Workshop part 25
Error Prone Support3
Using Error Prone in practice!6Using Error Prone in practice! (15 min)5Using Error Prone in practice!6Using Error Prone in practice! (15 min)5Using Error Prone in practice! (15 min)5Using Error Prone in practice!6Using Error Prone in practice! (15 min)7Error Prone @ Picnic

56
Roadmap to Enable Error Prone
Level 1:
Disable everything
Level 2:
Selectively enable a
few ERROR checks

Level 3:
Enable all default
ERROR checks

57
Demo: introducing Error Prone in
practice!

58
Roadmap to Enable Error Prone
Level 1:
Disable everything

Level 2:
Selectively turn on a
few ERROR checks

Level 3:
Turn on all default
ERROR checks

59
Agenda
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Agenda
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduce Error Prone and Refaster (10 min)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)5
Error Prone Support (5 min)5
Picnic and its code quality
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!6
Picnic and its code quality (10 min)
Introduction Error Prone and Refaster (10)2
Workshop 1 - Refaster (65 min) 3
Workshop 2 - Error Prone (65 min)4
Using Error Prone in practice! (15 min)6
Error Prone Support (5 min)5
Picnic and its code quality1
Introduction of Error Prone and Refaster2
Workshop 1 - Initial setup3
Workshop 2 - Refaster4
Workshop 3 - Error Prone5
Using Error Prone in practice!
Standardization and repetitive discussions
Introduce Error Prone and Refaster2
Refaster - Workshop part 14
Error Prone - Workshop part 25
Error Prone Support3
Using Error Prone in practice!6Using Error Prone in practice! (15 min)5Using Error Prone in practice!6Using Error Prone in practice! (15 min)5Using Error Prone in practice! (15 min)5Using Error Prone in practice!6Using Error Prone in practice! (15 min)7Error Prone @ Picnic

60
Error Prone @ Picnic
Common configuration
./patch.sh
Continuous Integration

61
Applying Error Prone Support @ Picnic
Introducing:
-all Refaster rules

-all Error Prone checks
https://error-prone.picnic.tech

62
Applying Error Prone Support @ Picnic
60+ PRs spread over 40+ Java repositories

33.665 insertions (+) 31.281 deletions (-)

63

64

65
Current state of Error Prone Support
People contributing ideas (from reviews)

50+ contributors

Stickers

Adoption

External adoption

66
Picnic x Moderne
+

67
In summary
Two perspectives:
-Happy developers!

-Platform team or configuration
maintainers.

68

69
Unsure about next steps?
Feel free to reach out!
error-prone.picnic.tech
Jan Kothe
Contact details for vacancies
My contact details:
[email protected]
github.com/rickie
rick_ossies
github.com/rickie/error-prone-demo Demo + setup