Inject @This
ci/woodpecker/push/woodpecker Pipeline was successful Details

This commit is contained in:
Johannes Frohnmeyer 2022-11-23 17:41:28 +01:00
parent b46ccd5574
commit 092b5a2005
Signed by: Johannes
GPG Key ID: E76429612C2929F4
4 changed files with 51 additions and 30 deletions

View File

@ -12,7 +12,7 @@ dependencies {
compileOnly(project(":gson-compile-annotations"))
implementation(project(":gson-compile-core"))
val manifoldVersion = "2022.1.26"
val manifoldVersion = "2022.1.27"
implementation("systems.manifold:manifold-ext-rt:$manifoldVersion")
annotationProcessor("systems.manifold:manifold-ext:$manifoldVersion")

View File

@ -5,7 +5,6 @@ import io.gitlab.jfronny.gson.compile.annotations.GSerializable;
public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
ExampleRecord.read("");
}
@GSerializable

View File

@ -21,4 +21,5 @@ public class Cl {
public static final ClassName CCORE = ClassName.get("io.gitlab.jfronny.gson.compile.core", "CCore");
public static final ClassName MANIFOLD_EXTENSION = ClassName.get("manifold.ext.rt.api", "Extension");
public static final ClassName MANIFOLD_THIS = ClassName.get("manifold.ext.rt.api", "This");
}

View File

@ -232,10 +232,8 @@ public class GsonCompileProcessor extends AbstractProcessor2 {
.build()
);
spec.addMethod(
extension(MethodSpec.methodBuilder("write"))
extension(MethodSpec.methodBuilder("write"), classType, Cl.GSON_WRITER, "writer")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.addParameter(Cl.GSON_WRITER, "writer")
.addParameter(classType, "value")
.addException(IOException.class)
.addCode("$T.write(writer, value);", adapter)
.build()
@ -243,15 +241,18 @@ public class GsonCompileProcessor extends AbstractProcessor2 {
}
private void generateAuxiliary(TypeSpec.Builder spec, TypeName classType, TypeMirror configure) {
UnaryOperator<CodeBlock.Builder> configureReader = cb -> {
final UnaryOperator<CodeBlock.Builder> configureReader = cb -> {
if (configure != null) cb.addStatement("$T.configure(reader)", configure);
return cb;
};
UnaryOperator<CodeBlock.Builder> configureWriter = cb -> {
final UnaryOperator<CodeBlock.Builder> configureWriter = cb -> {
if (configure != null) cb.addStatement("$T.configure(writer)", configure);
return cb;
};
final String readStatement = "return read(reader)";
final String writeStatement = hasManifold ? "write(value, writer)" : "write(writer, value)";
spec.addMethod(
extension(MethodSpec.methodBuilder("read"))
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
@ -259,7 +260,7 @@ public class GsonCompileProcessor extends AbstractProcessor2 {
.addException(IOException.class)
.returns(classType)
.addCode(configureReader.apply(CodeBlock.builder().beginControlFlow("try ($1T reader = new $1T(in))", Cl.GSON_READER))
.addStatement("return read(reader)")
.addStatement(readStatement)
.endControlFlow()
.build())
.build()
@ -272,7 +273,7 @@ public class GsonCompileProcessor extends AbstractProcessor2 {
.addException(IOException.class)
.returns(classType)
.addCode(CodeBlock.builder().beginControlFlow("try ($1T reader = new $1T(json))", StringReader.class)
.addStatement("return read(reader)")
.addStatement(readStatement)
.endControlFlow()
.build())
.build()
@ -285,7 +286,7 @@ public class GsonCompileProcessor extends AbstractProcessor2 {
.addException(IOException.class)
.returns(classType)
.addCode(configureReader.apply(CodeBlock.builder().beginControlFlow("try ($1T reader = new $1T(tree))", Cl.GSON_TREE_READER))
.addStatement("return read(reader)")
.addStatement(readStatement)
.endControlFlow()
.build())
.build()
@ -297,47 +298,42 @@ public class GsonCompileProcessor extends AbstractProcessor2 {
.addParameter(Path.class, "path")
.addException(IOException.class)
.returns(classType)
.addCode(CodeBlock.builder().beginControlFlow("try ($T br = $T.newBufferedReader(path))", BufferedReader.class, Files.class)
.addStatement("return read(br)")
.addCode(CodeBlock.builder().beginControlFlow("try ($T reader = $T.newBufferedReader(path))", BufferedReader.class, Files.class)
.addStatement(readStatement)
.endControlFlow()
.build())
.build()
);
spec.addMethod(
extension(MethodSpec.methodBuilder("write"))
extension(MethodSpec.methodBuilder("write"), classType, Writer.class, "out")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.addParameter(Writer.class, "out")
.addParameter(classType, "value")
.addException(IOException.class)
.addCode(configureWriter.apply(CodeBlock.builder().beginControlFlow("try ($1T writer = new $1T(out))", Cl.GSON_WRITER))
.addStatement("write(writer, value)")
.addStatement(writeStatement)
.endControlFlow()
.build())
.build()
);
spec.addMethod(
extension(MethodSpec.methodBuilder("write"))
extension(MethodSpec.methodBuilder("write"), classType, Path.class, "path")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.addParameter(Path.class, "path")
.addParameter(classType, "value")
.addException(IOException.class)
.addCode(CodeBlock.builder().beginControlFlow("try ($1T bw = $2T.newBufferedWriter(path, $3T.CREATE, $3T.WRITE, $3T.TRUNCATE_EXISTING))", BufferedWriter.class, Files.class, StandardOpenOption.class)
.addStatement("write(bw, value)")
.addCode(CodeBlock.builder().beginControlFlow("try ($1T writer = $2T.newBufferedWriter(path, $3T.CREATE, $3T.WRITE, $3T.TRUNCATE_EXISTING))", BufferedWriter.class, Files.class, StandardOpenOption.class)
.addStatement(writeStatement)
.endControlFlow()
.build())
.build()
);
spec.addMethod(
extension(MethodSpec.methodBuilder("toJson"))
extension(MethodSpec.methodBuilder("toJson"), classType)
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.addParameter(classType, "value")
.addException(IOException.class)
.returns(String.class)
.addCode(CodeBlock.builder().beginControlFlow("try ($1T writer = new $1T())", StringWriter.class)
.addStatement("write(writer, value)")
.addStatement(writeStatement)
.addStatement("return writer.toString()")
.endControlFlow()
.build())
@ -345,13 +341,12 @@ public class GsonCompileProcessor extends AbstractProcessor2 {
);
spec.addMethod(
extension(MethodSpec.methodBuilder("toJsonTree"))
extension(MethodSpec.methodBuilder("toJsonTree"), classType)
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.addParameter(classType, "value")
.addException(IOException.class)
.returns(Cl.GSON_ELEMENT)
.addCode(configureWriter.apply(CodeBlock.builder().beginControlFlow("try ($1T writer = new $1T())", Cl.GSON_TREE_WRITER))
.addStatement("write(writer, value)")
.addStatement(writeStatement)
.addStatement("return writer.get()")
.endControlFlow()
.build())
@ -410,10 +405,8 @@ public class GsonCompileProcessor extends AbstractProcessor2 {
}
code.addStatement("writer.endObject()");
spec.addMethod(extension(MethodSpec.methodBuilder("write"))
spec.addMethod(extension(MethodSpec.methodBuilder("write"), self.getTypeName(), Cl.GSON_WRITER, "writer")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.addParameter(Cl.GSON_WRITER, "writer")
.addParameter(self.getTypeName(), "value")
.addException(IOException.class)
.addCode(code.build())
.build());
@ -533,4 +526,32 @@ public class GsonCompileProcessor extends AbstractProcessor2 {
if (hasManifold) method.addAnnotation(Cl.MANIFOLD_EXTENSION);
return method;
}
private MethodSpec.Builder extension(MethodSpec.Builder method, TypeName thizName) {
if (hasManifold) {
method.addAnnotation(Cl.MANIFOLD_EXTENSION);
method.addParameter(ParameterSpec.builder(thizName, "value").addAnnotation(Cl.MANIFOLD_THIS).build());
}
else {
method.addParameter(thizName, "value");
}
return method;
}
private MethodSpec.Builder extension(MethodSpec.Builder method, TypeName thizName, TypeName otherName, String other) {
if (hasManifold) {
method.addAnnotation(Cl.MANIFOLD_EXTENSION);
method.addParameter(ParameterSpec.builder(thizName, "value").addAnnotation(Cl.MANIFOLD_THIS).build())
.addParameter(otherName, other);
}
else {
method.addParameter(otherName, other)
.addParameter(thizName, "value");
}
return method;
}
private MethodSpec.Builder extension(MethodSpec.Builder method, TypeName thizName, Class<?> otherName, String other) {
return extension(method, thizName, TypeName.get(otherName), other);
}
}