![JAR search and dependency download from the Maven repository](/logo.png)
net.zerobuilder.compiler.generate.DtoRegularParameter Maven / Gradle / Ivy
package net.zerobuilder.compiler.generate;
import com.squareup.javapoet.TypeName;
import net.zerobuilder.NullPolicy;
import net.zerobuilder.compiler.generate.DtoParameter.AbstractParameter;
import net.zerobuilder.compiler.generate.DtoParameter.ParameterCases;
import net.zerobuilder.compiler.generate.DtoProjectedParameter.AbstractProjectedParameter;
import net.zerobuilder.compiler.generate.DtoProjectionInfo.ProjectionInfo;
import java.util.Optional;
import java.util.function.Function;
public final class DtoRegularParameter {
interface RegularParameterCases {
R simpleParameter(SimpleParameter parameter);
R projectedParameter(ProjectedParameter parameter);
}
static Function asFunction(RegularParameterCases cases) {
return parameter -> parameter.acceptRegularParameter(cases);
}
static Function regularParameterCases(
Function simpleParameter,
Function projectedParameter) {
return asFunction(new RegularParameterCases() {
@Override
public R simpleParameter(SimpleParameter parameter) {
return simpleParameter.apply(parameter);
}
@Override
public R projectedParameter(ProjectedParameter parameter) {
return projectedParameter.apply(parameter);
}
});
}
private static final Function> projectionInfo =
regularParameterCases(
simpleParameter -> Optional.empty(),
projectedParameter -> Optional.of(projectedParameter.projectionInfo));
/**
* Represents one method (or constructor) parameter.
*/
public static abstract class AbstractRegularParameter extends AbstractParameter {
/**
* original parameter name
*/
public final String name;
private AbstractRegularParameter(String name, TypeName type, NullPolicy nullPolicy) {
super(type, nullPolicy);
this.name = name;
}
public final Optional projectionInfo() {
return projectionInfo.apply(this);
}
@Override
public final String name() {
return name;
}
@Override
public final R acceptParameter(ParameterCases cases) {
return cases.regularParameter(this);
}
public abstract R acceptRegularParameter(RegularParameterCases cases);
}
public static final class ProjectedParameter extends AbstractRegularParameter implements AbstractProjectedParameter {
final ProjectionInfo projectionInfo;
private ProjectedParameter(String name, TypeName type, NullPolicy nullPolicy, ProjectionInfo projectionInfo) {
super(name, type, nullPolicy);
this.projectionInfo = projectionInfo;
}
@Override
public R acceptRegularParameter(RegularParameterCases cases) {
return cases.projectedParameter(this);
}
@Override
public R acceptProjected(DtoProjectedParameter.ProjectedParameterCases cases) {
return cases.projectedRegular(this);
}
}
public static final class SimpleParameter extends AbstractRegularParameter {
private SimpleParameter(String name, TypeName type, NullPolicy nullPolicy) {
super(name, type, nullPolicy);
}
@Override
public R acceptRegularParameter(RegularParameterCases cases) {
return cases.simpleParameter(this);
}
}
/**
* Creates a parameter without projection info.
*
* @param name parameter name
* @param type parameter type
* @param nullPolicy null policy
* @return a parameter
*/
public static SimpleParameter create(String name, TypeName type, NullPolicy nullPolicy) {
return new SimpleParameter(name, type, nullPolicy);
}
/**
* Creates a parameter with projection info.
*
* @param name parameter name
* @param type parameter type
* @param nullPolicy null policy
* @param projectionInfo projection info
* @return a parameter
*/
public static ProjectedParameter create(String name, TypeName type, NullPolicy nullPolicy, ProjectionInfo projectionInfo) {
return new ProjectedParameter(name, type, nullPolicy, projectionInfo);
}
private DtoRegularParameter() {
throw new UnsupportedOperationException("no instances");
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy