diff --git a/blackbox-aspect/pom.xml b/blackbox-aspect/pom.xml index 113f2ca6..07aa434a 100644 --- a/blackbox-aspect/pom.xml +++ b/blackbox-aspect/pom.xml @@ -5,7 +5,7 @@ avaje-inject-parent io.avaje - 10.5-RC2 + 10.5-RC3 4.0.0 diff --git a/blackbox-other/pom.xml b/blackbox-other/pom.xml index 451e147c..83982371 100644 --- a/blackbox-other/pom.xml +++ b/blackbox-other/pom.xml @@ -6,7 +6,7 @@ avaje-inject-parent io.avaje - 10.5-RC2 + 10.5-RC3 blackbox-other diff --git a/blackbox-test-inject/pom.xml b/blackbox-test-inject/pom.xml index a4ff784f..56380d28 100644 --- a/blackbox-test-inject/pom.xml +++ b/blackbox-test-inject/pom.xml @@ -5,7 +5,7 @@ avaje-inject-parent io.avaje - 10.5-RC2 + 10.5-RC3 4.0.0 diff --git a/inject-aop/pom.xml b/inject-aop/pom.xml index e96cfc0d..3d03e31b 100644 --- a/inject-aop/pom.xml +++ b/inject-aop/pom.xml @@ -5,7 +5,7 @@ io.avaje avaje-inject-parent - 10.5-RC2 + 10.5-RC3 avaje-inject-aop diff --git a/inject-events/pom.xml b/inject-events/pom.xml index a69af056..b41dabe5 100644 --- a/inject-events/pom.xml +++ b/inject-events/pom.xml @@ -3,7 +3,7 @@ io.avaje avaje-inject-parent - 10.5-RC2 + 10.5-RC3 avaje-inject-events avaje inject events diff --git a/inject-generator/pom.xml b/inject-generator/pom.xml index 7ac3765c..24451303 100644 --- a/inject-generator/pom.xml +++ b/inject-generator/pom.xml @@ -6,7 +6,7 @@ io.avaje avaje-inject-parent - 10.5-RC2 + 10.5-RC3 avaje-inject-generator diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/MetaData.java b/inject-generator/src/main/java/io/avaje/inject/generator/MetaData.java index 0b03d1e4..153b278f 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/MetaData.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/MetaData.java @@ -8,10 +8,14 @@ /** * Holds the data as per @DependencyMeta */ -final class MetaData { +final class MetaData implements Comparable { - private static final String INDENT = " "; + private static final Comparator COMPARATOR = + Comparator.comparing(MetaData::type) + .thenComparing(MetaData::name, Comparator.nullsFirst(Comparator.naturalOrder())) + .thenComparing(MetaData::compareProvides); + private static final String INDENT = " "; private static final String NEWLINE = "\n"; private final String type; @@ -314,4 +318,13 @@ void markWithExternalDependency(String name) { } } } + + private String compareProvides() { + return provides.toString(); + } + + @Override + public int compareTo(MetaData meta) { + return COMPARATOR.compare(this, meta); + } } diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/ScopeInfo.java b/inject-generator/src/main/java/io/avaje/inject/generator/ScopeInfo.java index b1a71add..054206bd 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/ScopeInfo.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/ScopeInfo.java @@ -3,14 +3,8 @@ import static io.avaje.inject.generator.ProcessingContext.*; import static io.avaje.inject.generator.APContext.*; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; +import java.util.stream.Collectors; import javax.annotation.processing.FilerException; import javax.lang.model.element.Element; @@ -48,7 +42,7 @@ String type() { /** * Map to merge the existing meta data with partially compiled code. Keyed by type and qualifier/name. */ - private final Map metaData = new LinkedHashMap<>(); + private final Map metaData = new HashMap<>(); private final Map constructorDependencies = new LinkedHashMap<>(); private final List beanReaders = new ArrayList<>(); private final Set readBeans = new HashSet<>(); @@ -228,7 +222,7 @@ void writeModule() { if (moduleWritten) { return; } - final Collection meta = metaData.values(); + final Collection meta = metaData.values().stream().sorted().collect(Collectors.toList()); if (emptyModule) { // typically nothing in the default scope, only custom scopes if (meta.size() > 0) { diff --git a/inject-generator/src/test/java/io/avaje/inject/generator/MetaDataCompareToTest.java b/inject-generator/src/test/java/io/avaje/inject/generator/MetaDataCompareToTest.java new file mode 100644 index 00000000..286fa6bd --- /dev/null +++ b/inject-generator/src/test/java/io/avaje/inject/generator/MetaDataCompareToTest.java @@ -0,0 +1,53 @@ +package io.avaje.inject.generator; + +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +class MetaDataCompareToTest { + + MetaData foo = new MetaData("foo.Foo", null); + MetaData fooEq = new MetaData("foo.Foo", null); + MetaData fooA = new MetaData("foo.Foo", "a"); + MetaData fooAEq = new MetaData("foo.Foo", "a"); + MetaData bar = new MetaData("b.Bar", null); + MetaData fooProv = new MetaData("foo.Foo", null); + MetaData fooProv2 = new MetaData("foo.Foo", null); + MetaData fooProv3 = new MetaData("foo.Foo", null); + + MetaDataCompareToTest() { + fooProv.setProvides(List.of("bar.Bar")); + fooProv2.setProvides(List.of("bar.Bar")); + fooProv3.setProvides(List.of("bar.Bar", "b.B2")); + } + + @Test + void compareTo_equals() { + assertThat(foo.compareTo(fooEq)).describedAs("type only").isEqualTo(0); + assertThat(fooA.compareTo(fooAEq)).describedAs("type and name").isEqualTo(0); + assertThat(fooProv.compareTo(fooProv2)).describedAs("type and name and provides").isEqualTo(0); + } + + @Test + void compareTo_differentType() { + assertEquals(4, foo.compareTo(bar)); + assertEquals(-4, bar.compareTo(foo)); + } + + @Test + void compareTo_differentName() { + assertEquals(-1, foo.compareTo(fooA)); + assertEquals(1, fooA.compareTo(foo)); + } + + @Test + void compareTo_differentProvides() { + assertEquals(5, fooProv.compareTo(foo)); + assertEquals(-5, foo.compareTo(fooProv)); + assertEquals(49, fooProv.compareTo(fooProv3)); + assertEquals(-49, fooProv3.compareTo(fooProv)); + } +} diff --git a/inject-maven-plugin/pom.xml b/inject-maven-plugin/pom.xml index 3ec01e0e..790e95c4 100644 --- a/inject-maven-plugin/pom.xml +++ b/inject-maven-plugin/pom.xml @@ -4,7 +4,7 @@ avaje-inject-parent io.avaje - 10.5-RC2 + 10.5-RC3 avaje-inject-maven-plugin diff --git a/inject-test/pom.xml b/inject-test/pom.xml index 87990e8b..99520a73 100644 --- a/inject-test/pom.xml +++ b/inject-test/pom.xml @@ -4,7 +4,7 @@ io.avaje avaje-inject-parent - 10.5-RC2 + 10.5-RC3 avaje-inject-test diff --git a/inject/pom.xml b/inject/pom.xml index 4d9df8e6..0f85c2f7 100644 --- a/inject/pom.xml +++ b/inject/pom.xml @@ -4,7 +4,7 @@ io.avaje avaje-inject-parent - 10.5-RC2 + 10.5-RC3 avaje-inject diff --git a/pom.xml b/pom.xml index 5c0ccd33..9a868738 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 io.avaje avaje-inject-parent - 10.5-RC2 + 10.5-RC3 pom avaje inject parent parent pom for avaje inject library