fix(serialize-generator): initial support for some use cases with generics
ci/woodpecker/push/woodpecker Pipeline was successful
Details
ci/woodpecker/push/woodpecker Pipeline was successful
Details
This commit is contained in:
parent
78ec439ccb
commit
1a436343da
|
@ -232,8 +232,8 @@ public class SerializeGeneratorProcessor extends AbstractProcessor2 {
|
||||||
|
|
||||||
TypeSpec.Builder spec = TypeSpec.classBuilder(toProcess.generatedClassName().simpleName())
|
TypeSpec.Builder spec = TypeSpec.classBuilder(toProcess.generatedClassName().simpleName())
|
||||||
.addOriginatingElement(toProcess.classElement())
|
.addOriginatingElement(toProcess.classElement())
|
||||||
.addModifiers(Modifier.PUBLIC)
|
.addModifiers(Modifier.PUBLIC);
|
||||||
.addTypeVariables(typeVariables);
|
// .addTypeVariables(typeVariables);
|
||||||
|
|
||||||
seen.put(toProcess.generatedClassName(), spec);
|
seen.put(toProcess.generatedClassName(), spec);
|
||||||
|
|
||||||
|
@ -245,7 +245,7 @@ public class SerializeGeneratorProcessor extends AbstractProcessor2 {
|
||||||
if (toProcess.generateAdapter()) {
|
if (toProcess.generateAdapter()) {
|
||||||
generatedAdapters.add(processor.generateDelegatingAdapter(spec, classType, toProcess.generatedClassName()));
|
generatedAdapters.add(processor.generateDelegatingAdapter(spec, classType, toProcess.generatedClassName()));
|
||||||
}
|
}
|
||||||
processor.generateSerialisation(spec, toProcess, typeVariables, other);
|
processor.generateSerialisation(spec, toProcess, typeVariables, other); //TODO fix type annotations
|
||||||
}
|
}
|
||||||
|
|
||||||
processor.generateAuxiliary(spec, classType, toProcess.configure());
|
processor.generateAuxiliary(spec, classType, toProcess.configure());
|
||||||
|
|
|
@ -102,6 +102,14 @@ public abstract class GProcessor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected TypeName nonGeneric(TypeName from) {
|
||||||
|
if (from instanceof ParameterizedTypeName pn) {
|
||||||
|
//TODO be more clever
|
||||||
|
return ParameterizedTypeName.get(pn.rawType, pn.typeArguments.stream().map(s -> WildcardTypeName.subtypeOf(Object.class)).toArray(TypeName[]::new)).annotated(pn.annotations);
|
||||||
|
}
|
||||||
|
return from;
|
||||||
|
}
|
||||||
|
|
||||||
public void generateDelegateToAdapter(TypeSpec.Builder spec, TypeName classType, TypeMirror adapter, boolean isStatic) {
|
public void generateDelegateToAdapter(TypeSpec.Builder spec, TypeName classType, TypeMirror adapter, boolean isStatic) {
|
||||||
if (!isStatic) {
|
if (!isStatic) {
|
||||||
spec.addField(
|
spec.addField(
|
||||||
|
@ -110,6 +118,7 @@ public abstract class GProcessor {
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
classType = nonGeneric(classType);
|
||||||
spec.addMethod(
|
spec.addMethod(
|
||||||
extension(MethodSpec.methodBuilder("deserialize"))
|
extension(MethodSpec.methodBuilder("deserialize"))
|
||||||
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
|
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
|
||||||
|
@ -136,6 +145,7 @@ public abstract class GProcessor {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generateAuxiliary(TypeSpec.Builder spec, TypeName classType, TypeMirror configure) {
|
public void generateAuxiliary(TypeSpec.Builder spec, TypeName classType, TypeMirror configure) {
|
||||||
|
classType = nonGeneric(classType);
|
||||||
final UnaryOperator<CodeBlock.Builder> configureReader = cb -> {
|
final UnaryOperator<CodeBlock.Builder> configureReader = cb -> {
|
||||||
if (configure != null) cb.addStatement("$T.configure(reader)", configure);
|
if (configure != null) cb.addStatement("$T.configure(reader)", configure);
|
||||||
return cb;
|
return cb;
|
||||||
|
|
|
@ -20,6 +20,7 @@ public class InstanceProcessor extends GProcessor {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ClassName generateDelegatingAdapter(TypeSpec.Builder spec, TypeName classType, ClassName generatedClassName) {
|
public ClassName generateDelegatingAdapter(TypeSpec.Builder spec, TypeName classType, ClassName generatedClassName) {
|
||||||
|
classType = nonGeneric(classType);
|
||||||
spec.addType(
|
spec.addType(
|
||||||
TypeSpec.classBuilder("Adapter")
|
TypeSpec.classBuilder("Adapter")
|
||||||
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
|
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
|
||||||
|
|
Loading…
Reference in New Issue