This commit is contained in:
Andrea Cavalli 2023-01-21 22:58:31 +01:00
parent 8f8242c0f3
commit a0eb0b2f8e
3 changed files with 22 additions and 6 deletions

View File

@ -27,6 +27,7 @@ public abstract class ClassGenerator {
protected final String basePackageName; protected final String basePackageName;
private final Path outPath; private final Path outPath;
protected final boolean deepCheckBeforeCreatingNewEqualInstances; protected final boolean deepCheckBeforeCreatingNewEqualInstances;
protected final boolean useRecordBuilders;
public ClassGenerator(ClassGeneratorParams params) { public ClassGenerator(ClassGeneratorParams params) {
this.generatedFilesToDelete = params.generatedFilesToDelete; this.generatedFilesToDelete = params.generatedFilesToDelete;
@ -34,6 +35,7 @@ public abstract class ClassGenerator {
this.basePackageName = params.basePackageName; this.basePackageName = params.basePackageName;
this.outPath = params.outPath; this.outPath = params.outPath;
this.deepCheckBeforeCreatingNewEqualInstances = params.deepCheckBeforeCreatingNewEqualInstances; this.deepCheckBeforeCreatingNewEqualInstances = params.deepCheckBeforeCreatingNewEqualInstances;
this.useRecordBuilders = params.useRecordBuilders;
} }
public void run() throws IOException { public void run() throws IOException {
@ -83,5 +85,6 @@ public abstract class ClassGenerator {
DataModel dataModel, DataModel dataModel,
String basePackageName, String basePackageName,
Path outPath, Path outPath,
boolean deepCheckBeforeCreatingNewEqualInstances) {} boolean deepCheckBeforeCreatingNewEqualInstances,
boolean useRecordBuilders) {}
} }

View File

@ -113,14 +113,16 @@ public class SourcesGenerator {
var curHash = dataModel.computeHash(); var curHash = dataModel.computeHash();
if (Files.isRegularFile(hashPath) && Files.isReadable(hashPath)) { if (Files.isRegularFile(hashPath) && Files.isReadable(hashPath)) {
var lines = Files.readAllLines(hashPath, StandardCharsets.UTF_8); var lines = Files.readAllLines(hashPath, StandardCharsets.UTF_8);
if (lines.size() >= 3) { if (lines.size() >= 4) {
var prevBasePackageName = lines.get(0); var prevBasePackageName = lines.get(0);
var prevRecordBuilders = lines.get(1); var prevRecordBuilders = lines.get(1);
var prevHash = lines.get(2); var prevHash = lines.get(2);
var prevDeepCheckBeforeCreatingNewEqualInstances = lines.get(3);
if (!force if (!force
&& prevBasePackageName.equals(basePackageName) && prevBasePackageName.equals(basePackageName)
&& (prevRecordBuilders.equalsIgnoreCase("true") == useRecordBuilders) && (prevRecordBuilders.equalsIgnoreCase("true") == useRecordBuilders)
&& (prevDeepCheckBeforeCreatingNewEqualInstances.equalsIgnoreCase("true") == deepCheckBeforeCreatingNewEqualInstances)
&& prevHash.equals(Integer.toString(curHash))) { && prevHash.equals(Integer.toString(curHash))) {
logger.info("Skipped sources generation because it didn't change"); logger.info("Skipped sources generation because it didn't change");
return; return;
@ -146,7 +148,7 @@ public class SourcesGenerator {
.collect(Collectors.toCollection(HashSet::new)); .collect(Collectors.toCollection(HashSet::new));
} }
var genParams = new ClassGeneratorParams(generatedFilesToDelete, dataModel, basePackageName, outPath, deepCheckBeforeCreatingNewEqualInstances); var genParams = new ClassGeneratorParams(generatedFilesToDelete, dataModel, basePackageName, outPath, deepCheckBeforeCreatingNewEqualInstances, useRecordBuilders);
// Create the Versions class // Create the Versions class
new GenVersions(genParams).run(); new GenVersions(genParams).run();
@ -194,8 +196,14 @@ public class SourcesGenerator {
new GenUpgraderSuperX(genParams).run(); new GenUpgraderSuperX(genParams).run();
// Update the hash at the end // Update the hash at the end
Files.writeString(hashPath, basePackageName + '\n' + useRecordBuilders + '\n' + curHash + '\n', Files.writeString(hashPath,
StandardCharsets.UTF_8, TRUNCATE_EXISTING, WRITE, CREATE); basePackageName + '\n' + useRecordBuilders + '\n' + deepCheckBeforeCreatingNewEqualInstances + '\n' + curHash
+ '\n',
StandardCharsets.UTF_8,
TRUNCATE_EXISTING,
WRITE,
CREATE
);
generatedFilesToDelete.remove(outPath.relativize(hashPath)); generatedFilesToDelete.remove(outPath.relativize(hashPath));
} }

View File

@ -4,6 +4,7 @@ import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.MethodSpec; import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.ParameterSpec; import com.squareup.javapoet.ParameterSpec;
import com.squareup.javapoet.TypeSpec; import com.squareup.javapoet.TypeSpec;
import io.soabase.recordbuilder.core.RecordBuilder;
import it.cavallium.data.generator.plugin.ClassGenerator; import it.cavallium.data.generator.plugin.ClassGenerator;
import it.cavallium.data.generator.plugin.ComputedTypeBase; import it.cavallium.data.generator.plugin.ComputedTypeBase;
import it.cavallium.data.generator.plugin.ComputedVersion; import it.cavallium.data.generator.plugin.ComputedVersion;
@ -37,6 +38,10 @@ public class GenDataBaseX extends ClassGenerator {
classBuilder.addModifiers(Modifier.PUBLIC); classBuilder.addModifiers(Modifier.PUBLIC);
if (useRecordBuilders && base.getVersion().isCurrent()) {
classBuilder.addAnnotation(RecordBuilder.class);
}
var baseTypeClass = ClassName.get(dataModel.getRootPackage(basePackageName), "BaseType"); var baseTypeClass = ClassName.get(dataModel.getRootPackage(basePackageName), "BaseType");
dataModel.getTypeSameVersions(base).forEach(v -> { dataModel.getTypeSameVersions(base).forEach(v -> {