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
|
|
|
}
|