2023-04-20 10:11:12 +02:00
|
|
|
package it.cavallium.datagen.plugin.classgen;
|
2023-01-20 01:14:37 +01:00
|
|
|
|
|
|
|
import com.squareup.javapoet.ClassName;
|
|
|
|
import com.squareup.javapoet.MethodSpec;
|
|
|
|
import com.squareup.javapoet.TypeSpec;
|
2023-04-20 10:11:12 +02:00
|
|
|
import it.cavallium.datagen.plugin.ClassGenerator;
|
|
|
|
import it.cavallium.datagen.plugin.ComputedVersion;
|
2023-01-20 01:14:37 +01:00
|
|
|
import java.util.stream.Stream;
|
|
|
|
import javax.lang.model.element.Modifier;
|
|
|
|
|
|
|
|
public class GenIBaseType extends ClassGenerator {
|
|
|
|
|
|
|
|
public GenIBaseType(ClassGeneratorParams params) {
|
|
|
|
super(params);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected Stream<GeneratedClass> generateClasses() {
|
|
|
|
return dataModel.getVersionsSet().stream().map(this::generateClass);
|
|
|
|
}
|
|
|
|
|
|
|
|
private GeneratedClass generateClass(ComputedVersion version) {
|
|
|
|
var interfaceBuilder = TypeSpec.interfaceBuilder("IBaseType");
|
|
|
|
|
|
|
|
interfaceBuilder.addModifiers(Modifier.PUBLIC);
|
|
|
|
|
2023-01-21 21:00:40 +01:00
|
|
|
var iTypeClassName = ClassName.get(version.getPackage(basePackageName), "IType");
|
2023-01-20 01:14:37 +01:00
|
|
|
var baseTypeClassName = ClassName.get(dataModel.getRootPackage(basePackageName), "BaseType");
|
|
|
|
interfaceBuilder.addSuperinterface(iTypeClassName);
|
|
|
|
|
|
|
|
interfaceBuilder.addMethod(MethodSpec
|
|
|
|
.methodBuilder("getBaseType$")
|
|
|
|
.addModifiers(Modifier.ABSTRACT, Modifier.PUBLIC)
|
|
|
|
.returns(baseTypeClassName)
|
|
|
|
.build());
|
|
|
|
|
|
|
|
return new GeneratedClass(version.getPackage(basePackageName), interfaceBuilder);
|
|
|
|
}
|
|
|
|
}
|