From 9b5deef76aeb5e3868cafb0b0956cca3708136f3 Mon Sep 17 00:00:00 2001 From: Charles Oliver Nutter Date: Tue, 14 Jan 2020 11:25:02 -0600 Subject: [PATCH] Change return type to RubyArray The existing signature conflicts with one added to JRuby 9.2.9. Specifically, the new signature in JRuby returns RubyArray, which causes a compilation error on this line in Nokogiri because it attempts to use a more general return type. We would prefer to keep the specific return type in JRuby. * If we patch JRuby, then 9.2.9 will never be able to compile any version of Nokogiri. * If we patch Nokogiri, all versions of JRuby can compile current and future Nokogiri. Versions prior to 9.2.9 will be able to compile all existing releases of Nokogiri. I do not believe the change in 9.2.9 breaks anything at runtime, since the JVM does not care about this particular return type mismatch unless someone actually returns a non-RubyArray object. Fixes #1968 --- ext/java/nokogiri/XmlNodeSet.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ext/java/nokogiri/XmlNodeSet.java b/ext/java/nokogiri/XmlNodeSet.java index 831e3af1833..d437cd376b8 100644 --- a/ext/java/nokogiri/XmlNodeSet.java +++ b/ext/java/nokogiri/XmlNodeSet.java @@ -39,6 +39,7 @@ import java.util.Arrays; import org.jruby.Ruby; +import org.jruby.RubyArray; import org.jruby.RubyClass; import org.jruby.RubyFixnum; import org.jruby.RubyObject; @@ -391,7 +392,7 @@ public IRubyObject subseq(ThreadContext context, int start, int length) { } @JRubyMethod(name = {"to_a", "to_ary"}) - public IRubyObject to_a(ThreadContext context) { + public RubyArray to_a(ThreadContext context) { return context.runtime.newArrayNoCopy(nodes); }