This is an automated email from the ASF dual-hosted git repository. mgrigorov pushed a commit to branch avro-3306-fix-build-with-jdk18 in repository https://gitbox.apache.org/repos/asf/avro.git
commit 0cb2a7790e8d6ece00ef03db96737c598b2df0bf Author: Martin Tzvetanov Grigorov <[email protected]> AuthorDate: Fri Jan 14 09:26:41 2022 +0200 AVRO-3306: Java: Build failure with JDK 18+ Ignore compilation warnings that member fields are not Serializable Signed-off-by: Martin Tzvetanov Grigorov <[email protected]> --- .github/workflows/test-lang-java.yml | 1 + .../apache/avro/compiler/specific/SpecificCompiler.java | 2 +- .../avro/compiler/specific/TestSpecificCompiler.java | 17 ++++++++++++++--- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test-lang-java.yml b/.github/workflows/test-lang-java.yml index 91a01f3..2cadc1c 100644 --- a/.github/workflows/test-lang-java.yml +++ b/.github/workflows/test-lang-java.yml @@ -39,6 +39,7 @@ jobs: - '8' - '11' - '17' + - '19-ea' steps: - uses: actions/checkout@v2 diff --git a/lang/java/compiler/src/main/java/org/apache/avro/compiler/specific/SpecificCompiler.java b/lang/java/compiler/src/main/java/org/apache/avro/compiler/specific/SpecificCompiler.java index 94fb0e2..b517cbc 100644 --- a/lang/java/compiler/src/main/java/org/apache/avro/compiler/specific/SpecificCompiler.java +++ b/lang/java/compiler/src/main/java/org/apache/avro/compiler/specific/SpecificCompiler.java @@ -857,7 +857,7 @@ public class SpecificCompiler { /** * Utility for template use. Returns the unboxed java type for a Schema. * - * @deprecated use javaUnbox(Schema, boolean), kept for backward compatibiliby + * @deprecated use javaUnbox(Schema, boolean), kept for backward compatibility * of custom templates */ @Deprecated diff --git a/lang/java/compiler/src/test/java/org/apache/avro/compiler/specific/TestSpecificCompiler.java b/lang/java/compiler/src/test/java/org/apache/avro/compiler/specific/TestSpecificCompiler.java index d789779..89d773e 100644 --- a/lang/java/compiler/src/test/java/org/apache/avro/compiler/specific/TestSpecificCompiler.java +++ b/lang/java/compiler/src/test/java/org/apache/avro/compiler/specific/TestSpecificCompiler.java @@ -43,6 +43,7 @@ import javax.tools.StandardJavaFileManager; import javax.tools.ToolProvider; import org.apache.avro.AvroTypeException; +import java.util.Locale; import java.util.Map; import org.apache.avro.LogicalType; @@ -66,6 +67,13 @@ import org.slf4j.LoggerFactory; public class TestSpecificCompiler { private static final Logger LOG = LoggerFactory.getLogger(TestSpecificCompiler.class); + /** + * JDK 18+ generates a warning for each member field which does not implement + * java.io.Serializable. Since Avro is an alternative serialization format, we + * can just ignore this warning. + */ + private static final String NON_TRANSIENT_INSTANCE_FIELD_MESSAGE = "non-transient instance field of a serializable class declared with a non-serializable type"; + @Rule public TemporaryFolder OUTPUT_DIR = new TemporaryFolder(); @@ -107,13 +115,16 @@ public class TestSpecificCompiler { DiagnosticListener<JavaFileObject> diagnosticListener = diagnostic -> { switch (diagnostic.getKind()) { case ERROR: - // Do not add these to warnings because they will fail the compile, anyway. + // Do not add these to warnings because they will fail the compilation, anyway. LOG.error("{}", diagnostic); break; case WARNING: case MANDATORY_WARNING: - LOG.warn("{}", diagnostic); - warnings.add(diagnostic); + String message = diagnostic.getMessage(Locale.ROOT); + if (!NON_TRANSIENT_INSTANCE_FIELD_MESSAGE.equals(message)) { + LOG.warn("{}", diagnostic); + warnings.add(diagnostic); + } break; case NOTE: case OTHER:
