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

45 lines
1.3 KiB
Java
Raw Normal View History

2023-01-19 01:36:57 +01:00
package it.cavallium.data.generator.plugin;
2023-01-20 01:14:37 +01:00
import com.squareup.javapoet.TypeName;
import it.cavallium.data.generator.plugin.ComputedType.VersionedComputedType;
2023-01-19 01:36:57 +01:00
import java.util.stream.Stream;
2023-01-20 01:14:37 +01:00
public sealed interface ComputedType permits VersionedComputedType, ComputedTypeArray, ComputedTypeCustom,
ComputedTypeNative, ComputedTypeNullable {
2023-01-19 01:36:57 +01:00
String getName();
2023-01-20 01:14:37 +01:00
TypeName getJTypeName(String basePackageName);
2023-01-19 01:36:57 +01:00
2023-01-20 01:14:37 +01:00
TypeName getJSerializerName(String basePackageName);
2023-01-19 01:36:57 +01:00
2023-01-20 01:14:37 +01:00
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);
2023-01-19 01:36:57 +01:00
}
/**
* Get all types that are required by this type
*/
Stream<ComputedType> getDependencies();
/**
* Get all types that require this type
*/
Stream<ComputedType> getDependents();
}