Skip to content

Change MetaData to be Comparable and sort to deterministic order #714

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Oct 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion blackbox-aspect/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>avaje-inject-parent</artifactId>
<groupId>io.avaje</groupId>
<version>10.5-RC2</version>
<version>10.5-RC3</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
2 changes: 1 addition & 1 deletion blackbox-other/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<artifactId>avaje-inject-parent</artifactId>
<groupId>io.avaje</groupId>
<version>10.5-RC2</version>
<version>10.5-RC3</version>
</parent>

<artifactId>blackbox-other</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion blackbox-test-inject/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>avaje-inject-parent</artifactId>
<groupId>io.avaje</groupId>
<version>10.5-RC2</version>
<version>10.5-RC3</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
2 changes: 1 addition & 1 deletion inject-aop/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>io.avaje</groupId>
<artifactId>avaje-inject-parent</artifactId>
<version>10.5-RC2</version>
<version>10.5-RC3</version>
</parent>
<artifactId>avaje-inject-aop</artifactId>
<dependencies>
Expand Down
2 changes: 1 addition & 1 deletion inject-events/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<parent>
<groupId>io.avaje</groupId>
<artifactId>avaje-inject-parent</artifactId>
<version>10.5-RC2</version>
<version>10.5-RC3</version>
</parent>
<artifactId>avaje-inject-events</artifactId>
<name>avaje inject events</name>
Expand Down
2 changes: 1 addition & 1 deletion inject-generator/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>io.avaje</groupId>
<artifactId>avaje-inject-parent</artifactId>
<version>10.5-RC2</version>
<version>10.5-RC3</version>
</parent>

<artifactId>avaje-inject-generator</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,14 @@
/**
* Holds the data as per <code>@DependencyMeta</code>
*/
final class MetaData {
final class MetaData implements Comparable<MetaData> {

private static final String INDENT = " ";
private static final Comparator<MetaData> 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;
Expand Down Expand Up @@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<String, MetaData> metaData = new LinkedHashMap<>();
private final Map<String, MetaData> metaData = new HashMap<>();
private final Map<String, String> constructorDependencies = new LinkedHashMap<>();
private final List<BeanReader> beanReaders = new ArrayList<>();
private final Set<String> readBeans = new HashSet<>();
Expand Down Expand Up @@ -228,7 +222,7 @@ void writeModule() {
if (moduleWritten) {
return;
}
final Collection<MetaData> meta = metaData.values();
final Collection<MetaData> meta = metaData.values().stream().sorted().collect(Collectors.toList());
if (emptyModule) {
// typically nothing in the default scope, only custom scopes
if (meta.size() > 0) {
Expand Down
Original file line number Diff line number Diff line change
@@ -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));
}
}
2 changes: 1 addition & 1 deletion inject-maven-plugin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<artifactId>avaje-inject-parent</artifactId>
<groupId>io.avaje</groupId>
<version>10.5-RC2</version>
<version>10.5-RC3</version>
</parent>

<artifactId>avaje-inject-maven-plugin</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion inject-test/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>io.avaje</groupId>
<artifactId>avaje-inject-parent</artifactId>
<version>10.5-RC2</version>
<version>10.5-RC3</version>
</parent>

<artifactId>avaje-inject-test</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion inject/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>io.avaje</groupId>
<artifactId>avaje-inject-parent</artifactId>
<version>10.5-RC2</version>
<version>10.5-RC3</version>
</parent>

<artifactId>avaje-inject</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>io.avaje</groupId>
<artifactId>avaje-inject-parent</artifactId>
<version>10.5-RC2</version>
<version>10.5-RC3</version>
<packaging>pom</packaging>
<name>avaje inject parent</name>
<description>parent pom for avaje inject library</description>
Expand Down
Loading