mirror of
https://github.com/hexedtech/codemp.git
synced 2024-11-22 15:24:48 +01:00
fix(java): fixed broken config and textchange conversions
This commit is contained in:
parent
c5ab72280a
commit
7c92b94a07
5 changed files with 62 additions and 19 deletions
44
dist/java/build.gradle
vendored
44
dist/java/build.gradle
vendored
|
@ -57,3 +57,47 @@ tasks.register('cargoBuild', Exec) {
|
||||||
|
|
||||||
processResources.dependsOn cargoBuild
|
processResources.dependsOn cargoBuild
|
||||||
build.finalizedBy shadowJar
|
build.finalizedBy shadowJar
|
||||||
|
|
||||||
|
publishing {
|
||||||
|
publications {
|
||||||
|
mavenJava(MavenPublication) {
|
||||||
|
artifactId = 'my-library'
|
||||||
|
from components.java
|
||||||
|
versionMapping {
|
||||||
|
usage('java-api') {
|
||||||
|
fromResolutionOf('runtimeClasspath')
|
||||||
|
}
|
||||||
|
usage('java-runtime') {
|
||||||
|
fromResolutionResult()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pom {
|
||||||
|
name = 'My Library'
|
||||||
|
description = 'A concise description of my library'
|
||||||
|
url = 'http://www.example.com/library'
|
||||||
|
properties = [
|
||||||
|
myProp: "value",
|
||||||
|
"prop.with.dots": "anotherValue"
|
||||||
|
]
|
||||||
|
licenses {
|
||||||
|
license {
|
||||||
|
name = 'The Apache License, Version 2.0'
|
||||||
|
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
developers {
|
||||||
|
developer {
|
||||||
|
id = 'johnd'
|
||||||
|
name = 'John Doe'
|
||||||
|
email = 'john.doe@example.com'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
scm {
|
||||||
|
connection = 'scm:git:git://example.com/my-library.git'
|
||||||
|
developerConnection = 'scm:git:ssh://example.com/my-library.git'
|
||||||
|
url = 'http://example.com/my-library/'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
1
dist/java/src/mp/code/Client.java
vendored
1
dist/java/src/mp/code/Client.java
vendored
|
@ -155,4 +155,3 @@ public final class Client {
|
||||||
Extensions.loadLibraryIfNotPresent();
|
Extensions.loadLibraryIfNotPresent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
10
dist/java/src/mp/code/data/Config.java
vendored
10
dist/java/src/mp/code/data/Config.java
vendored
|
@ -47,7 +47,7 @@ public class Config {
|
||||||
* @param username the username
|
* @param username the username
|
||||||
* @param password the password
|
* @param password the password
|
||||||
* @param host the host server
|
* @param host the host server
|
||||||
* @param port the port CodeMP is running on, must be between 0 and 65535
|
* @param port the port CodeMP is running on, must be between 0 and 65535 (will be clamped)
|
||||||
* @param tls whether to use TLS
|
* @param tls whether to use TLS
|
||||||
*/
|
*/
|
||||||
public Config(String username, String password, String host, int port, boolean tls) {
|
public Config(String username, String password, String host, int port, boolean tls) {
|
||||||
|
@ -55,14 +55,8 @@ public class Config {
|
||||||
username,
|
username,
|
||||||
password,
|
password,
|
||||||
Optional.of(host),
|
Optional.of(host),
|
||||||
OptionalInt.of(checkPort(port)),
|
OptionalInt.of(port),
|
||||||
Optional.of(tls)
|
Optional.of(tls)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int checkPort(int port) {
|
|
||||||
if(port < 0 || port > 65535)
|
|
||||||
throw new IllegalArgumentException("Port value must be between 0 and 65535!");
|
|
||||||
return port;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
10
dist/java/src/mp/code/data/TextChange.java
vendored
10
dist/java/src/mp/code/data/TextChange.java
vendored
|
@ -19,13 +19,13 @@ public class TextChange {
|
||||||
* The starting position of the change.
|
* The starting position of the change.
|
||||||
* If negative, it is clamped to 0.
|
* If negative, it is clamped to 0.
|
||||||
*/
|
*/
|
||||||
public final int start;
|
public final long start;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The endomg position of the change.
|
* The endomg position of the change.
|
||||||
* If negative, it is clamped to 0.
|
* If negative, it is clamped to 0.
|
||||||
*/
|
*/
|
||||||
public final int end;
|
public final long end;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The content of the change.
|
* The content of the change.
|
||||||
|
@ -74,14 +74,14 @@ public class TextChange {
|
||||||
* @return the mutated string
|
* @return the mutated string
|
||||||
*/
|
*/
|
||||||
public String apply(String input) {
|
public String apply(String input) {
|
||||||
int preIndex = Math.min(this.start, input.length());
|
long preIndex = Math.min(this.start, input.length());
|
||||||
String pre = "";
|
String pre = "";
|
||||||
try {
|
try {
|
||||||
pre = input.substring(0, preIndex);
|
pre = input.substring(0, (int) preIndex);
|
||||||
} catch(IndexOutOfBoundsException ignored) {}
|
} catch(IndexOutOfBoundsException ignored) {}
|
||||||
String post = "";
|
String post = "";
|
||||||
try {
|
try {
|
||||||
post = input.substring(this.end);
|
post = input.substring((int) this.end);
|
||||||
} catch(IndexOutOfBoundsException ignored) {}
|
} catch(IndexOutOfBoundsException ignored) {}
|
||||||
return pre + this.content + post;
|
return pre + this.content + post;
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,7 +126,7 @@ macro_rules! jobjectify_error {
|
||||||
fn jobjectify($self, env: &mut jni::JNIEnv<'local>) -> Result<jni::objects::JObject<'local>, jni::errors::Error> {
|
fn jobjectify($self, env: &mut jni::JNIEnv<'local>) -> Result<jni::objects::JObject<'local>, jni::errors::Error> {
|
||||||
let class = env.find_class($jclass)?;
|
let class = env.find_class($jclass)?;
|
||||||
let msg = env.new_string(format!("{:#?}", $self))?;
|
let msg = env.new_string(format!("{:#?}", $self))?;
|
||||||
env.new_object(class, "(Ljava/lang/String)V", &[jni::objects::JValueGen::Object(&msg)])
|
env.new_object(class, "(Ljava/lang/String;)V", &[jni::objects::JValueGen::Object(&msg)])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -332,7 +332,7 @@ impl<'local> Deobjectify<'local, Self> for crate::api::Config {
|
||||||
let port = {
|
let port = {
|
||||||
let jfield = env.get_field(&config, "port", "Ljava/util/OptionalInt;")?.l()?;
|
let jfield = env.get_field(&config, "port", "Ljava/util/OptionalInt;")?.l()?;
|
||||||
if env.call_method(&jfield, "isPresent", "()Z", &[])?.z()? {
|
if env.call_method(&jfield, "isPresent", "()Z", &[])?.z()? {
|
||||||
let ivalue = env.call_method(&jfield, "get", "()I", &[])?.i()?;
|
let ivalue = env.call_method(&jfield, "getAsInt", "()I", &[])?.i()?;
|
||||||
Some(ivalue.clamp(0, 65535) as u16)
|
Some(ivalue.clamp(0, 65535) as u16)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
|
@ -343,7 +343,13 @@ impl<'local> Deobjectify<'local, Self> for crate::api::Config {
|
||||||
let jfield = env.get_field(&config, "host", "Ljava/util/Optional;")?.l()?;
|
let jfield = env.get_field(&config, "host", "Ljava/util/Optional;")?.l()?;
|
||||||
if env.call_method(&jfield, "isPresent", "()Z", &[])?.z()? {
|
if env.call_method(&jfield, "isPresent", "()Z", &[])?.z()? {
|
||||||
let field = env.call_method(&jfield, "get", "()Ljava/lang/Object;", &[])?.l()?;
|
let field = env.call_method(&jfield, "get", "()Ljava/lang/Object;", &[])?.l()?;
|
||||||
Some(env.call_method(field, "booleanValue", "()Z", &[])?.z()?)
|
let bool_true = env.get_static_field("java/lang/Boolean", "TRUE", "Ljava/lang/Boolean;")?.l()?;
|
||||||
|
Some(env.call_method(
|
||||||
|
field,
|
||||||
|
"equals",
|
||||||
|
"(Ljava/lang/Object;)Z",
|
||||||
|
&[jni::objects::JValueGen::Object(&bool_true)]
|
||||||
|
)?.z()?) // what a joke
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
@ -383,8 +389,8 @@ impl<'local> Deobjectify<'local, Self> for crate::api::Cursor {
|
||||||
|
|
||||||
impl<'local> Deobjectify<'local, Self> for crate::api::TextChange {
|
impl<'local> Deobjectify<'local, Self> for crate::api::TextChange {
|
||||||
fn deobjectify(env: &mut jni::JNIEnv<'local>, change: jni::objects::JObject<'local>) -> Result<Self, jni::errors::Error> {
|
fn deobjectify(env: &mut jni::JNIEnv<'local>, change: jni::objects::JObject<'local>) -> Result<Self, jni::errors::Error> {
|
||||||
let start = env.get_field(&change, "start", "I")?.j()?.max(0) as u32;
|
let start = env.get_field(&change, "start", "J")?.j()?.clamp(0, u32::MAX.into()) as u32;
|
||||||
let end = env.get_field(&change, "end", "I")?.j()?.max(0) as u32;
|
let end = env.get_field(&change, "end", "J")?.j()?.clamp(0, u32::MAX.into()) as u32;
|
||||||
|
|
||||||
let content = {
|
let content = {
|
||||||
let jfield = env.get_field(&change, "content", "Ljava/lang/String;")?.l()?;
|
let jfield = env.get_field(&change, "content", "Ljava/lang/String;")?.l()?;
|
||||||
|
|
Loading…
Reference in a new issue