From a488130319ebe8ac4b3dde3cd6a1131e114f3774 Mon Sep 17 00:00:00 2001 From: Ilpo Ruotsalainen Date: Tue, 18 Dec 2018 17:24:51 +0100 Subject: Ensure packages and classes are traversed in order. This ensures the generated JSON is stable over regeneration to minimize diffs. --- .../src/main/java/com/yahoo/abicheck/mojo/AbiCheck.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'abi-check-plugin') diff --git a/abi-check-plugin/src/main/java/com/yahoo/abicheck/mojo/AbiCheck.java b/abi-check-plugin/src/main/java/com/yahoo/abicheck/mojo/AbiCheck.java index e03f4798b2a..2ee7bd495b3 100644 --- a/abi-check-plugin/src/main/java/com/yahoo/abicheck/mojo/AbiCheck.java +++ b/abi-check-plugin/src/main/java/com/yahoo/abicheck/mojo/AbiCheck.java @@ -1,5 +1,6 @@ package com.yahoo.abicheck.mojo; +import com.google.common.collect.Ordering; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; @@ -15,11 +16,14 @@ import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; +import java.util.Comparator; import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.jar.JarFile; +import java.util.stream.Collectors; import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; @@ -132,14 +136,19 @@ public class AbiCheck extends AbstractMojo { Map signatures = new LinkedHashMap<>(); if (isPublicAbiPackage(pkg, publicApiAnnotation)) { PublicSignatureCollector collector = new PublicSignatureCollector(); - for (ClassFile klazz : pkg.getClassFiles()) { + List sortedClassFiles = pkg.getClassFiles().stream() + .sorted(Comparator.comparing(ClassFile::getName)).collect(Collectors.toList()); + for (ClassFile klazz : sortedClassFiles) { try (InputStream is = klazz.getInputStream()) { new ClassReader(is).accept(collector, 0); } } signatures.putAll(collector.getClassSignatures()); } - for (ClassFileTree.Package subPkg : pkg.getSubPackages()) { + List sortedSubPackages = pkg.getSubPackages().stream() + .sorted(Comparator.comparing(Package::getFullyQualifiedName)) + .collect(Collectors.toList()); + for (ClassFileTree.Package subPkg : sortedSubPackages) { signatures.putAll(collectPublicAbiSignatures(subPkg, publicApiAnnotation)); } return signatures; -- cgit v1.2.3