You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by mg...@apache.org on 2022/01/14 07:28:24 UTC
[avro] 01/01: AVRO-3306: Java: Build failure with JDK 18+
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 <mg...@apache.org>
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 <mg...@apache.org>
---
.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: