Download - Java day 2016.pptx
![Page 1: Java day 2016.pptx](https://reader031.vdocuments.net/reader031/viewer/2022030302/587ce75e1a28ab564b8b4809/html5/thumbnails/1.jpg)
CODE GENERATION WITH JAVAC PLUGIN
![Page 2: Java day 2016.pptx](https://reader031.vdocuments.net/reader031/viewer/2022030302/587ce75e1a28ab564b8b4809/html5/thumbnails/2.jpg)
Hello!I am Oleksandr Radchykov
belict
![Page 3: Java day 2016.pptx](https://reader031.vdocuments.net/reader031/viewer/2022030302/587ce75e1a28ab564b8b4809/html5/thumbnails/3.jpg)
Agenda
1. Motivation2. How to generate code?3. How to create plugin4. Demo
![Page 4: Java day 2016.pptx](https://reader031.vdocuments.net/reader031/viewer/2022030302/587ce75e1a28ab564b8b4809/html5/thumbnails/4.jpg)
Motivation for code generation
![Page 5: Java day 2016.pptx](https://reader031.vdocuments.net/reader031/viewer/2022030302/587ce75e1a28ab564b8b4809/html5/thumbnails/5.jpg)
Getting rid of boilerplate
class MyService { private final String name; private final Integer version;
public MyService(String name, Integer version) { this.name = name; This.version = version; }
public String getName() { return name; } public Integer getVersion() { return version; }}
![Page 6: Java day 2016.pptx](https://reader031.vdocuments.net/reader031/viewer/2022030302/587ce75e1a28ab564b8b4809/html5/thumbnails/6.jpg)
@Getter@RequiredArgsConstructorclass MyService { private final String name; private final Integer version;}
6
![Page 7: Java day 2016.pptx](https://reader031.vdocuments.net/reader031/viewer/2022030302/587ce75e1a28ab564b8b4809/html5/thumbnails/7.jpg)
Getting rid from annoying code duplication
public String validate(Object input) { if (income instanceof String
&& !((String) income).isEmpty()) { return (String) income; } …}
![Page 8: Java day 2016.pptx](https://reader031.vdocuments.net/reader031/viewer/2022030302/587ce75e1a28ab564b8b4809/html5/thumbnails/8.jpg)
public String validate(Object input) { if (income instanceof String && !income.isEmpty()) { return income; } …}
8
![Page 9: Java day 2016.pptx](https://reader031.vdocuments.net/reader031/viewer/2022030302/587ce75e1a28ab564b8b4809/html5/thumbnails/9.jpg)
Two ways to generate code
![Page 10: Java day 2016.pptx](https://reader031.vdocuments.net/reader031/viewer/2022030302/587ce75e1a28ab564b8b4809/html5/thumbnails/10.jpg)
Annotation Processing
▷Java 5+
▷Takes java code and generates source files
▷You can not manipulate an existing java code
▷Use the model of processing rounds
![Page 11: Java day 2016.pptx](https://reader031.vdocuments.net/reader031/viewer/2022030302/587ce75e1a28ab564b8b4809/html5/thumbnails/11.jpg)
Javac Plugin
▷Since Java 8▷Can give us access to AST trees parsed from
source code▷Can be used to add compile-time checks▷Can run on different phases of compilation
process
![Page 12: Java day 2016.pptx](https://reader031.vdocuments.net/reader031/viewer/2022030302/587ce75e1a28ab564b8b4809/html5/thumbnails/12.jpg)
How to create javac plugin?
![Page 13: Java day 2016.pptx](https://reader031.vdocuments.net/reader031/viewer/2022030302/587ce75e1a28ab564b8b4809/html5/thumbnails/13.jpg)
1. Implement Plugin interface
import com.sun.source.util.Plugin;
class MyPlugin implements Plugin { @Override public String getName() { return “pluginName”; }
@Override public void init(JavacTask javacTask,
String… strings) { /*...*/ }}
![Page 14: Java day 2016.pptx](https://reader031.vdocuments.net/reader031/viewer/2022030302/587ce75e1a28ab564b8b4809/html5/thumbnails/14.jpg)
2. Create provider-configuration file
MyPlugin.jar- com/example
- MyPlugin.class- META-INF/services
- com.sun.source.util.Plugin
Provider-configuration file should declare all plugins you want to expose.
![Page 15: Java day 2016.pptx](https://reader031.vdocuments.net/reader031/viewer/2022030302/587ce75e1a28ab564b8b4809/html5/thumbnails/15.jpg)
3. Compilation
$ javac -Xplugin:PluginName \ –cp /path/to/plugin \
Source.java
![Page 16: Java day 2016.pptx](https://reader031.vdocuments.net/reader031/viewer/2022030302/587ce75e1a28ab564b8b4809/html5/thumbnails/16.jpg)
Demo
![Page 17: Java day 2016.pptx](https://reader031.vdocuments.net/reader031/viewer/2022030302/587ce75e1a28ab564b8b4809/html5/thumbnails/17.jpg)
Questions?