From 43b687215e5342ea3073a2d575f14637eedfd74d Mon Sep 17 00:00:00 2001 From: hindujaB Date: Fri, 22 Nov 2024 14:52:43 +0530 Subject: [PATCH 1/3] Improve callMethod() use --- .../lib/data/jsondata/io/BallerinaByteBlockInputStream.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/native/src/main/java/io/ballerina/lib/data/jsondata/io/BallerinaByteBlockInputStream.java b/native/src/main/java/io/ballerina/lib/data/jsondata/io/BallerinaByteBlockInputStream.java index 705b761..c5ad118 100644 --- a/native/src/main/java/io/ballerina/lib/data/jsondata/io/BallerinaByteBlockInputStream.java +++ b/native/src/main/java/io/ballerina/lib/data/jsondata/io/BallerinaByteBlockInputStream.java @@ -83,7 +83,7 @@ public int read() { public void close() throws IOException { super.close(); if (closeMethod != null) { - env.getRuntime().callMethod(iterator, closeMethod.getName(), new StrandMetadata(false, null)); + env.getRuntime().callMethod(iterator, closeMethod.getName(), null); } } @@ -93,7 +93,7 @@ private boolean hasBytesInCurrentChunk() { private boolean readNextChunk() throws InterruptedException { try { - Object result = env.getRuntime().callMethod(iterator, nextMethodName, new StrandMetadata(false, null)); + Object result = env.getRuntime().callMethod(iterator, nextMethodName, null); if (result == null) { done = true; return true; From f3aaa1be512447db3df07ace2927714c95a73d39 Mon Sep 17 00:00:00 2001 From: hindujaB Date: Fri, 22 Nov 2024 15:03:59 +0530 Subject: [PATCH 2/3] Add yield logic for async call --- .../ballerina/lib/data/jsondata/json/Native.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/native/src/main/java/io/ballerina/lib/data/jsondata/json/Native.java b/native/src/main/java/io/ballerina/lib/data/jsondata/json/Native.java index 0161865..894c302 100644 --- a/native/src/main/java/io/ballerina/lib/data/jsondata/json/Native.java +++ b/native/src/main/java/io/ballerina/lib/data/jsondata/json/Native.java @@ -85,13 +85,15 @@ public static Object parseBytes(BArray json, BMap options, BTyp public static Object parseStream(Environment env, BStream json, BMap options, BTypedesc typed) { final BObject iteratorObj = json.getIteratorObj(); - BallerinaByteBlockInputStream byteBlockSteam = new BallerinaByteBlockInputStream(env, - iteratorObj, resolveNextMethod(iteratorObj), resolveCloseMethod(iteratorObj)); - Object result = JsonParser.parse(new InputStreamReader(byteBlockSteam), options, typed); - if (byteBlockSteam.getError() != null) { - return byteBlockSteam.getError(); - } - return result; + return env.yieldAndRun(() -> { + BallerinaByteBlockInputStream byteBlockSteam = new BallerinaByteBlockInputStream(env, iteratorObj, + resolveNextMethod(iteratorObj), resolveCloseMethod(iteratorObj)); + Object result = JsonParser.parse(new InputStreamReader(byteBlockSteam), options, typed); + if (byteBlockSteam.getError() != null) { + return byteBlockSteam.getError(); + } + return result; + }); } public static Object toJson(Object value) { From 9a1455a16f0bf023a6305d910b5471739b53fdac Mon Sep 17 00:00:00 2001 From: hindujaB Date: Fri, 22 Nov 2024 15:08:41 +0530 Subject: [PATCH 3/3] Fix checkstyle --- .../lib/data/jsondata/io/BallerinaByteBlockInputStream.java | 1 - 1 file changed, 1 deletion(-) diff --git a/native/src/main/java/io/ballerina/lib/data/jsondata/io/BallerinaByteBlockInputStream.java b/native/src/main/java/io/ballerina/lib/data/jsondata/io/BallerinaByteBlockInputStream.java index c5ad118..6c4116b 100644 --- a/native/src/main/java/io/ballerina/lib/data/jsondata/io/BallerinaByteBlockInputStream.java +++ b/native/src/main/java/io/ballerina/lib/data/jsondata/io/BallerinaByteBlockInputStream.java @@ -21,7 +21,6 @@ import io.ballerina.lib.data.jsondata.utils.DiagnosticErrorCode; import io.ballerina.lib.data.jsondata.utils.DiagnosticLog; import io.ballerina.runtime.api.Environment; -import io.ballerina.runtime.api.concurrent.StrandMetadata; import io.ballerina.runtime.api.types.MethodType; import io.ballerina.runtime.api.values.BArray; import io.ballerina.runtime.api.values.BError;