From b92b2db5c335f28c146f5f052cdda36908763209 Mon Sep 17 00:00:00 2001 From: Zev Blut Date: Mon, 19 Oct 2026 17:37:34 -0500 Subject: [PATCH 1/2] Replace deprecated calls where context is already in scope Zero-sum deprecation cleanups for 10.0. Each replacement either is the body of the deprecated method, or uses the ThreadContext the caller already has. No new getCurrentContext() calls. - RubyNumeric#getLongValue() -> asLong(context) RubyModule#hashCode: the result of convertToInteger() is a Fixnum or Bignum; getLongValue() ended up in asLong(getCurrentContext()). - RubyFixnum#getLongValue() -> getValue() RubyBignum#float_eq: both return the value field. - RubyString.newStringShared(Ruby, byte[], Encoding) -> newStringShared(Ruby, byte[], 0, bytes.length, Encoding) RubyInteger.singleCharString: the deprecated method's body. - RubyString.newStringShared(Ruby, byte[], int, int) -> newStringShared(Ruby, byte[], int, int, ASCIIEncoding.INSTANCE) RubyRegexp#named_captures: the deprecated method's body. - new RubyString(Ruby, RubyClass, byte[]) -> RubyString.newString(Ruby, byte[]) MarshalDumper#writeEncoding: the class was stringClass(context), and newString(Ruby, byte[]) is that constructor with runtime.getString(). Drops the now-unused stringClass import. - RubyString#inspect() -> inspect(context) RubyTimeParser (two error messages): inspect() went through RubyBasicObject#inspect() to inspect(getCurrentContext()). Removes 7 deprecation warnings from core. Co-Authored-By: Claude Opus 5.5 --- core/src/main/java/org/jruby/RubyBignum.java | 2 +- core/src/main/java/org/jruby/RubyInteger.java | 2 +- core/src/main/java/org/jruby/RubyModule.java | 2 +- core/src/main/java/org/jruby/RubyRegexp.java | 2 +- .../main/java/org/jruby/runtime/marshal/MarshalDumper.java | 3 +-- core/src/main/java/org/jruby/util/RubyTimeParser.java | 4 ++-- 6 files changed, 7 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/org/jruby/RubyBignum.java b/core/src/main/java/org/jruby/RubyBignum.java index f3ebe34d31c..65b673d04b8 100644 --- a/core/src/main/java/org/jruby/RubyBignum.java +++ b/core/src/main/java/org/jruby/RubyBignum.java @@ -1028,7 +1028,7 @@ private boolean float_eq(ThreadContext context, RubyFloat y) { // compare as integers to avoid precision loss IRubyObject rel = op_cmp(context, newBignorm(context.runtime, yd)); - return rel instanceof RubyFixnum fix && fix.getLongValue() == 0; + return rel instanceof RubyFixnum fix && fix.getValue() == 0; } @Override diff --git a/core/src/main/java/org/jruby/RubyInteger.java b/core/src/main/java/org/jruby/RubyInteger.java index ddd808561e7..0b28e8781ee 100644 --- a/core/src/main/java/org/jruby/RubyInteger.java +++ b/core/src/main/java/org/jruby/RubyInteger.java @@ -460,7 +460,7 @@ public static RubyString singleCharString(Ruby runtime, byte b, RubyClass meta, if (bytes == null) { // just share byte array - return RubyString.newStringShared(runtime, SINGLE_CHAR_BYTES[ub], enc); + return RubyString.newStringShared(runtime, SINGLE_CHAR_BYTES[ub], 0, SINGLE_CHAR_BYTES[ub].length, enc); } // use shared for cached bytelists diff --git a/core/src/main/java/org/jruby/RubyModule.java b/core/src/main/java/org/jruby/RubyModule.java index cc8406d585d..be5a93f6a49 100644 --- a/core/src/main/java/org/jruby/RubyModule.java +++ b/core/src/main/java/org/jruby/RubyModule.java @@ -3225,7 +3225,7 @@ public int hashCode() { if (hash.isBuiltin(this)) return id; // we truncate for Java hashcode - return (int) hash.call(context, this, this).convertToInteger().getLongValue(); + return (int) hash.call(context, this, this).convertToInteger().asLong(context); } @JRubyMethod(name = "hash") diff --git a/core/src/main/java/org/jruby/RubyRegexp.java b/core/src/main/java/org/jruby/RubyRegexp.java index 6fa8e0825a2..db13a9b8b53 100755 --- a/core/src/main/java/org/jruby/RubyRegexp.java +++ b/core/src/main/java/org/jruby/RubyRegexp.java @@ -1586,7 +1586,7 @@ public IRubyObject named_captures(ThreadContext context) { for (int idx = 0; idx Date: Mon, 19 Oct 2026 19:13:39 -0500 Subject: [PATCH 2/2] Use Create.newString(context, bytes) in MarshalDumper#writeEncoding Optional follow-up for review. org.jruby.api.Create.newString(context, byte[]) delegates to RubyString.newString(context.runtime, byte[]), so behavior is identical; this only uses the context-taking API. Co-Authored-By: Claude Opus 5.5 --- .../src/main/java/org/jruby/runtime/marshal/MarshalDumper.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/jruby/runtime/marshal/MarshalDumper.java b/core/src/main/java/org/jruby/runtime/marshal/MarshalDumper.java index b33142c298b..27110e8076b 100644 --- a/core/src/main/java/org/jruby/runtime/marshal/MarshalDumper.java +++ b/core/src/main/java/org/jruby/runtime/marshal/MarshalDumper.java @@ -72,6 +72,7 @@ import static org.jruby.RubyBasicObject.getMetaClass; import static org.jruby.api.Convert.*; +import static org.jruby.api.Create.newString; import static org.jruby.api.Error.*; import static org.jruby.runtime.marshal.MarshalCommon.TYPE_IVAR; import static org.jruby.runtime.marshal.MarshalCommon.TYPE_UCLASS; @@ -531,7 +532,7 @@ public void writeEncoding(ThreadContext context, RubyOutputStream out, Encoding writeObjectData(context, out, context.tru); } else { writeAndRegisterSymbol(out, symbolTable.getEncodingSymbol()); - RubyString encodingString = RubyString.newString(context.runtime, encoding.getName()); + RubyString encodingString = newString(context, encoding.getName()); writeObjectData(context, out, encodingString); } }