![JAR search and dependency download from the Maven repository](/logo.png)
net.zerobuilder.compiler.generate.BuilderContext Maven / Gradle / Ivy
package net.zerobuilder.compiler.generate;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.FieldSpec;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeSpec;
import net.zerobuilder.compiler.generate.DtoGoalContext.AbstractGoalContext;
import java.util.List;
import java.util.function.Function;
import static com.squareup.javapoet.TypeSpec.classBuilder;
import static javax.lang.model.element.Modifier.FINAL;
import static javax.lang.model.element.Modifier.PRIVATE;
import static javax.lang.model.element.Modifier.PUBLIC;
import static javax.lang.model.element.Modifier.STATIC;
import static net.zerobuilder.compiler.generate.DtoGoalContext.abstractSteps;
import static net.zerobuilder.compiler.generate.DtoGoalContext.builderImplType;
import static net.zerobuilder.compiler.generate.DtoGoalContext.goalCases;
import static net.zerobuilder.compiler.generate.DtoGoalContext.goalName;
import static net.zerobuilder.compiler.generate.DtoGoalContext.stepInterfaceTypes;
import static net.zerobuilder.compiler.generate.StepContext.asStepInterface;
import static net.zerobuilder.compiler.generate.Utilities.constructor;
import static net.zerobuilder.compiler.generate.Utilities.transform;
final class BuilderContext {
private static final Function> fields
= goalCases(BuilderContextV.fields, BuilderContextB.fields);
private static List stepInterfaces(AbstractGoalContext goal) {
return transform(abstractSteps.apply(goal), asStepInterface);
}
private static final Function> steps
= goalCases(BuilderContextV.steps, BuilderContextB.steps);
static TypeSpec defineBuilderImpl(AbstractGoalContext goal) {
return classBuilder(builderImplType(goal))
.addSuperinterfaces(stepInterfaceTypes(goal))
.addFields(fields.apply(goal))
.addMethod(constructor(PRIVATE))
.addMethods(steps.apply(goal))
.addModifiers(STATIC, FINAL)
.build();
}
static TypeSpec defineContract(AbstractGoalContext goal) {
return classBuilder(contractName(goal))
.addTypes(stepInterfaces(goal))
.addModifiers(PUBLIC, STATIC, FINAL)
.addMethod(constructor(PRIVATE))
.build();
}
private static ClassName contractName(AbstractGoalContext goal) {
DtoBuildersContext.BuildersContext buildersContext = DtoGoalContext.buildersContext.apply(goal);
return DtoGoalContext.contractName(goalName.apply(goal), buildersContext.generatedType);
}
private BuilderContext() {
throw new UnsupportedOperationException("no instances");
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy