diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d373f86dd..9a52e07f1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,7 +16,7 @@ junit = "6.0.1" nmcp = "1.4.3" picocli = "4.7.7" protobuf-plugin = "0.9.6" -protobuf = "3.25.8" +protobuf = "4.33.2" scala-library = "2.12.21" scalatest = "3.2.19" scalatestplus-junit5 = "3.2.19.0" diff --git a/isthmus-cli/src/main/java/io/substrait/isthmus/cli/RegisterAtRuntime.java b/isthmus-cli/src/main/java/io/substrait/isthmus/cli/RegisterAtRuntime.java index 266a36ff0..e39513359 100644 --- a/isthmus-cli/src/main/java/io/substrait/isthmus/cli/RegisterAtRuntime.java +++ b/isthmus-cli/src/main/java/io/substrait/isthmus/cli/RegisterAtRuntime.java @@ -1,7 +1,8 @@ package io.substrait.isthmus.cli; +import com.google.protobuf.DescriptorProtos; import com.google.protobuf.Empty; -import com.google.protobuf.GeneratedMessageV3; +import com.google.protobuf.GeneratedMessage; import com.google.protobuf.MessageLite; import com.google.protobuf.ProtocolMessageEnum; import io.github.classgraph.ClassGraph; @@ -54,10 +55,11 @@ public void beforeAnalysis(BeforeAnalysisAccess access) { // Empty class register(Empty.class); + registerDeclaredClassesRecursively(DescriptorProtos.class); try (PackageScanner substrait = new PackageScanner("io.substrait")) { // protobuf items - substrait.registerByParent(GeneratedMessageV3.class); + substrait.registerByParent(GeneratedMessage.class); substrait.registerByParent(MessageLite.Builder.class); substrait.registerByParent(ProtocolMessageEnum.class); @@ -131,6 +133,13 @@ private static void register(Class c) { RuntimeReflection.register(c.getMethods()); } + private static void registerDeclaredClassesRecursively(Class c) { + register(c); + for (Class declaredClass : c.getDeclaredClasses()) { + registerDeclaredClassesRecursively(declaredClass); + } + } + private static final class PackageScanner implements AutoCloseable { private final ScanResult scan;