Skip to content

Commit

Permalink
Merge pull request #14 from ravinperera00/java21_sync
Browse files Browse the repository at this point in the history
Migrate to Java 21
  • Loading branch information
warunalakshitha authored Nov 18, 2024
2 parents 35d756d + 0afb4ca commit c0d9a77
Show file tree
Hide file tree
Showing 17 changed files with 151 additions and 228 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ This repository only contains the source code for the package.

### Set up the prerequisites

1. Download and install Java SE Development Kit (JDK) version 17 (from one of the following locations).
1. Download and install Java SE Development Kit (JDK) version 21 (from one of the following locations).
* [Oracle](https://www.oracle.com/java/technologies/downloads/)

* [OpenJDK](https://adoptium.net/)
Expand Down
18 changes: 9 additions & 9 deletions ballerina/Ballerina.toml
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
[package]
org = "ballerina"
name = "data.yaml"
version = "0.1.0"
version = "0.1.1"
authors = ["Ballerina"]
keywords = ["yaml"]
repository = "https://github.com/ballerina-platform/module-ballerina-data.yaml"
license = ["Apache-2.0"]
distribution = "2201.10.0"
distribution = "2201.11.0-20241112-214900-6b80ab87"

[platform.java17]
[platform.java21]
graalvmCompatible = true

[[platform.java17.dependency]]
[[platform.java21.dependency]]
groupId = "io.ballerina.lib"
artifactId = "yaml-native"
version = "0.1.0"
path = "../native/build/libs/data.yaml-native-0.1.0.jar"
version = "0.1.1"
path = "../native/build/libs/data.yaml-native-0.1.1-SNAPSHOT.jar"


[[platform.java17.dependency]]
[[platform.java21.dependency]]
groupId = "io.ballerina.stdlib"
artifactId = "constraint-native"
version = "1.5.0"
path = "./lib/constraint-native-1.5.0.jar"
version = "1.6.0"
path = "./lib/constraint-native-1.6.0-20241113-090900-d276ad5.jar"
2 changes: 1 addition & 1 deletion ballerina/CompilerPlugin.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ id = "constraint-compiler-plugin"
class = "io.ballerina.lib.data.yaml.compiler.YamlDataCompilerPlugin"

[[dependency]]
path = "../compiler-plugin/build/libs/data.yaml-compiler-plugin-0.1.0.jar"
path = "../compiler-plugin/build/libs/data.yaml-compiler-plugin-0.1.1-SNAPSHOT.jar"
10 changes: 5 additions & 5 deletions ballerina/Dependencies.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@

[ballerina]
dependencies-toml-version = "2"
distribution-version = "2201.10.0"
distribution-version = "2201.11.0-20241112-214900-6b80ab87"

[[package]]
org = "ballerina"
name = "constraint"
version = "1.5.0"
version = "1.6.0"
scope = "testOnly"
dependencies = [
{org = "ballerina", name = "jballerina.java"}
Expand All @@ -22,7 +22,7 @@ modules = [
[[package]]
org = "ballerina"
name = "data.yaml"
version = "0.1.0"
version = "0.1.1"
dependencies = [
{org = "ballerina", name = "constraint"},
{org = "ballerina", name = "io"},
Expand All @@ -37,7 +37,7 @@ modules = [
[[package]]
org = "ballerina"
name = "io"
version = "1.6.1"
version = "1.6.2"
scope = "testOnly"
dependencies = [
{org = "ballerina", name = "jballerina.java"},
Expand Down Expand Up @@ -116,7 +116,7 @@ modules = [
[[package]]
org = "ballerina"
name = "time"
version = "2.4.0"
version = "2.6.0"
scope = "testOnly"
dependencies = [
{org = "ballerina", name = "jballerina.java"}
Expand Down
8 changes: 4 additions & 4 deletions build-config/resources/Ballerina.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,19 @@ authors = ["Ballerina"]
keywords = ["yaml"]
repository = "https://github.com/ballerina-platform/module-ballerina-data.yaml"
license = ["Apache-2.0"]
distribution = "2201.10.0"
distribution = "2201.11.0-20241112-214900-6b80ab87"

[platform.java17]
[platform.java21]
graalvmCompatible = true

[[platform.java17.dependency]]
[[platform.java21.dependency]]
groupId = "io.ballerina.lib"
artifactId = "yaml-native"
version = "@toml.version@"
path = "../native/build/libs/data.yaml-native-@project.version@.jar"


[[platform.java17.dependency]]
[[platform.java21.dependency]]
groupId = "io.ballerina.stdlib"
artifactId = "constraint-native"
version = "@constraint.version@"
Expand Down
7 changes: 5 additions & 2 deletions compiler-plugin-test/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,11 @@ checkstyle {
checkstyleTest.dependsOn(":checkstyle:downloadCheckstyleRuleFiles")

spotbugsTest {
effort "max"
reportLevel "low"
def classLoader = plugins["com.github.spotbugs"].class.classLoader
def SpotBugsConfidence = classLoader.findLoadedClass("com.github.spotbugs.snom.Confidence")
def SpotBugsEffort = classLoader.findLoadedClass("com.github.spotbugs.snom.Effort")
effort = SpotBugsEffort.MAX
reportLevel = SpotBugsConfidence.LOW
reportsDir = file("$project.buildDir/reports/spotbugs")
reports {
html.enabled true
Expand Down
7 changes: 5 additions & 2 deletions compiler-plugin/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,11 @@ checkstyle {
checkstyleMain.dependsOn(":checkstyle:downloadCheckstyleRuleFiles")

spotbugsMain {
effort "max"
reportLevel "low"
def classLoader = plugins["com.github.spotbugs"].class.classLoader
def SpotBugsConfidence = classLoader.findLoadedClass("com.github.spotbugs.snom.Confidence")
def SpotBugsEffort = classLoader.findLoadedClass("com.github.spotbugs.snom.Effort")
effort = SpotBugsEffort.MAX
reportLevel = SpotBugsConfidence.LOW
reportsDir = file("$project.buildDir/reports/spotbugs")
reports {
html.enabled true
Expand Down
10 changes: 5 additions & 5 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
org.gradle.caching=true
group=io.ballerina.lib
version=0.1.1-SNAPSHOT
ballerinaLangVersion=2201.10.0
ballerinaLangVersion=2201.11.0-20241112-214900-6b80ab87

checkstyleToolVersion=10.12.0
puppycrawlCheckstyleVersion=10.12.0
testngVersion=7.6.1
slf4jVersion=2.0.7
githubSpotbugsVersion=5.0.14
githubSpotbugsVersion=6.0.18
githubJohnrengelmanShadowVersion=8.1.1
underCouchDownloadVersion=4.0.4
researchgateReleaseVersion=2.8.0
Expand All @@ -17,6 +17,6 @@ downloadPluginVersion=4.0.4
releasePluginVersion=2.8.0
ballerinaGradlePluginVersion=2.0.1

stdlibIoVersion=1.6.1
stdlibConstraintVersion=1.5.0
stdlibTimeVersion=2.4.0
stdlibIoVersion=1.6.2-20241112-233100-995cf5f
stdlibConstraintVersion=1.6.0-20241113-090900-d276ad5
stdlibTimeVersion=2.6.0-20241113-073800-201b904
7 changes: 5 additions & 2 deletions native/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,12 @@ tasks.withType(Checkstyle) {
}

spotbugsMain {
def classLoader = plugins["com.github.spotbugs"].class.classLoader
def SpotBugsConfidence = classLoader.findLoadedClass("com.github.spotbugs.snom.Confidence")
def SpotBugsEffort = classLoader.findLoadedClass("com.github.spotbugs.snom.Effort")
enabled=false
effort "max"
reportLevel "low"
effort = SpotBugsEffort.MAX
reportLevel = SpotBugsConfidence.LOW
reportsDir = file("$project.buildDir/reports/spotbugs")
reports {
html.enabled true
Expand Down
23 changes: 16 additions & 7 deletions native/src/main/java/io/ballerina/lib/data/yaml/Native.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,12 @@
package io.ballerina.lib.data.yaml;

import io.ballerina.lib.data.yaml.emitter.Emitter;
import io.ballerina.lib.data.yaml.io.DataReaderTask;
import io.ballerina.lib.data.yaml.io.DataReaderThreadPool;
import io.ballerina.lib.data.yaml.io.BallerinaByteBlockInputStream;
import io.ballerina.lib.data.yaml.parser.YamlParser;
import io.ballerina.lib.data.yaml.serializer.Serializer;
import io.ballerina.lib.data.yaml.utils.DiagnosticLog;
import io.ballerina.lib.data.yaml.utils.OptionsUtils;
import io.ballerina.runtime.api.Environment;
import io.ballerina.runtime.api.Future;
import io.ballerina.runtime.api.creators.ValueCreator;
import io.ballerina.runtime.api.values.BArray;
import io.ballerina.runtime.api.values.BError;
Expand All @@ -40,6 +39,9 @@
import java.io.StringReader;
import java.util.List;

import static io.ballerina.lib.data.yaml.utils.DataReader.resolveCloseMethod;
import static io.ballerina.lib.data.yaml.utils.DataReader.resolveNextMethod;

/**
* This class is used to convert json inform of string, byte[], byte-stream to record or json type.
*
Expand Down Expand Up @@ -69,10 +71,17 @@ public static Object parseBytes(BArray yaml, BMap<BString, Object> options, BTyp

public static Object parseStream(Environment env, BStream yaml, BMap<BString, Object> options, BTypedesc typed) {
final BObject iteratorObj = yaml.getIteratorObj();
final Future future = env.markAsync();
DataReaderTask task = new DataReaderTask(env, iteratorObj, future, typed, options);
DataReaderThreadPool.EXECUTOR_SERVICE.submit(task);
return null;
try {
BallerinaByteBlockInputStream byteBlockSteam = new BallerinaByteBlockInputStream(env,
iteratorObj, resolveNextMethod(iteratorObj), resolveCloseMethod(iteratorObj));
Object result = YamlParser.compose(new InputStreamReader(byteBlockSteam), options, typed);
if (byteBlockSteam.getError() != null) {
return byteBlockSteam.getError();
}
return result;
} catch (Exception e) {
return DiagnosticLog.getYamlError("Error occurred while reading the stream: " + e.getMessage());
}
}

public static Object toYamlStringArray(Object yamlValue, BMap<BString, Object> config) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,7 @@

import io.ballerina.lib.data.yaml.utils.DiagnosticLog;
import io.ballerina.runtime.api.Environment;
import io.ballerina.runtime.api.async.Callback;
import io.ballerina.runtime.api.async.StrandMetadata;
import io.ballerina.runtime.api.types.MethodType;
import io.ballerina.runtime.api.types.Type;
import io.ballerina.runtime.api.values.BArray;
import io.ballerina.runtime.api.values.BError;
import io.ballerina.runtime.api.values.BMap;
Expand All @@ -33,43 +30,30 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.Semaphore;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Consumer;

public class BallerinaByteBlockInputStream extends InputStream {

private final BObject iterator;
private final Environment env;
private final String nextMethodName;
private final Type returnType;
private final String strandName;
private final StrandMetadata metadata;
private final Map<String, Object> properties;
private final AtomicBoolean done = new AtomicBoolean(false);
private boolean done = false;
private final MethodType closeMethod;
private final Consumer<Object> futureResultConsumer;
private BError error = null;

private byte[] currentChunk = new byte[0];
private int nextChunkIndex = 0;

public BallerinaByteBlockInputStream(Environment env, BObject iterator, MethodType nextMethod,
MethodType closeMethod, Consumer<Object> futureResultConsumer) {
MethodType closeMethod) {
this.env = env;
this.iterator = iterator;
this.nextMethodName = nextMethod.getName();
this.returnType = nextMethod.getReturnType();
this.closeMethod = closeMethod;
this.strandName = env.getStrandName().orElse("");
this.metadata = env.getStrandMetadata();
this.properties = Map.of();
this.futureResultConsumer = futureResultConsumer;
}

@Override
public int read() {
if (done.get()) {
if (this.done) {
return -1;
}
if (hasBytesInCurrentChunk()) {
Expand All @@ -82,8 +66,7 @@ public int read() {
return read();
}
} catch (InterruptedException e) {
BError error = DiagnosticLog.getYamlError("Cannot read the stream, interrupted error");
futureResultConsumer.accept(error);
this.error = DiagnosticLog.getYamlError("Cannot read the stream, interrupted error");
return -1;
}
return -1;
Expand All @@ -92,25 +75,8 @@ public int read() {
@Override
public void close() throws IOException {
super.close();
Semaphore semaphore = new Semaphore(0);
if (closeMethod != null) {
env.getRuntime().invokeMethodAsyncSequentially(iterator, closeMethod.getName(), strandName, metadata,
new Callback() {
@Override
public void notifyFailure(BError bError) {
semaphore.release();
}

@Override
public void notifySuccess(Object result) {
semaphore.release();
}
}, properties, returnType);
}
try {
semaphore.acquire();
} catch (InterruptedException e) {
throw new IOException("Error while closing the stream", e);
env.getRuntime().callMethod(iterator, closeMethod.getName(), null);
}
}

Expand All @@ -119,44 +85,32 @@ private boolean hasBytesInCurrentChunk() {
}

private boolean readNextChunk() throws InterruptedException {
Semaphore semaphore = new Semaphore(0);
Callback callback = new Callback() {

@Override
public void notifyFailure(BError bError) {
// Panic with an error
done.set(true);
futureResultConsumer.accept(bError);
currentChunk = new byte[0];
semaphore.release();
// TODO : Should we panic here?
try {
Object result = env.getRuntime().callMethod(iterator, nextMethodName, null);
if (result == null) {
this.done = true;
return true;
}

@Override
public void notifySuccess(Object result) {
if (result == null) {
done.set(true);
currentChunk = new byte[0];
semaphore.release();
return;
}
if (result instanceof BMap<?, ?>) {
BMap<BString, Object> valueRecord = (BMap<BString, Object>) result;
final BString value = Arrays.stream(valueRecord.getKeys()).findFirst().get();
final BArray arrayValue = valueRecord.getArrayValue(value);
currentChunk = arrayValue.getByteArray();
semaphore.release();
} else {
// Case where Completes with an error
done.set(true);
semaphore.release();
}
if (result instanceof BMap<?, ?>) {
BMap<BString, Object> valueRecord = (BMap<BString, Object>) result;
final BString value = Arrays.stream(valueRecord.getKeys()).findFirst().get();
final BArray arrayValue = valueRecord.getArrayValue(value);
currentChunk = arrayValue.getByteArray();
} else {
// Case where Completes with an error
this.done = true;
}
} catch (BError bError) {
// Panic with an error
this.done = true;
currentChunk = new byte[0];
// TODO : Should we panic here?
}

return !this.done;
}

};
env.getRuntime().invokeMethodAsyncSequentially(iterator, nextMethodName, strandName, metadata, callback,
properties, returnType);
semaphore.acquire();
return !done.get();
public BError getError() {
return this.error;
}
}
Loading

0 comments on commit c0d9a77

Please sign in to comment.