From c2c47651483aa2a208802ce977e03bd8b168f294 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Tue, 19 Jul 2022 02:10:14 +0200 Subject: [PATCH] Compute hash --- .../data/generator/ClassConfiguration.java | 18 ++++++++++++++ .../generator/CustomTypesConfiguration.java | 18 ++++++++++++++ .../data/generator/DetailsConfiguration.java | 19 +++++++++++++++ .../generator/InterfaceDataConfiguration.java | 19 +++++++++++++++ .../data/generator/MoveDataConfiguration.java | 21 ++++++++++++++++ .../data/generator/NewDataConfiguration.java | 22 +++++++++++++++++ .../generator/RemoveDataConfiguration.java | 19 +++++++++++++++ .../data/generator/SourcesGenerator.java | 24 +++++++++++++++++++ .../SourcesGeneratorConfiguration.java | 18 ++++++++++++++ .../SourcesGeneratorConfigurationRefs.java | 19 +++++++++++++++ .../generator/UpgradeDataConfiguration.java | 22 +++++++++++++++++ .../data/generator/VersionConfiguration.java | 21 ++++++++++++++++ .../data/generator/VersionTransformation.java | 22 +++++++++++++++++ 13 files changed, 262 insertions(+) diff --git a/src/main/java/it/cavallium/data/generator/ClassConfiguration.java b/src/main/java/it/cavallium/data/generator/ClassConfiguration.java index fab5d0e..8c0affb 100644 --- a/src/main/java/it/cavallium/data/generator/ClassConfiguration.java +++ b/src/main/java/it/cavallium/data/generator/ClassConfiguration.java @@ -1,6 +1,7 @@ package it.cavallium.data.generator; import java.util.LinkedHashMap; +import java.util.Objects; public class ClassConfiguration { @@ -15,4 +16,21 @@ public class ClassConfiguration { public LinkedHashMap getData() { return data; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ClassConfiguration that = (ClassConfiguration) o; + return Objects.equals(stringRepresenter, that.stringRepresenter) && Objects.equals(data, that.data); + } + + @Override + public int hashCode() { + return Objects.hash(stringRepresenter, data); + } } diff --git a/src/main/java/it/cavallium/data/generator/CustomTypesConfiguration.java b/src/main/java/it/cavallium/data/generator/CustomTypesConfiguration.java index e90a658..ab41b32 100644 --- a/src/main/java/it/cavallium/data/generator/CustomTypesConfiguration.java +++ b/src/main/java/it/cavallium/data/generator/CustomTypesConfiguration.java @@ -3,6 +3,7 @@ package it.cavallium.data.generator; import com.squareup.javapoet.ClassName; import com.squareup.javapoet.ParameterizedTypeName; import com.squareup.javapoet.TypeName; +import java.util.Objects; public class CustomTypesConfiguration { @@ -29,4 +30,21 @@ public class CustomTypesConfiguration { return ParameterizedTypeName.get(base, genericsResult); } } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + CustomTypesConfiguration that = (CustomTypesConfiguration) o; + return Objects.equals(javaClass, that.javaClass) && Objects.equals(serializer, that.serializer); + } + + @Override + public int hashCode() { + return Objects.hash(javaClass, serializer); + } } diff --git a/src/main/java/it/cavallium/data/generator/DetailsConfiguration.java b/src/main/java/it/cavallium/data/generator/DetailsConfiguration.java index 9cf54d2..3b1c20e 100644 --- a/src/main/java/it/cavallium/data/generator/DetailsConfiguration.java +++ b/src/main/java/it/cavallium/data/generator/DetailsConfiguration.java @@ -1,6 +1,25 @@ package it.cavallium.data.generator; +import java.util.Objects; + public class DetailsConfiguration { public String changelog; + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DetailsConfiguration that = (DetailsConfiguration) o; + return Objects.equals(changelog, that.changelog); + } + + @Override + public int hashCode() { + return Objects.hash(changelog); + } } diff --git a/src/main/java/it/cavallium/data/generator/InterfaceDataConfiguration.java b/src/main/java/it/cavallium/data/generator/InterfaceDataConfiguration.java index 38a7e9f..cd01d01 100644 --- a/src/main/java/it/cavallium/data/generator/InterfaceDataConfiguration.java +++ b/src/main/java/it/cavallium/data/generator/InterfaceDataConfiguration.java @@ -3,6 +3,7 @@ package it.cavallium.data.generator; import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.Objects; import java.util.Set; public class InterfaceDataConfiguration { @@ -10,4 +11,22 @@ public class InterfaceDataConfiguration { public Set extendInterfaces = new HashSet<>(); public Map commonData = new HashMap<>(); public Map commonGetters = new HashMap<>(); + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InterfaceDataConfiguration that = (InterfaceDataConfiguration) o; + return Objects.equals(extendInterfaces, that.extendInterfaces) && Objects.equals(commonData, that.commonData) + && Objects.equals(commonGetters, that.commonGetters); + } + + @Override + public int hashCode() { + return Objects.hash(extendInterfaces, commonData, commonGetters); + } } diff --git a/src/main/java/it/cavallium/data/generator/MoveDataConfiguration.java b/src/main/java/it/cavallium/data/generator/MoveDataConfiguration.java index 83b6f8a..911d5ef 100644 --- a/src/main/java/it/cavallium/data/generator/MoveDataConfiguration.java +++ b/src/main/java/it/cavallium/data/generator/MoveDataConfiguration.java @@ -1,5 +1,7 @@ package it.cavallium.data.generator; +import java.util.Objects; + public class MoveDataConfiguration implements TransformationConfiguration { public String transformClass; @@ -15,4 +17,23 @@ public class MoveDataConfiguration implements TransformationConfiguration { public String getTransformName() { return "move-data"; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MoveDataConfiguration that = (MoveDataConfiguration) o; + return Objects.equals(transformClass, that.transformClass) && Objects.equals(from, that.from) && Objects.equals(to, + that.to + ); + } + + @Override + public int hashCode() { + return Objects.hash(transformClass, from, to); + } } diff --git a/src/main/java/it/cavallium/data/generator/NewDataConfiguration.java b/src/main/java/it/cavallium/data/generator/NewDataConfiguration.java index 74bb7f5..d4b808b 100644 --- a/src/main/java/it/cavallium/data/generator/NewDataConfiguration.java +++ b/src/main/java/it/cavallium/data/generator/NewDataConfiguration.java @@ -1,5 +1,7 @@ package it.cavallium.data.generator; +import java.util.Objects; + public class NewDataConfiguration implements TransformationConfiguration { public String transformClass; @@ -15,4 +17,24 @@ public class NewDataConfiguration implements TransformationConfiguration { public String getTransformName() { return "new-data"; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + NewDataConfiguration that = (NewDataConfiguration) o; + return Objects.equals(transformClass, that.transformClass) && Objects.equals(to, that.to) && Objects.equals( + initializer, + that.initializer + ); + } + + @Override + public int hashCode() { + return Objects.hash(transformClass, to, initializer); + } } diff --git a/src/main/java/it/cavallium/data/generator/RemoveDataConfiguration.java b/src/main/java/it/cavallium/data/generator/RemoveDataConfiguration.java index 33ac612..aac6750 100644 --- a/src/main/java/it/cavallium/data/generator/RemoveDataConfiguration.java +++ b/src/main/java/it/cavallium/data/generator/RemoveDataConfiguration.java @@ -1,5 +1,7 @@ package it.cavallium.data.generator; +import java.util.Objects; + public class RemoveDataConfiguration implements TransformationConfiguration { public String transformClass; @@ -14,4 +16,21 @@ public class RemoveDataConfiguration implements TransformationConfiguration { public String getTransformName() { return "remove-data"; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RemoveDataConfiguration that = (RemoveDataConfiguration) o; + return Objects.equals(transformClass, that.transformClass) && Objects.equals(from, that.from); + } + + @Override + public int hashCode() { + return Objects.hash(transformClass, from); + } } diff --git a/src/main/java/it/cavallium/data/generator/SourcesGenerator.java b/src/main/java/it/cavallium/data/generator/SourcesGenerator.java index 62411fa..f960d87 100644 --- a/src/main/java/it/cavallium/data/generator/SourcesGenerator.java +++ b/src/main/java/it/cavallium/data/generator/SourcesGenerator.java @@ -101,6 +101,26 @@ public class SourcesGenerator { * @param useRecordBuilders if true, the data will have @RecordBuilder annotation */ public void generateSources(String basePackageName, Path outPath, boolean useRecordBuilders) throws IOException { + var hashPath = outPath.resolve(".hash"); + var curHash = computeHash(this.configuration); + if (Files.isRegularFile(outPath) && Files.isReadable(outPath)) { + var lines = Files.readAllLines(hashPath, StandardCharsets.UTF_8); + if (lines.size() >= 3) { + var prevBasePackageName = lines.get(0); + var prevRecordBuilders = lines.get(1); + var prevHash = lines.get(2); + + if (prevBasePackageName.equals(basePackageName) && (prevRecordBuilders.equalsIgnoreCase("true") == useRecordBuilders) + && prevHash.equals(curHash)) { + logger.info("Skipped sources generation because it didn't change"); + return; + } + } + } + + // Update the hash + Files.writeString(hashPath, basePackageName + '\n' + useRecordBuilders + '\n' + curHash + '\n', + TRUNCATE_EXISTING, WRITE, CREATE); // Fix the configuration for (Entry interfacesDatum : configuration.interfacesData.entrySet()) { @@ -2334,6 +2354,10 @@ public class SourcesGenerator { } } + private String computeHash(SourcesGeneratorConfiguration configuration) { + return Long.toString(configuration.hashCode()); + } + private TypeName getImmutableArrayType(HashMap typeTypes, String typeString) { var type = typeTypes.get(typeString); return getImmutableArrayType(type); diff --git a/src/main/java/it/cavallium/data/generator/SourcesGeneratorConfiguration.java b/src/main/java/it/cavallium/data/generator/SourcesGeneratorConfiguration.java index b9ec745..a93a709 100644 --- a/src/main/java/it/cavallium/data/generator/SourcesGeneratorConfiguration.java +++ b/src/main/java/it/cavallium/data/generator/SourcesGeneratorConfiguration.java @@ -1,6 +1,7 @@ package it.cavallium.data.generator; import java.util.Map; +import java.util.Objects; public class SourcesGeneratorConfiguration { public String currentVersion; @@ -8,4 +9,21 @@ public class SourcesGeneratorConfiguration { public Map versions; public SourcesGeneratorConfigurationRefs refs; + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + SourcesGeneratorConfiguration that = (SourcesGeneratorConfiguration) o; + return Objects.equals(currentVersion, that.currentVersion) && Objects.equals(interfacesData, that.interfacesData) + && Objects.equals(versions, that.versions) && Objects.equals(refs, that.refs); + } + + @Override + public int hashCode() { + return Objects.hash(currentVersion, interfacesData, versions, refs); + } } diff --git a/src/main/java/it/cavallium/data/generator/SourcesGeneratorConfigurationRefs.java b/src/main/java/it/cavallium/data/generator/SourcesGeneratorConfigurationRefs.java index 707a044..0f642b8 100644 --- a/src/main/java/it/cavallium/data/generator/SourcesGeneratorConfigurationRefs.java +++ b/src/main/java/it/cavallium/data/generator/SourcesGeneratorConfigurationRefs.java @@ -2,6 +2,7 @@ package it.cavallium.data.generator; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; public class SourcesGeneratorConfigurationRefs { @@ -9,4 +10,22 @@ public class SourcesGeneratorConfigurationRefs { public Map> customTypes; public Map> classes; public Map> transformations; + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + SourcesGeneratorConfigurationRefs that = (SourcesGeneratorConfigurationRefs) o; + return Objects.equals(superTypes, that.superTypes) && Objects.equals(customTypes, that.customTypes) + && Objects.equals(classes, that.classes) && Objects.equals(transformations, that.transformations); + } + + @Override + public int hashCode() { + return Objects.hash(superTypes, customTypes, classes, transformations); + } } diff --git a/src/main/java/it/cavallium/data/generator/UpgradeDataConfiguration.java b/src/main/java/it/cavallium/data/generator/UpgradeDataConfiguration.java index 6f02595..f2b1f89 100644 --- a/src/main/java/it/cavallium/data/generator/UpgradeDataConfiguration.java +++ b/src/main/java/it/cavallium/data/generator/UpgradeDataConfiguration.java @@ -1,5 +1,7 @@ package it.cavallium.data.generator; +import java.util.Objects; + public class UpgradeDataConfiguration implements TransformationConfiguration { public String transformClass; @@ -15,4 +17,24 @@ public class UpgradeDataConfiguration implements TransformationConfiguration { public String getTransformName() { return "upgrade-data"; } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + UpgradeDataConfiguration that = (UpgradeDataConfiguration) o; + return Objects.equals(transformClass, that.transformClass) && Objects.equals(from, that.from) && Objects.equals( + upgrader, + that.upgrader + ); + } + + @Override + public int hashCode() { + return Objects.hash(transformClass, from, upgrader); + } } diff --git a/src/main/java/it/cavallium/data/generator/VersionConfiguration.java b/src/main/java/it/cavallium/data/generator/VersionConfiguration.java index cb6c4ef..9e0ac4f 100644 --- a/src/main/java/it/cavallium/data/generator/VersionConfiguration.java +++ b/src/main/java/it/cavallium/data/generator/VersionConfiguration.java @@ -2,6 +2,7 @@ package it.cavallium.data.generator; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; public class VersionConfiguration { @@ -11,4 +12,24 @@ public class VersionConfiguration { public Map customTypes; public Map classes; public List transformations; + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + VersionConfiguration that = (VersionConfiguration) o; + return Objects.equals(details, that.details) && Objects.equals(superTypes, that.superTypes) && Objects.equals( + customTypes, + that.customTypes + ) && Objects.equals(classes, that.classes) && Objects.equals(transformations, that.transformations); + } + + @Override + public int hashCode() { + return Objects.hash(details, superTypes, customTypes, classes, transformations); + } } diff --git a/src/main/java/it/cavallium/data/generator/VersionTransformation.java b/src/main/java/it/cavallium/data/generator/VersionTransformation.java index f4f465a..daa767e 100644 --- a/src/main/java/it/cavallium/data/generator/VersionTransformation.java +++ b/src/main/java/it/cavallium/data/generator/VersionTransformation.java @@ -1,5 +1,7 @@ package it.cavallium.data.generator; +import java.util.Objects; + public class VersionTransformation { public MoveDataConfiguration moveData = null; @@ -59,4 +61,24 @@ public class VersionTransformation { } throw new IllegalStateException(); } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + VersionTransformation that = (VersionTransformation) o; + return Objects.equals(moveData, that.moveData) && Objects.equals(removeData, that.removeData) && Objects.equals( + upgradeData, + that.upgradeData + ) && Objects.equals(newData, that.newData); + } + + @Override + public int hashCode() { + return Objects.hash(moveData, removeData, upgradeData, newData); + } }