Download - Code generation with javac plugin
![Page 1: Code generation with javac plugin](https://reader035.vdocuments.mx/reader035/viewer/2022062218/587ce7911a28ab564b8b485f/html5/thumbnails/1.jpg)
CODE GENERATION WITH JAVAC PLUGIN
![Page 3: Code generation with javac plugin](https://reader035.vdocuments.mx/reader035/viewer/2022062218/587ce7911a28ab564b8b485f/html5/thumbnails/3.jpg)
Motivation for code generation
![Page 4: Code generation with javac plugin](https://reader035.vdocuments.mx/reader035/viewer/2022062218/587ce7911a28ab564b8b485f/html5/thumbnails/4.jpg)
Getting rid of boilerplateclass 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 5: Code generation with javac plugin](https://reader035.vdocuments.mx/reader035/viewer/2022062218/587ce7911a28ab564b8b485f/html5/thumbnails/5.jpg)
@Getter@RequiredArgsConstructorclass MyService { private final String name; private final Integer version;}
![Page 6: Code generation with javac plugin](https://reader035.vdocuments.mx/reader035/viewer/2022062218/587ce7911a28ab564b8b485f/html5/thumbnails/6.jpg)
Getting rid from annoying code duplicationpublic String validate(Object input) { if (income instanceof String
&& !((String) income).isEmpty()) { return (String) income; } …}
![Page 7: Code generation with javac plugin](https://reader035.vdocuments.mx/reader035/viewer/2022062218/587ce7911a28ab564b8b485f/html5/thumbnails/7.jpg)
public String validate(Object input) { if (income instanceof String && !income.isEmpty()) { return income; } …}
![Page 8: Code generation with javac plugin](https://reader035.vdocuments.mx/reader035/viewer/2022062218/587ce7911a28ab564b8b485f/html5/thumbnails/8.jpg)
Two ways to generate code
![Page 9: Code generation with javac plugin](https://reader035.vdocuments.mx/reader035/viewer/2022062218/587ce7911a28ab564b8b485f/html5/thumbnails/9.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 10: Code generation with javac plugin](https://reader035.vdocuments.mx/reader035/viewer/2022062218/587ce7911a28ab564b8b485f/html5/thumbnails/10.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 11: Code generation with javac plugin](https://reader035.vdocuments.mx/reader035/viewer/2022062218/587ce7911a28ab564b8b485f/html5/thumbnails/11.jpg)
How to create javac plugin?
![Page 12: Code generation with javac plugin](https://reader035.vdocuments.mx/reader035/viewer/2022062218/587ce7911a28ab564b8b485f/html5/thumbnails/12.jpg)
1. Implement Plugin interfaceclass MyPlugin implements Plugin { @Override public String getName() { return “pluginName”; }
@Override public void init(JavacTask javacTask,
String… strings) { /*...*/ }}
![Page 13: Code generation with javac plugin](https://reader035.vdocuments.mx/reader035/viewer/2022062218/587ce7911a28ab564b8b485f/html5/thumbnails/13.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 14: Code generation with javac plugin](https://reader035.vdocuments.mx/reader035/viewer/2022062218/587ce7911a28ab564b8b485f/html5/thumbnails/14.jpg)
3. Compilation
$ javac -Xplugin:PluginName \ –cp /path/to/plugin \
Source.java
![Page 15: Code generation with javac plugin](https://reader035.vdocuments.mx/reader035/viewer/2022062218/587ce7911a28ab564b8b485f/html5/thumbnails/15.jpg)
Demo
![Page 16: Code generation with javac plugin](https://reader035.vdocuments.mx/reader035/viewer/2022062218/587ce7911a28ab564b8b485f/html5/thumbnails/16.jpg)
Questions?