You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by am...@apache.org on 2021/01/25 12:44:00 UTC

[ignite-3] branch ignite-13618 updated (f20de95 -> 4f6c738)

This is an automated email from the ASF dual-hosted git repository.

amashenkov pushed a change to branch ignite-13618
in repository https://gitbox.apache.org/repos/asf/ignite-3.git.


    from f20de95  Styles.
     add 882a2ab  IGNITE-14001 Minor codestyle fixes (#27)
     add df8229d  IGNITE-14011 Add RAT, headers check, PMD, Idea Inspections, and code style suites for Ignite 3 (#28)
     add 02512fe  IGNITE-13836 Support for multiple configuration roots, REST module improvements (#14)
     new ca5857b  Merge branch 'main' into ignite-13618
     new 4f6c738  Get rid of Javapoet dependency.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 check-rules/checkstyle-rules.xml                   | 109 ++++++
 .../checkstyle-suppressions.xml                    |  11 +-
 .../section-toc.html => check-rules/pmd-rules.xml  |  24 +-
 .../facebook/presto/bytecode/ClassGenerator.java   |   3 +
 modules/cli-common/pom.xml                         |   7 +-
 modules/cli/pom.xml                                |  17 +-
 modules/commons/pom.xml                            |   6 -
 .../org/apache/ignite/internal/CompilerUtils.java  | 345 -----------------
 .../benchmarks/SerializerBenchmarkTest.java        |  51 +--
 .../schema/marshaller/JavaSerializerTest.java      | 100 ++---
 modules/configuration-annotation-processor/pom.xml |  36 +-
 .../processor/internal/Processor.java              |  32 +-
 .../processor/internal/HasFieldMatcher.java        |   2 +-
 .../processor/internal/HasMethodMatcher.java       |   2 +-
 .../processor/internal/ProcessorTest.java          |  11 +-
 .../sample/CacheConfigurationSchema.java           |   1 +
 .../sample/ClusterWideConfigurationSchema.java     |   1 +
 ...hema.java => DiscoveryConfigurationSchema.java} |  14 +-
 ...Schema.java => NetworkConfigurationSchema.java} |  11 +-
 .../ignite/configuration/sample/UsageTest.java     |  78 +++-
 modules/configuration/pom.xml                      |   7 +-
 ...onfigurator.java => ConfigurationRegistry.java} |  36 +-
 .../apache/ignite/configuration/Configurator.java  |  21 +-
 .../org/apache/ignite/configuration/RootKey.java}  |   7 +-
 .../configuration/internal/DynamicProperty.java    |   3 +-
 .../ignite/configuration/internal/Modifier.java    |   1 -
 .../configuration/internal/selector/Selector.java  |   1 -
 .../storage/ConfigurationStorage.java              |   1 -
 .../ConfigurationValidationException.java          |   2 -
 .../configuration/validation/FieldValidator.java   |   1 -
 .../src/main/resources/bootstrap-config.json       |   1 -
 modules/{ignite-runner => rest}/pom.xml            |  31 +-
 .../java/org/apache/ignite/rest/ErrorResult.java   |   0
 .../java/org/apache/ignite/rest/RestModule.java    | 153 +++++---
 .../configuration}/RestConfigurationSchema.java    |   5 +-
 .../presentation/ConfigurationPresentation.java    |  52 +++
 .../ignite/rest}/presentation/FormatConverter.java |   7 +-
 .../rest}/presentation/json/JsonConverter.java     |  17 +-
 .../rest/presentation/json/JsonPresentation.java   |  83 ++++
 modules/{ignite-runner => runner}/pom.xml          |  26 +-
 .../java/org/apache/ignite/app/IgniteRunner.java   |  52 ++-
 .../ignite/configuration/ConfigurationModule.java  |  38 +-
 .../extended/AutoAdjustConfigurationSchema.java    |   1 -
 .../extended/BaselineConfigurationSchema.java      |   0
 .../extended/DataStorageConfigurationSchema.java   |   0
 .../extended/LocalConfigurationSchema.java         |   4 -
 .../org/apache/ignite/utils/IgniteProperties.java  |   0
 .../src/main/resources/bootstrap-config.json       |  19 +
 .../src/main/resources/ignite.properties           |   0
 .../src/main/resources/simplelogger.properties     |   0
 pom.xml => parent/pom.xml                          | 171 ++++-----
 pom.xml                                            | 426 ++++-----------------
 52 files changed, 903 insertions(+), 1124 deletions(-)
 create mode 100644 check-rules/checkstyle-rules.xml
 copy docs/_includes/right-nav.html => check-rules/checkstyle-suppressions.xml (79%)
 copy docs/_includes/section-toc.html => check-rules/pmd-rules.xml (59%)
 delete mode 100644 modules/commons/src/test/java/org/apache/ignite/internal/CompilerUtils.java
 copy modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/{CacheConfigurationSchema.java => DiscoveryConfigurationSchema.java} (80%)
 copy modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/{LocalConfigurationSchema.java => NetworkConfigurationSchema.java} (83%)
 copy modules/configuration/src/main/java/org/apache/ignite/configuration/{PublicConfigurator.java => ConfigurationRegistry.java} (55%)
 copy modules/{cli-common/src/main/java/org/apache/ignite/cli/common/IgniteCommand.java => configuration/src/main/java/org/apache/ignite/configuration/RootKey.java} (84%)
 delete mode 100644 modules/ignite-runner/src/main/resources/bootstrap-config.json
 copy modules/{ignite-runner => rest}/pom.xml (84%)
 rename modules/{ignite-runner => rest}/src/main/java/org/apache/ignite/rest/ErrorResult.java (100%)
 rename modules/{ignite-runner => rest}/src/main/java/org/apache/ignite/rest/RestModule.java (65%)
 rename modules/{ignite-runner/src/main/java/org/apache/ignite/configuration/extended => rest/src/main/java/org/apache/ignite/rest/configuration}/RestConfigurationSchema.java (92%)
 create mode 100644 modules/rest/src/main/java/org/apache/ignite/rest/presentation/ConfigurationPresentation.java
 rename modules/{ignite-runner/src/main/java/org/apache/ignite/configuration => rest/src/main/java/org/apache/ignite/rest}/presentation/FormatConverter.java (86%)
 rename modules/{ignite-runner/src/main/java/org/apache/ignite/configuration => rest/src/main/java/org/apache/ignite/rest}/presentation/json/JsonConverter.java (74%)
 create mode 100644 modules/rest/src/main/java/org/apache/ignite/rest/presentation/json/JsonPresentation.java
 rename modules/{ignite-runner => runner}/pom.xml (81%)
 rename modules/{ignite-runner => runner}/src/main/java/org/apache/ignite/app/IgniteRunner.java (73%)
 rename modules/{ignite-runner => runner}/src/main/java/org/apache/ignite/configuration/ConfigurationModule.java (71%)
 rename modules/{ignite-runner => runner}/src/main/java/org/apache/ignite/configuration/extended/AutoAdjustConfigurationSchema.java (99%)
 rename modules/{ignite-runner => runner}/src/main/java/org/apache/ignite/configuration/extended/BaselineConfigurationSchema.java (100%)
 rename modules/{ignite-runner => runner}/src/main/java/org/apache/ignite/configuration/extended/DataStorageConfigurationSchema.java (100%)
 rename modules/{ignite-runner => runner}/src/main/java/org/apache/ignite/configuration/extended/LocalConfigurationSchema.java (94%)
 rename modules/{ignite-runner => runner}/src/main/java/org/apache/ignite/utils/IgniteProperties.java (100%)
 create mode 100644 modules/runner/src/main/resources/bootstrap-config.json
 rename modules/{ignite-runner => runner}/src/main/resources/ignite.properties (100%)
 rename modules/{ignite-runner => runner}/src/main/resources/simplelogger.properties (100%)
 copy pom.xml => parent/pom.xml (80%)


[ignite-3] 01/02: Merge branch 'main' into ignite-13618

Posted by am...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

amashenkov pushed a commit to branch ignite-13618
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit ca5857b32dca621f462d73ad1d391e36f791e9b3
Merge: f20de95 02512fe
Author: Andrew Mashenkov <an...@gmail.com>
AuthorDate: Mon Jan 25 11:59:41 2021 +0300

    Merge branch 'main' into ignite-13618
    
    # Conflicts:
    #	pom.xml

 check-rules/checkstyle-rules.xml                   | 109 ++++++
 check-rules/checkstyle-suppressions.xml            |  24 ++
 check-rules/pmd-rules.xml                          |  31 ++
 modules/cli-common/pom.xml                         |   7 +-
 modules/cli/pom.xml                                |  17 +-
 modules/configuration-annotation-processor/pom.xml |  36 +-
 .../processor/internal/Processor.java              |  32 +-
 .../processor/internal/HasFieldMatcher.java        |   2 +-
 .../processor/internal/HasMethodMatcher.java       |   2 +-
 .../processor/internal/ProcessorTest.java          |  11 +-
 .../sample/CacheConfigurationSchema.java           |   1 +
 .../sample/ClusterWideConfigurationSchema.java     |   1 +
 ...hema.java => DiscoveryConfigurationSchema.java} |  14 +-
 .../sample/NetworkConfigurationSchema.java}        |  16 +-
 .../ignite/configuration/sample/UsageTest.java     |  78 +++-
 modules/configuration/pom.xml                      |   7 +-
 .../configuration/ConfigurationRegistry.java}      |  25 +-
 .../apache/ignite/configuration/Configurator.java  |  21 +-
 .../org/apache/ignite/configuration/RootKey.java}  |  15 +-
 .../configuration/internal/DynamicProperty.java    |   3 +-
 .../ignite/configuration/internal/Modifier.java    |   1 -
 .../configuration/internal/selector/Selector.java  |   1 -
 .../storage/ConfigurationStorage.java              |   1 -
 .../ConfigurationValidationException.java          |   2 -
 .../configuration/validation/FieldValidator.java   |   1 -
 .../src/main/resources/bootstrap-config.json       |   1 -
 modules/{ignite-runner => rest}/pom.xml            |  31 +-
 .../java/org/apache/ignite/rest/ErrorResult.java   |   0
 .../java/org/apache/ignite/rest/RestModule.java    | 153 +++++---
 .../configuration}/RestConfigurationSchema.java    |   5 +-
 .../presentation/ConfigurationPresentation.java    |  52 +++
 .../ignite/rest}/presentation/FormatConverter.java |   7 +-
 .../rest}/presentation/json/JsonConverter.java     |  17 +-
 .../rest/presentation/json/JsonPresentation.java   |  83 ++++
 modules/{ignite-runner => runner}/pom.xml          |  26 +-
 .../java/org/apache/ignite/app/IgniteRunner.java   |  52 ++-
 .../ignite/configuration/ConfigurationModule.java  |  38 +-
 .../extended/AutoAdjustConfigurationSchema.java    |   1 -
 .../extended/BaselineConfigurationSchema.java      |   0
 .../extended/DataStorageConfigurationSchema.java   |   0
 .../extended/LocalConfigurationSchema.java         |   4 -
 .../org/apache/ignite/utils/IgniteProperties.java  |   0
 .../src/main/resources/bootstrap-config.json       |  19 +
 .../src/main/resources/ignite.properties           |   0
 .../src/main/resources/simplelogger.properties     |   0
 pom.xml => parent/pom.xml                          | 163 +++-----
 pom.xml                                            | 426 ++++-----------------
 47 files changed, 831 insertions(+), 705 deletions(-)

diff --cc pom.xml
index b81905b,6ce3c26..97000b0
--- a/pom.xml
+++ b/pom.xml
@@@ -33,356 -33,64 +33,66 @@@
      <version>3.0.0-SNAPSHOT</version>
      <packaging>pom</packaging>
  
-     <description>Java-based middleware for in-memory processing of big data in a distributed environment.</description>
- 
-     <licenses>
-         <license>
-             <name>The Apache Software License, Version 2.0</name>
-             <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-         </license>
-     </licenses>
- 
-     <properties>
-         <maven.compiler.source>11</maven.compiler.source>
-         <maven.compiler.target>11</maven.compiler.target>
-         <maven.compiler.release>11</maven.compiler.release>
- 
-         <!-- Dependencies versions. -->
-         <asm.framework.version>7.2</asm.framework.version>
-         <apache.ivy.version>2.5.0</apache.ivy.version>
-         <compile.testing.library.version>0.19</compile.testing.library.version>
-         <gson.version>2.8.6</gson.version>
-         <jackson.databind.version>2.11.1</jackson.databind.version>
-         <jansi.version>1.18</jansi.version>
-         <javalin.version>3.12.0</javalin.version>
-         <javapoet.version>1.13.0</javapoet.version>
-         <javax.annotation.api.version>1.3.2</javax.annotation.api.version>
-         <javax.validation.version>2.0.1.Final</javax.validation.version>
-         <jetbrains.annotations.version>20.1.0</jetbrains.annotations.version>
-         <jmh.framework.version>1.9.3</jmh.framework.version>
-         <junit.jupiter.version>5.7.0</junit.jupiter.version>
-         <log4j.version>1.2.17</log4j.version>
-         <logback.version>1.2.3</logback.version>
-         <micronaut.version>2.1.2</micronaut.version>
-         <micronaut.test.junit5.version>2.3.1</micronaut.test.junit5.version>
-         <mockito.framework.version>3.4.6</mockito.framework.version>
-         <mockito.junit.jupiter.version>3.3.3</mockito.junit.jupiter.version>
-         <picocli.version>4.5.2</picocli.version>
-         <slf4j.version>1.7.30</slf4j.version>
-         <spoon.framework.version>8.3.0</spoon.framework.version>
-         <typesafe.version>1.4.1</typesafe.version>
- 
-         <!-- Maven plugins. -->
-         <apache.rat.plugin.version>0.13</apache.rat.plugin.version>
-         <launch.mave.plugin.version>1.7.25</launch.mave.plugin.version>
-         <maven.antrun.plugin.version>3.0.0</maven.antrun.plugin.version>
-         <maven.assembly.plugin.version>3.2.0</maven.assembly.plugin.version>
-         <maven.compiler.plugin.version>3.8.1</maven.compiler.plugin.version>
-         <maven.deploy.plugin.version>2.8.2</maven.deploy.plugin.version>
-         <maven.surefire.plugin.version>3.0.0-M4</maven.surefire.plugin.version>
-     </properties>
- 
      <modules>
 +        <module>modules/bytecode</module>
          <module>modules/cli</module>
          <module>modules/cli-common</module>
 +        <module>modules/commons</module>
          <module>modules/configuration</module>
          <module>modules/configuration-annotation-processor</module>
-         <module>modules/ignite-runner</module>
+         <module>modules/rest</module>
+         <module>modules/runner</module>
      </modules>
  
-     <distributionManagement>
-         <repository>
-             <id>apache.staging</id>
-             <name>Apache Staging Repository</name>
-             <url>https://repository.apache.org/service/local/staging/deploy/maven2</url>
-         </repository>
-     </distributionManagement>
- 
-     <issueManagement>
-         <system>Jira</system>
-         <url>https://issues.apache.org/jira/projects/IGNITE/issues</url>
-     </issueManagement>
- 
-     <dependencyManagement>
-         <dependencies>
-             <dependency>
-                 <groupId>org.jetbrains</groupId>
-                 <artifactId>annotations</artifactId>
-                 <version>${jetbrains.annotations.version}</version>
-             </dependency>
- 
-             <dependency>
-                 <groupId>ch.qos.logback</groupId>
-                 <artifactId>logback-classic</artifactId>
-                 <version>${logback.version}</version>
-             </dependency>
- 
-             <dependency>
-                 <groupId>com.fasterxml.jackson.core</groupId>
-                 <artifactId>jackson-databind</artifactId>
-                 <version>${jackson.databind.version}</version>
-             </dependency>
- 
-             <dependency>
-                 <groupId>org.apache.ivy</groupId>
-                 <artifactId>ivy</artifactId>
-                 <version>${apache.ivy.version}</version>
-             </dependency>
- 
-             <dependency>
-                 <groupId>info.picocli</groupId>
-                 <artifactId>picocli-shell-jline3</artifactId>
-                 <version>${picocli.version}</version>
-             </dependency>
- 
-             <dependency>
-                 <groupId>io.micronaut</groupId>
-                 <artifactId>micronaut-inject-java</artifactId>
-                 <version>${micronaut.version}</version>
-             </dependency>
- 
-             <dependency>
-                 <groupId>com.typesafe</groupId>
-                 <artifactId>config</artifactId>
-                 <version>${typesafe.version}</version>
-             </dependency>
- 
-             <dependency>
-                 <groupId>org.fusesource.jansi</groupId>
-                 <artifactId>jansi</artifactId>
-                 <version>${jansi.version}</version>
-             </dependency>
- 
-             <dependency>
-                 <groupId>info.picocli</groupId>
-                 <artifactId>picocli</artifactId>
-                 <version>${picocli.version}</version>
-             </dependency>
- 
-             <dependency>
-                 <groupId>javax.validation</groupId>
-                 <artifactId>validation-api</artifactId>
-                 <version>${javax.validation.version}</version>
-             </dependency>
- 
-             <dependency>
-                 <groupId>javax.annotation</groupId>
-                 <artifactId>javax.annotation-api</artifactId>
-                 <version>${javax.annotation.api.version}</version>
-             </dependency>
- 
-             <dependency>
-                 <groupId>com.squareup</groupId>
-                 <artifactId>javapoet</artifactId>
-                 <version>${javapoet.version}</version>
-             </dependency>
- 
-             <dependency>
-                 <groupId>com.google.code.gson</groupId>
-                 <artifactId>gson</artifactId>
-                 <version>${gson.version}</version>
-             </dependency>
- 
-             <dependency>
-                 <groupId>io.javalin</groupId>
-                 <artifactId>javalin</artifactId>
-                 <version>${javalin.version}</version>
-             </dependency>
- 
-             <dependency>
-                 <groupId>org.slf4j</groupId>
-                 <artifactId>slf4j-simple</artifactId>
-                 <version>${slf4j.version}</version>
-             </dependency>
- 
-             <dependency>
-                 <groupId>org.ow2.asm</groupId>
-                 <artifactId>asm</artifactId>
-                 <version>${asm.framework.version}</version>
-             </dependency>
- 
-             <dependency>
-                 <groupId>org.ow2.asm</groupId>
-                 <artifactId>asm-tree</artifactId>
-                 <version>${asm.framework.version}</version>
-             </dependency>
- 
-             <dependency>
-                 <groupId>org.ow2.asm</groupId>
-                 <artifactId>asm-util</artifactId>
-                 <version>${asm.framework.version}</version>
-             </dependency>
- 
-             <!-- Test dependencies. -->
-             <dependency>
-                 <groupId>org.junit.jupiter</groupId>
-                 <artifactId>junit-jupiter-engine</artifactId>
-                 <version>${junit.jupiter.version}</version>
-                 <scope>test</scope>
-             </dependency>
- 
-             <dependency>
-                 <groupId>org.junit.jupiter</groupId>
-                 <artifactId>junit-jupiter-api</artifactId>
-                 <version>${junit.jupiter.version}</version>
-                 <scope>test</scope>
-             </dependency>
- 
-             <dependency>
-                 <groupId>org.junit.jupiter</groupId>
-                 <artifactId>junit-jupiter-params</artifactId>
-                 <version>${junit.jupiter.version}</version>
-                 <scope>test</scope>
-             </dependency>
- 
-             <dependency>
-                 <groupId>org.mockito</groupId>
-                 <artifactId>mockito-core</artifactId>
-                 <version>${mockito.framework.version}</version>
-                 <scope>test</scope>
-             </dependency>
- 
-             <dependency>
-                 <groupId>org.mockito</groupId>
-                 <artifactId>mockito-junit-jupiter</artifactId>
-                 <version>${mockito.junit.jupiter.version}</version>
-                 <scope>test</scope>
-             </dependency>
- 
-             <dependency>
-                 <groupId>io.micronaut.test</groupId>
-                 <artifactId>micronaut-test-junit5</artifactId>
-                 <version>${micronaut.test.junit5.version}</version>
-                 <scope>test</scope>
-             </dependency>
- 
-             <dependency>
-                 <groupId>log4j</groupId>
-                 <artifactId>log4j</artifactId>
-                 <version>${log4j.version}</version>
-                 <scope>test</scope>
-             </dependency>
- 
-             <dependency>
-                 <groupId>com.google.testing.compile</groupId>
-                 <artifactId>compile-testing</artifactId>
-                 <version>${compile.testing.library.version}</version>
-                 <scope>test</scope>
-             </dependency>
- 
-             <dependency>
-                 <groupId>fr.inria.gforge.spoon</groupId>
-                 <artifactId>spoon-core</artifactId>
-                 <version>${spoon.framework.version}</version>
-                 <scope>test</scope>
-             </dependency>
- 
-             <dependency>
-                 <groupId>org.openjdk.jmh</groupId>
-                 <artifactId>jmh-core</artifactId>
-                 <version>${jmh.framework.version}</version>
-                 <scope>test</scope>
-             </dependency>
-         </dependencies>
-     </dependencyManagement>
- 
-     <dependencies>
-         <dependency>
-             <groupId>org.junit.jupiter</groupId>
-             <artifactId>junit-jupiter-engine</artifactId>
-             <scope>test</scope>
-         </dependency>
-     </dependencies>
- 
      <build>
-         <pluginManagement>
-             <plugins>
-                 <plugin>
-                     <groupId>org.apache.maven.plugins</groupId>
-                     <artifactId>maven-compiler-plugin</artifactId>
-                     <version>${maven.compiler.plugin.version}</version>
-                 </plugin>
- 
-                 <plugin>
-                     <groupId>org.apache.maven.plugins</groupId>
-                     <artifactId>maven-surefire-plugin</artifactId>
-                     <version>${maven.surefire.plugin.version}</version>
-                 </plugin>
- 
-                 <plugin>
-                     <groupId>org.apache.maven.plugins</groupId>
-                     <artifactId>maven-source-plugin</artifactId>
-                     <executions>
-                         <execution>
-                             <id>attach-sources</id>
-                             <goals>
-                                 <goal>jar</goal>
-                             </goals>
-                         </execution>
-                     </executions>
-                 </plugin>
- 
-                 <plugin>
-                     <groupId>org.apache.rat</groupId>
-                     <artifactId>apache-rat-plugin</artifactId>
-                     <version>${apache.rat.plugin.version}</version>
-                     <executions>
-                         <execution>
-                             <id>check-licenses</id>
-                             <phase>validate</phase>
-                             <goals>
-                                 <goal>check</goal>
-                             </goals>
-                         </execution>
-                     </executions>
-                     <configuration>
-                         <excludes>
-                             <exclude>README.md</exclude>
-                             <exclude>DEVNOTES.md</exclude>
-                             <exclude>docs/assets/images/**</exclude>
-                             <exclude>docs/assets/js/anchor.min.js
-                             </exclude><!-- Distributed under the MIT license. The original license header is badly formatted. -->
-                         </excludes>
-                     </configuration>
-                 </plugin>
- 
-                 <plugin>
-                     <groupId>org.apache.maven.plugins</groupId>
-                     <artifactId>maven-assembly-plugin</artifactId>
-                     <version>${maven.assembly.plugin.version}</version>
-                 </plugin>
- 
-                 <plugin>
-                     <groupId>org.apache.maven.plugins</groupId>
-                     <artifactId>maven-antrun-plugin</artifactId>
-                     <version>${maven.antrun.plugin.version}</version>
-                 </plugin>
- 
-                 <plugin>
-                     <groupId>org.apache.maven.plugins</groupId>
-                     <artifactId>maven-deploy-plugin</artifactId>
-                     <version>${maven.deploy.plugin.version}</version>
-                 </plugin>
- 
-                 <plugin>
-                     <groupId>com.akathist.maven.plugins.launch4j</groupId>
-                     <artifactId>launch4j-maven-plugin</artifactId>
-                     <version>${launch.mave.plugin.version}</version>
-                 </plugin>
-             </plugins>
-         </pluginManagement>
- 
          <plugins>
+             <!--
+               This plugin is used for checking that all files in project are compliant with target licenses headers.
+               Exlusions are possible, but every exclusion should have it's own motivated comment and/or issue key.
+             -->
              <plugin>
-                 <groupId>org.apache.maven.plugins</groupId>
-                 <artifactId>maven-compiler-plugin</artifactId>
-             </plugin>
- 
-             <plugin>
-                 <groupId>org.apache.maven.plugins</groupId>
-                 <artifactId>maven-surefire-plugin</artifactId>
+                 <groupId>org.apache.rat</groupId>
+                 <artifactId>apache-rat-plugin</artifactId>
+                 <configuration>
+                     <addDefaultLicenseMatchers>true</addDefaultLicenseMatchers>
+                     <licenses>
+                         <license implementation="org.apache.rat.analysis.license.FullTextMatchingLicense">
+                             <licenseFamilyCategory>IAL20</licenseFamilyCategory>
+                             <licenseFamilyName>Ignite Apache License 2.0</licenseFamilyName>
+                             <fullText>
+                                 Licensed to the Apache Software Foundation (ASF) under one or more
+                                 contributor license agreements.  See the NOTICE file distributed with
+                                 this work for additional information regarding copyright ownership.
+                                 The ASF licenses this file to You under the Apache License, Version 2.0
+                                 (the "License"); you may not use this file except in compliance with
+                                 the License.  You may obtain a copy of the License at
+ 
+                                 http://www.apache.org/licenses/LICENSE-2.0
+ 
+                                 Unless required by applicable law or agreed to in writing, software
+                                 distributed under the License is distributed on an "AS IS" BASIS,
+                                 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+                                 See the License for the specific language governing permissions and
+                                 limitations under the License.
+                             </fullText>
+                         </license>
+                     </licenses>
+                     <licenseFamilies>
+                         <licenseFamily implementation="org.apache.rat.license.SimpleLicenseFamily">
+                             <familyName>Ignite Apache License 2.0</familyName>
+                         </licenseFamily>
+                     </licenseFamilies>
+                     <excludeSubProjects>false</excludeSubProjects>
+                     <excludes>
+                         <exclude>**/target/**</exclude> <!-- All generated files -->
+                         <exclude>**/*.md</exclude> <!-- Markdown files -->
+                         <exclude>docs/assets/images/**</exclude> <!-- SVG images are XML files, but they cannot have license header -->
+                         <exclude>docs/assets/js/anchor.min.js</exclude> <!-- Distributed under the MIT license. The original license header is badly formatted -->
+                         <exclude>**/*.json</exclude> <!-- Files in JSON format -->
+                         <exclude>modules/cli/src/**/resources//builtin_modules.conf</exclude> <!-- CLI configuration files -->
+                         <exclude>modules/configuration-annotation-processor/src/main/resources/META-INF/services/javax.annotation.processing.Processor</exclude> <!-- ? -->
+                     </excludes>
+                 </configuration>
              </plugin>
  
              <plugin>


[ignite-3] 02/02: Get rid of Javapoet dependency.

Posted by am...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

amashenkov pushed a commit to branch ignite-13618
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit 4f6c738cd8f415fe538571a8dda6c5c8443dd84b
Author: Andrew Mashenkov <an...@gmail.com>
AuthorDate: Mon Jan 25 15:43:20 2021 +0300

    Get rid of Javapoet dependency.
---
 .../facebook/presto/bytecode/ClassGenerator.java   |   3 +
 modules/commons/pom.xml                            |   6 -
 .../org/apache/ignite/internal/CompilerUtils.java  | 345 ---------------------
 .../benchmarks/SerializerBenchmarkTest.java        |  51 +--
 .../schema/marshaller/JavaSerializerTest.java      | 100 +++---
 parent/pom.xml                                     |  38 +++
 6 files changed, 123 insertions(+), 420 deletions(-)

diff --git a/modules/bytecode/src/main/java/com/facebook/presto/bytecode/ClassGenerator.java b/modules/bytecode/src/main/java/com/facebook/presto/bytecode/ClassGenerator.java
index 8e4ff24..aa2389f 100644
--- a/modules/bytecode/src/main/java/com/facebook/presto/bytecode/ClassGenerator.java
+++ b/modules/bytecode/src/main/java/com/facebook/presto/bytecode/ClassGenerator.java
@@ -50,6 +50,9 @@ public class ClassGenerator
 
     public static ClassGenerator classGenerator(ClassLoader parentClassLoader)
     {
+        if (parentClassLoader instanceof DynamicClassLoader)
+            return classGenerator((DynamicClassLoader)parentClassLoader);
+
         return classGenerator(parentClassLoader, Map.of());
     }
 
diff --git a/modules/commons/pom.xml b/modules/commons/pom.xml
index 53a8106..eba5b3f 100644
--- a/modules/commons/pom.xml
+++ b/modules/commons/pom.xml
@@ -63,12 +63,6 @@
             <scope>test</scope>
         </dependency>
 
-        <dependency>
-            <groupId>com.squareup</groupId>
-            <artifactId>javapoet</artifactId>
-            <scope>test</scope>
-        </dependency>
-
         <!-- Benchmarks dependencies -->
         <dependency>
             <groupId>org.openjdk.jmh</groupId>
diff --git a/modules/commons/src/test/java/org/apache/ignite/internal/CompilerUtils.java b/modules/commons/src/test/java/org/apache/ignite/internal/CompilerUtils.java
deleted file mode 100644
index 21120e2..0000000
--- a/modules/commons/src/test/java/org/apache/ignite/internal/CompilerUtils.java
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal;
-
-import com.squareup.javapoet.JavaFile;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URI;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Objects;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import javax.tools.Diagnostic;
-import javax.tools.DiagnosticCollector;
-import javax.tools.FileObject;
-import javax.tools.ForwardingJavaFileManager;
-import javax.tools.JavaCompiler;
-import javax.tools.JavaFileManager;
-import javax.tools.JavaFileObject;
-import javax.tools.SimpleJavaFileObject;
-import javax.tools.StandardLocation;
-import javax.tools.ToolProvider;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Compiler utility class.
- */
-public final class CompilerUtils {
-    /**
-     * @return Creates classloader for dynamically loaded in-memory classes.
-     */
-    public static ClassLoader dynamicClassLoader() {
-        return AccessController.doPrivileged(new PrivilegedAction<>() {
-            @Override public ClassLoader run() {
-                return new MemoryClassLoader(new ConcurrentHashMap<>(), ClassLoader.getSystemClassLoader());
-            }
-        });
-    }
-
-    /**
-     * Compiles code and load compiled classes.
-     *
-     * @param javafile Java file representation.
-     * @return Classloader with compiled classes.
-     */
-    public static ClassLoader compileCode(JavaFile javafile) {
-        final JavaCompiler cmp = ToolProvider.getSystemJavaCompiler();
-
-        final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
-
-        ConcurrentHashMap<String, byte[]> classes = classLoader instanceof MemoryClassLoader ?
-            ((MemoryClassLoader)classLoader).classBytes : new ConcurrentHashMap<>();
-
-        try (final MemoryJavaFileManager fileManager = new MemoryJavaFileManager(cmp.getStandardFileManager(null, null, null), classes)) {
-            DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
-
-            JavaCompiler.CompilationTask task = cmp.getTask(null, fileManager, diagnostics, null, null, Collections.singletonList(javafile.toJavaFileObject()));
-
-            if (task.call())
-                return classLoader instanceof MemoryClassLoader ? classLoader :
-                    new MemoryClassLoader(classes, ClassLoader.getSystemClassLoader());
-
-            // TODO: write to log.
-            for (Diagnostic diagnostic : diagnostics.getDiagnostics()) {
-                System.out.println(diagnostic.getCode());
-                System.out.println(diagnostic.getKind());
-                System.out.println(diagnostic.getPosition());
-                System.out.println(diagnostic.getStartPosition());
-                System.out.println(diagnostic.getEndPosition());
-                System.out.println(diagnostic.getSource());
-                System.out.println(diagnostic.getMessage(null));
-            }
-
-            throw new IllegalStateException("Failed to compile code:\n" + javafile.toString());
-        }
-        catch (IOException ex) {
-            throw new IllegalStateException("Failed to compile code.", ex);
-        }
-    }
-
-    /**
-     * @param iterables Iterables.
-     * @return Concated iterable.
-     */
-    private static <E> Iterable<E> concat(Iterable<? extends E>... iterables) {
-        return new Iterable<>() {
-            private final Iterator<Iterable<? extends E>> it = Arrays.asList(iterables).iterator();
-
-            /** {@inheritDoc} */
-            @Override public Iterator<E> iterator() {
-                return new Iterator<>() {
-                    private Iterator<? extends E> curIt = Collections.emptyIterator();
-
-                    /** {@inheritDoc} */
-                    @Override public boolean hasNext() {
-                        if (curIt == null || !curIt.hasNext())
-                            advance();
-
-                        return curIt.hasNext();
-                    }
-
-                    /** Switches to next iterable. */
-                    private void advance() {
-                        while (it.hasNext() && !curIt.hasNext())
-                            curIt = it.next().iterator();
-                    }
-
-                    /** {@inheritDoc} */
-                    @Override public E next() {
-                        if (!hasNext())
-                            throw new NoSuchElementException();
-
-                        return curIt.next();
-                    }
-
-                    /** {@inheritDoc} */
-                    @Override public void remove() {
-                        throw new UnsupportedOperationException();
-                    }
-                };
-            }
-        };
-    }
-
-    /**
-     * In-memory java file manager.
-     */
-    private static class MemoryJavaFileManager extends ForwardingJavaFileManager<JavaFileManager> {
-        /** Classes code. */
-        private final Map<String, byte[]> classesBytes;
-
-        /**
-         * Constructor.
-         *
-         * @param fileManager Java file manager.
-         * @param classesBytes Classes code.
-         */
-        public MemoryJavaFileManager(JavaFileManager fileManager, Map<String, byte[]> classesBytes) {
-            super(fileManager);
-            this.classesBytes = classesBytes;
-        }
-
-        /**
-         * Java '.class' in-memory file.
-         */
-        private static class MemoryJavaFileObject extends SimpleJavaFileObject {
-            /** Class code. */
-            private final byte[] classBytes;
-
-            /**
-             * Constructor.
-             *
-             * @param className Class name.
-             * @param classBytes Class code.
-             */
-            MemoryJavaFileObject(String className, byte[] classBytes) {
-                super(URI.create(className + Kind.CLASS.extension), Kind.CLASS);
-                this.classBytes = classBytes;
-            }
-
-            /** {@inheritDoc} */
-            @Override public InputStream openInputStream() {
-                return new ByteArrayInputStream(classBytes);
-            }
-        }
-
-        /**
-         * A file object that stores Java bytecode into the classBytes map.
-         */
-        private class JavaClassOutputFile extends SimpleJavaFileObject {
-            /** Class name. */
-            private final String classname;
-
-            /**
-             * Constructor.
-             *
-             * @param classname Class name.
-             */
-            JavaClassOutputFile(String classname) {
-                super(URI.create(classname), Kind.CLASS);
-                this.classname = classname;
-            }
-
-            /** {@inheritDoc} */
-            @Override public OutputStream openOutputStream() {
-                return new ByteArrayOutputStream() {
-                    @Override public void close() throws IOException {
-                        super.close();
-
-                        classesBytes.put(classname, toByteArray());
-                    }
-                };
-            }
-        }
-
-        /** {@inheritDoc} */
-        @Override public Iterable<JavaFileObject> list(Location location, String packageName,
-            Set<JavaFileObject.Kind> kinds,
-            boolean recurse) throws IOException {
-            final Iterable<JavaFileObject> it = super.list(location, packageName, kinds, recurse);
-
-            if (location == StandardLocation.CLASS_PATH && !classesBytes.isEmpty()) {
-                assert kinds.contains(JavaFileObject.Kind.CLASS);
-
-                Iterable<JavaFileObject> localClasses = new Iterable<>() {
-                    @Override public Iterator<JavaFileObject> iterator() {
-                        return classesBytes.keySet().stream()
-                            .filter(cn -> !recurse || cn.lastIndexOf('.') == packageName.length())
-                            .filter(cn -> cn.startsWith(packageName))
-                            .map(cn -> getJavaFileObjectByName(cn))
-                            .filter(Objects::nonNull).iterator();
-                    }
-                };
-
-                return concat(localClasses, it);
-            }
-            else
-                return it;
-        }
-
-        /** {@inheritDoc} */
-        @Override public String inferBinaryName(Location location, JavaFileObject jfo) {
-            if (!(jfo instanceof MemoryJavaFileObject)) {
-                String result = super.inferBinaryName(location, jfo);
-                assert result != null;
-                return result;
-            }
-
-            // A [Java]FileObject's "name" looks like this: "/orc/codehaus/commons/compiler/Foo.java".
-            // A [Java]FileObject's "binary name" looks like "java.lang.annotation.Retention".
-
-            String bn = jfo.getName();
-            if (bn.startsWith("/"))
-                bn = bn.substring(1);
-
-            if (!bn.endsWith(jfo.getKind().extension)) {
-                throw new AssertionError(
-                    "Name \"" + jfo.getName() + "\" does not match kind \"" + jfo.getKind() + "\""
-                );
-            }
-            bn = bn.substring(0, bn.length() - jfo.getKind().extension.length());
-
-            bn = bn.replace('/', '.');
-
-            return bn;
-        }
-
-        /** {@inheritDoc} */
-        @Override public JavaFileObject getJavaFileForInput(Location location, String className,
-            JavaFileObject.Kind kind) throws IOException {
-            if (location == StandardLocation.CLASS_OUTPUT) {
-                JavaFileObject javaFileObject = getJavaFileObjectByName(className);
-
-                if (javaFileObject != null)
-                    return javaFileObject;
-            }
-
-            return fileManager.getJavaFileForInput(location, className, kind);
-        }
-
-        /** {@inheritDoc} */
-        @Nullable private JavaFileObject getJavaFileObjectByName(String className) {
-            final byte[] bytes = classesBytes.get(className);
-
-            if (bytes != null)
-                return new MemoryJavaFileObject(className, bytes);
-
-            return null;
-        }
-
-        /** {@inheritDoc} */
-        @Override public JavaFileObject getJavaFileForOutput(Location location,
-            String className,
-            JavaFileObject.Kind kind,
-            FileObject sibling) throws IOException {
-            if (kind == JavaFileObject.Kind.CLASS)
-                return new JavaClassOutputFile(className);
-            else
-                return super.getJavaFileForOutput(location, className, kind, sibling);
-        }
-    }
-
-    /**
-     * Classloader for runtime compiled classes.
-     */
-    private static final class MemoryClassLoader extends URLClassLoader {
-        /** Empty array. */
-        private static final URL[] EMPTY_URLS = new URL[0];
-
-        /** Classes code. */
-        private final ConcurrentHashMap<String, byte[]> classBytes;
-
-        /**
-         * Constructor.
-         *
-         * @param classBytes Classes code holder.
-         * @param parent Parent classloader.
-         */
-        MemoryClassLoader(ConcurrentHashMap<String, byte[]> classBytes, ClassLoader parent) {
-            super(EMPTY_URLS, parent);
-
-            this.classBytes = classBytes;
-        }
-
-        /** {@inheritDoc} */
-        @Override protected Class<?> findClass(String className) throws ClassNotFoundException {
-            byte[] buf = classBytes.get(className); // clear the bytes in map -- we don't need it anymore
-
-            if (buf != null)
-                return defineClass(className, buf, 0, buf.length);
-            else
-                return super.findClass(className);
-        }
-    }
-
-    /** Stub. */
-    private CompilerUtils() {
-    }
-}
diff --git a/modules/commons/src/test/java/org/apache/ignite/internal/benchmarks/SerializerBenchmarkTest.java b/modules/commons/src/test/java/org/apache/ignite/internal/benchmarks/SerializerBenchmarkTest.java
index bdcf3fb..8591242 100644
--- a/modules/commons/src/test/java/org/apache/ignite/internal/benchmarks/SerializerBenchmarkTest.java
+++ b/modules/commons/src/test/java/org/apache/ignite/internal/benchmarks/SerializerBenchmarkTest.java
@@ -17,17 +17,22 @@
 
 package org.apache.ignite.internal.benchmarks;
 
-import com.squareup.javapoet.JavaFile;
-import com.squareup.javapoet.MethodSpec;
-import com.squareup.javapoet.TypeSpec;
+import com.facebook.presto.bytecode.Access;
+import com.facebook.presto.bytecode.BytecodeBlock;
+import com.facebook.presto.bytecode.ClassDefinition;
+import com.facebook.presto.bytecode.ClassGenerator;
+import com.facebook.presto.bytecode.MethodDefinition;
+import com.facebook.presto.bytecode.ParameterizedType;
+import com.facebook.presto.bytecode.Variable;
+import com.facebook.presto.bytecode.expression.BytecodeExpressions;
 import java.lang.reflect.Field;
+import java.util.EnumSet;
 import java.util.Random;
 import java.util.concurrent.TimeUnit;
-import javax.lang.model.element.Modifier;
+import javax.annotation.processing.Generated;
 import org.apache.ignite.internal.schema.Column;
 import org.apache.ignite.internal.schema.Columns;
 import org.apache.ignite.internal.schema.SchemaDescriptor;
-import org.apache.ignite.internal.CompilerUtils;
 import org.apache.ignite.internal.schema.marshaller.Serializer;
 import org.apache.ignite.internal.schema.marshaller.SerializerFactory;
 import org.apache.ignite.internal.util.Factory;
@@ -94,8 +99,6 @@ public class SerializerBenchmarkTest {
      */
     @Setup
     public void init() {
-        Thread.currentThread().setContextClassLoader(CompilerUtils.dynamicClassLoader());
-
         long seed = System.currentTimeMillis();
 
         rnd = new Random(seed);
@@ -174,31 +177,31 @@ public class SerializerBenchmarkTest {
         final String packageName = "org.apache.ignite.internal.benchmarks";
         final String className = "TestObject";
 
-        final TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC);
+        final ClassDefinition classDef = new ClassDefinition(
+            EnumSet.of(Access.PUBLIC),
+            packageName.replace('.', '/') + '/' + className,
+            ParameterizedType.type(Object.class)
+        );
+        classDef.declareAnnotation(Generated.class).setValue("value", getClass().getCanonicalName());
 
         for (int i = 0; i < maxFields; i++)
-            classBuilder.addField(fieldType, "col" + i, Modifier.PRIVATE);
+            classDef.declareField(EnumSet.of(Access.PRIVATE), "col" + i, ParameterizedType.type(fieldType));
 
         { // Build constructor.
-            final MethodSpec.Builder builder = MethodSpec.constructorBuilder()
-                .addModifiers(Modifier.PUBLIC)
-                .addStatement("$T rnd = new $T()", Random.class, Random.class);
+            final MethodDefinition constr = classDef.declareConstructor(EnumSet.of(Access.PUBLIC));
+            final Variable rnd = constr.getScope().declareVariable(Random.class, "rnd");
+
+            final BytecodeBlock body = constr.getBody()
+                .append(constr.getThis())
+                .invokeConstructor(classDef.getSuperClass())
+                .append(rnd.set(BytecodeExpressions.newInstance(Random.class)));
 
             for (int i = 0; i < maxFields; i++)
-                builder.addStatement("col$L = rnd.nextLong()", i);
+                body.append(constr.getThis().setField("col" + i, rnd.invoke("nextLong", long.class).cast(fieldType)));
 
-            classBuilder.addMethod(builder.build());
+            body.ret();
         }
 
-        final JavaFile javaFile = JavaFile.builder(packageName, classBuilder.build()).build();
-
-        final ClassLoader loader = CompilerUtils.compileCode(javaFile);
-
-        try {
-            return loader.loadClass(packageName + '.' + className);
-        }
-        catch (Exception ex) {
-            throw new IllegalStateException("Failed to compile/instantiate generated Serializer.", ex);
-        }
+        return ClassGenerator.classGenerator(getClass().getClassLoader()).defineClass(classDef, Object.class);
     }
 }
diff --git a/modules/commons/src/test/java/org/apache/ignite/internal/schema/marshaller/JavaSerializerTest.java b/modules/commons/src/test/java/org/apache/ignite/internal/schema/marshaller/JavaSerializerTest.java
index 8226068..3c1bd7e 100644
--- a/modules/commons/src/test/java/org/apache/ignite/internal/schema/marshaller/JavaSerializerTest.java
+++ b/modules/commons/src/test/java/org/apache/ignite/internal/schema/marshaller/JavaSerializerTest.java
@@ -17,18 +17,24 @@
 
 package org.apache.ignite.internal.schema.marshaller;
 
-import com.squareup.javapoet.JavaFile;
-import com.squareup.javapoet.MethodSpec;
-import com.squareup.javapoet.TypeSpec;
+import com.facebook.presto.bytecode.Access;
+import com.facebook.presto.bytecode.BytecodeBlock;
+import com.facebook.presto.bytecode.ClassDefinition;
+import com.facebook.presto.bytecode.ClassGenerator;
+import com.facebook.presto.bytecode.DynamicClassLoader;
+import com.facebook.presto.bytecode.MethodDefinition;
+import com.facebook.presto.bytecode.ParameterizedType;
+import com.facebook.presto.bytecode.Variable;
+import com.facebook.presto.bytecode.expression.BytecodeExpressions;
 import java.util.Arrays;
 import java.util.BitSet;
+import java.util.EnumSet;
 import java.util.List;
 import java.util.Objects;
 import java.util.Random;
 import java.util.UUID;
 import java.util.stream.Stream;
-import javax.lang.model.element.Modifier;
-import org.apache.ignite.internal.CompilerUtils;
+import javax.annotation.processing.Generated;
 import org.apache.ignite.internal.schema.Bitmask;
 import org.apache.ignite.internal.schema.Column;
 import org.apache.ignite.internal.schema.Columns;
@@ -65,6 +71,9 @@ import static org.junit.jupiter.api.DynamicTest.dynamicTest;
  * Serializer test.
  */
 public class JavaSerializerTest {
+
+    private DynamicClassLoader cl;
+
     /**
      * @return List of serializers for test.
      */
@@ -88,6 +97,7 @@ public class JavaSerializerTest {
         System.out.println("Using seed: " + seed + "L;");
 
         rnd = new Random(seed);
+        cl = new DynamicClassLoader(getClass().getClassLoader());
     }
 
     /**
@@ -296,40 +306,34 @@ public class JavaSerializerTest {
     @ParameterizedTest
     @MethodSource("serializerFactoryProvider")
     public void testClassLoader(SerializerFactory factory) throws SerializationException {
-        final ClassLoader prevClassLoader = Thread.currentThread().getContextClassLoader();
-        try {
-            Thread.currentThread().setContextClassLoader(CompilerUtils.dynamicClassLoader());
+        Thread.currentThread().setContextClassLoader(new DynamicClassLoader(getClass().getClassLoader()));
 
-            Column[] keyCols = new Column[] {
-                new Column("key", LONG, false)
-            };
+        Column[] keyCols = new Column[] {
+            new Column("key", LONG, false)
+        };
 
-            Column[] valCols = new Column[] {
-                new Column("col0", LONG, false),
-                new Column("col1", LONG, false),
-                new Column("col2", LONG, false),
-            };
+        Column[] valCols = new Column[] {
+            new Column("col0", LONG, false),
+            new Column("col1", LONG, false),
+            new Column("col2", LONG, false),
+        };
 
-            SchemaDescriptor schema = new SchemaDescriptor(1, new Columns(keyCols), new Columns(valCols));
+        SchemaDescriptor schema = new SchemaDescriptor(1, new Columns(keyCols), new Columns(valCols));
 
-            final Class<?> valClass = createGeneratedObjectClass(Long.class);
-            final ObjectFactory<?> objFactory = new ObjectFactory<>(valClass);
+        final Class<?> valClass = createGeneratedObjectClass(long.class);
+        final ObjectFactory<?> objFactory = new ObjectFactory<>(valClass);
 
-            final Long key = rnd.nextLong();
+        final Long key = rnd.nextLong();
 
-            Serializer serializer = factory.create(schema, key.getClass(), valClass);
+        Serializer serializer = factory.create(schema, key.getClass(), valClass);
 
-            byte[] bytes = serializer.serialize(key, objFactory.create());
+        byte[] bytes = serializer.serialize(key, objFactory.create());
 
-            Object key1 = serializer.deserializeKey(bytes);
-            Object val1 = serializer.deserializeValue(bytes);
+        Object key1 = serializer.deserializeKey(bytes);
+        Object val1 = serializer.deserializeValue(bytes);
 
-            assertTrue(key.getClass().isInstance(key1));
-            assertTrue(valClass.isInstance(val1));
-        }
-        finally {
-            Thread.currentThread().setContextClassLoader(prevClassLoader);
-        }
+        assertTrue(key.getClass().isInstance(key1));
+        assertTrue(valClass.isInstance(val1));
     }
 
     /**
@@ -398,30 +402,36 @@ public class JavaSerializerTest {
         final String packageName = getClass().getPackageName();
         final String className = "GeneratedTestObject";
 
-        final TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC);
+        final ClassDefinition classDef = new ClassDefinition(
+            EnumSet.of(Access.PUBLIC),
+            packageName.replace('.', '/') + '/' + className,
+            ParameterizedType.type(Object.class)
+        );
+        classDef.declareAnnotation(Generated.class).setValue("value", getClass().getCanonicalName());
 
         for (int i = 0; i < 3; i++)
-            classBuilder.addField(fieldType, "col" + i, Modifier.PRIVATE);
+            classDef.declareField(EnumSet.of(Access.PRIVATE), "col" + i, ParameterizedType.type(fieldType));
 
         { // Build constructor.
-            final MethodSpec.Builder builder = MethodSpec.constructorBuilder()
-                .addModifiers(Modifier.PUBLIC)
-                .addStatement("$T rnd = new $T()", Random.class, Random.class);
+            final MethodDefinition constr = classDef.declareConstructor(EnumSet.of(Access.PUBLIC));
+            final Variable rnd = constr.getScope().declareVariable(Random.class, "rnd");
+
+            BytecodeBlock body = constr.getBody()
+                .append(constr.getThis())
+                .invokeConstructor(classDef.getSuperClass())
+                .append(rnd.set(BytecodeExpressions.newInstance(Random.class)));
 
             for (int i = 0; i < 3; i++)
-                builder.addStatement("col$L = rnd.nextLong()", i);
+                body.append(constr.getThis().setField("col" + i, rnd.invoke("nextLong", long.class).cast(fieldType)));
 
-            classBuilder.addMethod(builder.build());
+            body.ret();
         }
 
-        final JavaFile javaFile = JavaFile.builder(packageName, classBuilder.build()).build();
-
-        try {
-            return CompilerUtils.compileCode(javaFile).loadClass(packageName + '.' + className);
-        }
-        catch (Exception ex) {
-            throw new IllegalStateException("Failed to compile/instantiate generated Serializer.", ex);
-        }
+        return ClassGenerator.classGenerator(Thread.currentThread().getContextClassLoader())
+            .fakeLineNumbers(true)
+            .runAsmVerifier(true) // Field of primitive type signature check fails.
+            .dumpRawBytecode(true)
+            .defineClass(classDef, Object.class);
     }
 
     /**
diff --git a/parent/pom.xml b/parent/pom.xml
index ac1fc7d..587a565 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -51,6 +51,7 @@
 
         <!-- Dependencies versions -->
         <apache.ivy.version>2.5.0</apache.ivy.version>
+        <asm.framework.version>9.0</asm.framework.version>
         <compile.testing.library.version>0.19</compile.testing.library.version>
         <gson.version>2.8.6</gson.version>
         <jackson.databind.version>2.11.1</jackson.databind.version>
@@ -60,6 +61,7 @@
         <javax.annotation.api.version>1.3.2</javax.annotation.api.version>
         <javax.validation.version>2.0.1.Final</javax.validation.version>
         <jetbrains.annotations.version>20.1.0</jetbrains.annotations.version>
+        <jmh.framework.version>1.13</jmh.framework.version>
         <junit.jupiter.version>5.7.0</junit.jupiter.version>
         <log4j.version>1.2.17</log4j.version>
         <logback.version>1.2.3</logback.version>
@@ -163,6 +165,12 @@
             </dependency>
 
             <dependency>
+                <groupId>javax.annotation</groupId>
+                <artifactId>javax.annotation-api</artifactId>
+                <version>${javax.annotation.api.version}</version>
+            </dependency>
+
+            <dependency>
                 <groupId>com.squareup</groupId>
                 <artifactId>javapoet</artifactId>
                 <version>${javapoet.version}</version>
@@ -200,6 +208,12 @@
             </dependency>
 
             <dependency>
+                <groupId>org.junit.jupiter</groupId>
+                <artifactId>junit-jupiter-params</artifactId>
+                <version>${junit.jupiter.version}</version>
+            </dependency>
+
+            <dependency>
                 <groupId>org.mockito</groupId>
                 <artifactId>mockito-core</artifactId>
                 <version>${mockito.framework.version}</version>
@@ -240,6 +254,30 @@
                 <artifactId>hamcrest-library</artifactId>
                 <version>${hamcrest.version}</version>
             </dependency>
+
+            <dependency>
+                <groupId>org.openjdk.jmh</groupId>
+                <artifactId>jmh-core</artifactId>
+                <version>${jmh.framework.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.ow2.asm</groupId>
+                <artifactId>asm</artifactId>
+                <version>${asm.framework.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.ow2.asm</groupId>
+                <artifactId>asm-tree</artifactId>
+                <version>${asm.framework.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>org.ow2.asm</groupId>
+                <artifactId>asm-util</artifactId>
+                <version>${asm.framework.version}</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>