data-generator/data-generator-plugin/src/main/java/it/cavallium/data/generator/plugin/ComputedType.java

45 lines
1.3 KiB
Java

package it.cavallium.data.generator.plugin;
import com.squareup.javapoet.TypeName;
import it.cavallium.data.generator.plugin.ComputedType.VersionedComputedType;
import java.util.stream.Stream;
public sealed interface ComputedType permits VersionedComputedType, ComputedTypeArray, ComputedTypeCustom,
ComputedTypeNative, ComputedTypeNullable {
String getName();
TypeName getJTypeName(String basePackageName);
TypeName getJSerializerName(String basePackageName);
FieldLocation getJSerializerInstance(String basePackageName);
TypeName getJUpgraderName(String basePackageName);
FieldLocation getJUpgraderInstance(String basePackageName);
sealed interface VersionedComputedType extends ComputedType permits ComputedTypeArrayVersioned, ComputedTypeBase,
ComputedTypeNullableVersioned, ComputedTypeSuper {
ComputedVersion getVersion();
default boolean shouldUpgradeAfter(ComputedVersion version) {
return !version.isCurrent() && version.getVersion() == this.getVersion().getVersion();
}
ComputedType withChangeAtVersion(ComputedVersion version, VersionChangeChecker versionChangeChecker);
}
/**
* Get all types that are required by this type
*/
Stream<ComputedType> getDependencies();
/**
* Get all types that require this type
*/
Stream<ComputedType> getDependents();
}