diff --git a/interfaceinjection/src/main/java/net/neoforged/jst/interfaceinjection/InjectInterfacesVisitor.java b/interfaceinjection/src/main/java/net/neoforged/jst/interfaceinjection/InjectInterfacesVisitor.java index f129240..314fc07 100644 --- a/interfaceinjection/src/main/java/net/neoforged/jst/interfaceinjection/InjectInterfacesVisitor.java +++ b/interfaceinjection/src/main/java/net/neoforged/jst/interfaceinjection/InjectInterfacesVisitor.java @@ -79,6 +79,10 @@ private void inject(PsiClass psiClass, Collection targets) { .sorted(Comparator.naturalOrder()) .collect(Collectors.joining(", ")); + if (interfaceImplementation.isEmpty()) { + return; // Nothing to do, all injected interfaces are already present + } + if (implementsList.getChildren().length == 0) { StringBuilder text = new StringBuilder(); diff --git a/tests/data/interfaceinjection/deduplication/expected/pkg/Example.java b/tests/data/interfaceinjection/deduplication/expected/pkg/Example.java new file mode 100644 index 0000000..2b0642d --- /dev/null +++ b/tests/data/interfaceinjection/deduplication/expected/pkg/Example.java @@ -0,0 +1,6 @@ +package pkg; + +import java.util.Set; + +public class Example implements Set { +} diff --git a/tests/data/interfaceinjection/deduplication/injectedinterfaces.json b/tests/data/interfaceinjection/deduplication/injectedinterfaces.json new file mode 100644 index 0000000..b9b77c7 --- /dev/null +++ b/tests/data/interfaceinjection/deduplication/injectedinterfaces.json @@ -0,0 +1,3 @@ +{ + "pkg/Example": "java/util/Set" +} diff --git a/tests/data/interfaceinjection/deduplication/source/pkg/Example.java b/tests/data/interfaceinjection/deduplication/source/pkg/Example.java new file mode 100644 index 0000000..2b0642d --- /dev/null +++ b/tests/data/interfaceinjection/deduplication/source/pkg/Example.java @@ -0,0 +1,6 @@ +package pkg; + +import java.util.Set; + +public class Example implements Set { +} diff --git a/tests/src/test/java/net/neoforged/jst/tests/EmbeddedTest.java b/tests/src/test/java/net/neoforged/jst/tests/EmbeddedTest.java index 34372f8..3f195b8 100644 --- a/tests/src/test/java/net/neoforged/jst/tests/EmbeddedTest.java +++ b/tests/src/test/java/net/neoforged/jst/tests/EmbeddedTest.java @@ -316,6 +316,11 @@ void testSimpleInjection() throws Exception { runInterfaceInjectionTest("simple_injection", tempDir); } + @Test + void testDeduplication() throws Exception { + runInterfaceInjectionTest("deduplication", tempDir); + } + @Test void testAdditiveInjection() throws Exception { runInterfaceInjectionTest("additive_injection", tempDir);