Default to safe file writing (write-then-move) and fix AdapterAdapter not importing
ci/woodpecker/push/woodpecker Pipeline was successful
Details
ci/woodpecker/push/woodpecker Pipeline was successful
Details
This commit is contained in:
parent
5294d82318
commit
d1d9707add
|
@ -24,7 +24,7 @@ import java.util.stream.Collectors;
|
|||
|
||||
@SupportedSourceVersion(SourceVersion.RELEASE_17)
|
||||
@SupportedAnnotationTypes2({GSerializable.class})
|
||||
@SupportedOptions({"gsonCompileNoReflect"})
|
||||
@SupportedOptions({"gsonCompileNoReflect", "gsonCompileDisableSafe"})
|
||||
public class GsonCompileProcessor extends AbstractProcessor2 {
|
||||
private Map<ClassName, TypeSpec.Builder> seen;
|
||||
private InstanceProcessor instanceProcessor;
|
||||
|
@ -38,8 +38,9 @@ public class GsonCompileProcessor extends AbstractProcessor2 {
|
|||
for (Adapter adapter : Adapters.ADAPTERS) {
|
||||
adapter.init(processingEnv);
|
||||
}
|
||||
instanceProcessor = new InstanceProcessor(valueCreator, message, hasManifold);
|
||||
staticProcessor = new StaticProcessor(valueCreator, message, hasManifold);
|
||||
boolean gsonCompileDisableSafe = options.containsKey("gsonCompileDisableSafe");
|
||||
instanceProcessor = new InstanceProcessor(valueCreator, message, hasManifold, gsonCompileDisableSafe);
|
||||
staticProcessor = new StaticProcessor(valueCreator, message, hasManifold, gsonCompileDisableSafe);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -6,31 +6,32 @@ import io.gitlab.jfronny.gson.compile.processor.core.TypeHelper;
|
|||
|
||||
import javax.lang.model.type.TypeMirror;
|
||||
import java.lang.reflect.ParameterizedType;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
public abstract class AdapterAdapter<T extends AdapterAdapter<T>.Hydrated> extends Adapter<T> {
|
||||
public abstract class Hydrated extends Adapter<T>.Hydrated {
|
||||
@Override
|
||||
public void generateWrite(Runnable writeGet) {
|
||||
code.add("$L.write(", getAdapter());
|
||||
Object adapter = getAdapter();
|
||||
code.add("$" + (adapter instanceof String ? "L" : "T") + ".write(", adapter);
|
||||
writeGet.run();
|
||||
code.add(", writer);\n");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateRead() {
|
||||
code.add("$L.read(reader)", getAdapter());
|
||||
Object adapter = getAdapter();
|
||||
code.add("$" + (adapter instanceof String ? "L" : "T") + ".read(reader)", adapter);
|
||||
}
|
||||
|
||||
private String getAdapter() {
|
||||
private Object getAdapter() {
|
||||
for (FieldSpec spec : klazz.fieldSpecs) {
|
||||
if (spec.name.equals(adapterName)) return adapterName;
|
||||
}
|
||||
return createAdapter(adapterName);
|
||||
}
|
||||
|
||||
protected abstract String createAdapter(String name);
|
||||
protected abstract Object createAdapter(String name);
|
||||
|
||||
protected void appendFieldTypeToken(boolean allowClassType) {
|
||||
TypeName typeName = TypeName.get(type);
|
||||
|
|
|
@ -31,8 +31,8 @@ public class DeclaredAdapter extends AdapterAdapter<DeclaredAdapter.Hydrated> {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String createAdapter(String typeAdapterName) {
|
||||
return TypeName.get(typeAdapterClass).toString();
|
||||
protected TypeName createAdapter(String typeAdapterName) {
|
||||
return TypeName.get(typeAdapterClass);
|
||||
}
|
||||
|
||||
private static DeclaredType findTypeAdapterClass(List<? extends AnnotationMirror> annotations) {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package io.gitlab.jfronny.gson.compile.processor.adapter.impl;
|
||||
|
||||
import com.squareup.javapoet.ClassName;
|
||||
import com.squareup.javapoet.TypeName;
|
||||
import io.gitlab.jfronny.gson.compile.processor.SerializableClass;
|
||||
import io.gitlab.jfronny.gson.compile.processor.adapter.AdapterAdapter;
|
||||
|
@ -11,7 +12,7 @@ public class OtherSerializableAdapter extends AdapterAdapter<OtherSerializableAd
|
|||
}
|
||||
|
||||
public class Hydrated extends AdapterAdapter<Hydrated>.Hydrated {
|
||||
private String adapter;
|
||||
private ClassName adapter;
|
||||
|
||||
@Override
|
||||
public boolean applies() {
|
||||
|
@ -19,7 +20,7 @@ public class OtherSerializableAdapter extends AdapterAdapter<OtherSerializableAd
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String createAdapter(String name) {
|
||||
protected ClassName createAdapter(String name) {
|
||||
return adapter;
|
||||
}
|
||||
|
||||
|
@ -28,7 +29,7 @@ public class OtherSerializableAdapter extends AdapterAdapter<OtherSerializableAd
|
|||
for (SerializableClass adapter : other) {
|
||||
if (TypeName.get(adapter.classElement().asType()).equals(typeName)) {
|
||||
// Use self-made adapter
|
||||
this.adapter = adapter.generatedClassName().toString();
|
||||
this.adapter = adapter.generatedClassName();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,11 +23,13 @@ public abstract class GProcessor {
|
|||
private final boolean isStatic;
|
||||
private final String readStatement;
|
||||
private final String writeStatement;
|
||||
private final boolean gsonCompileDisableSafe;
|
||||
|
||||
public GProcessor(ValueCreator valueCreator, Messager message, boolean hasManifold, boolean isStatic) {
|
||||
public GProcessor(ValueCreator valueCreator, Messager message, boolean hasManifold, boolean isStatic, boolean gsonCompileDisableSafe) {
|
||||
this.valueCreator = valueCreator;
|
||||
this.message = message;
|
||||
this.hasManifold = hasManifold;
|
||||
this.gsonCompileDisableSafe = gsonCompileDisableSafe;
|
||||
|
||||
this.isStatic = isStatic;
|
||||
this.readStatement = isStatic ? "read(reader)" : "return read(reader)";
|
||||
|
@ -171,9 +173,17 @@ public abstract class GProcessor {
|
|||
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
|
||||
.addParameter(Path.class, "path")
|
||||
.addException(IOException.class)
|
||||
.addCode(CodeBlock.builder().beginControlFlow("try ($1T writer = $2T.newBufferedWriter(path, $3T.CREATE, $3T.WRITE, $3T.TRUNCATE_EXISTING))", BufferedWriter.class, Files.class, StandardOpenOption.class)
|
||||
.addCode(gsonCompileDisableSafe ? 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() : CodeBlock.builder()
|
||||
.addStatement("$T temp = $T.createTempFile($S, $S)", Path.class, Files.class, "gsoncompile-", ".json")
|
||||
.beginControlFlow("try ($1T writer = $2T.newBufferedWriter(temp, $3T.CREATE, $3T.WRITE, $3T.TRUNCATE_EXISTING))", BufferedWriter.class, Files.class, StandardOpenOption.class)
|
||||
.addStatement(writeStatement)
|
||||
.addStatement("$T.move(temp, path, $T.REPLACE_EXISTING)", Files.class, StandardCopyOption.class)
|
||||
.nextControlFlow("finally")
|
||||
.addStatement("$T.deleteIfExists(temp)", Files.class)
|
||||
.endControlFlow()
|
||||
.build())
|
||||
.build()
|
||||
);
|
||||
|
|
|
@ -15,8 +15,8 @@ import java.util.List;
|
|||
import java.util.Set;
|
||||
|
||||
public class InstanceProcessor extends GProcessor {
|
||||
public InstanceProcessor(ValueCreator valueCreator, Messager message, boolean hasManifold) {
|
||||
super(valueCreator, message, hasManifold, false);
|
||||
public InstanceProcessor(ValueCreator valueCreator, Messager message, boolean hasManifold, boolean gsonCompileDisableSafe) {
|
||||
super(valueCreator, message, hasManifold, false, gsonCompileDisableSafe);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -14,8 +14,8 @@ import java.util.List;
|
|||
import java.util.Set;
|
||||
|
||||
public class StaticProcessor extends GProcessor {
|
||||
public StaticProcessor(ValueCreator valueCreator, Messager message, boolean hasManifold) {
|
||||
super(valueCreator, message, hasManifold, true);
|
||||
public StaticProcessor(ValueCreator valueCreator, Messager message, boolean hasManifold, boolean gsonCompileDisableSafe) {
|
||||
super(valueCreator, message, hasManifold, true, gsonCompileDisableSafe);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in New Issue