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

56 lines
1.6 KiB
Java
Raw Normal View History

2023-04-20 10:11:12 +02:00
package it.cavallium.datagen.plugin;
2023-01-19 01:36:57 +01:00
2023-01-21 18:44:49 +01:00
import com.squareup.javapoet.CodeBlock;
2023-01-20 01:14:37 +01:00
import com.squareup.javapoet.TypeName;
2023-04-20 10:11:12 +02:00
import it.cavallium.datagen.plugin.ComputedType.VersionedComputedType;
2023-01-21 21:00:40 +01:00
import java.util.LinkedHashMap;
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);
2023-01-21 18:44:49 +01:00
default CodeBlock wrapWithUpgrade(String basePackageName, CodeBlock content, ComputedType next) {
return content;
}
2023-01-20 01:14:37 +01:00
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();
}
2023-01-21 21:00:40 +01:00
ComputedType withChangeAtVersion(ComputedVersion version, VersionChangeChecker versionChangeChecker,
LinkedHashMap<String, VersionedType> data);
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();
2023-01-21 01:15:05 +01:00
default boolean isPrimitive() {
return false;
}
2023-01-19 01:36:57 +01:00
}