Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Code generation with javac plugin

881 Aufrufe

Veröffentlicht am

Two approaches for java code generation.

Code example: https://github.com/aradchykov/jeeconf-plugin-demo

Veröffentlicht in: Ingenieurwesen
  • Als Erste(r) kommentieren

Code generation with javac plugin

  1. 1. CODE GENERATION WITH JAVAC PLUGIN
  2. 2. Hello! I am Oleksandr Radchykov committed.chinchilla@gmail.com belict
  3. 3. Motivation for code generation
  4. 4. 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; } }
  5. 5. @Getter @RequiredArgsConstructor class MyService { private final String name; private final Integer version; } 5
  6. 6. Getting rid from annoying code duplication public String validate(Object input) { if (income instanceof String && !((String) income).isEmpty()) { return (String) income; } … }
  7. 7. public String validate(Object input) { if (income instanceof String && !income.isEmpty()) { return income; } … } 7
  8. 8. Two ways to generate code
  9. 9. 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
  10. 10. 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
  11. 11. How to create javac plugin?
  12. 12. 1. Implement Plugin interface class MyPlugin implements Plugin { @Override public String getName() { return “pluginName”; } @Override public void init(JavacTask javacTask, String… strings) { /*...*/ } }
  13. 13. 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.
  14. 14. 3. Compilation $ javac -Xplugin:PluginName –cp /path/to/plugin Source.java
  15. 15. Demo
  16. 16. Questions?
  17. 17. Thanks committed.chinchilla@gmail.com belict

×