diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/filter/ruletree/GroupTree.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/filter/ruletree/GroupTree.java index b4e29dfbd..87d0023b1 100644 --- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/filter/ruletree/GroupTree.java +++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/filter/ruletree/GroupTree.java @@ -126,7 +126,7 @@ public boolean acceptedGroupId(String groupId) { } if (currentNode.isStop() && groupElements.equals(current)) { accepted = currentNode.isAllow(); - } else if (!currentNode.isStop()) { + } else if (!currentNode.isStop() && currentNode.isAllow() != null) { accepted = currentNode.isAllow(); } } diff --git a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/filter/ruletree/GroupTreeTest.java b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/filter/ruletree/GroupTreeTest.java index 1cdecd136..b47d54d9a 100644 --- a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/filter/ruletree/GroupTreeTest.java +++ b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/filter/ruletree/GroupTreeTest.java @@ -169,4 +169,37 @@ void implicitAndExplicitDefaultIsSame() { assertEquals(implicitResults, explicitResults); } + + @Test + void gh1703One() { + GroupTree groupTree; + + // REPRODUCER as given + groupTree = new GroupTree("root"); + // this is redundant, as 'org.apache' IMPLIES 'org.apache.maven.plugins' + groupTree.loadNodes(Stream.of("# comment", "", "org.apache", "org.apache.maven.plugins")); + + assertTrue(groupTree.acceptedGroupId("org.apache")); // this is given + assertTrue(groupTree.acceptedGroupId("org.apache.maven")); // implied by first + assertTrue(groupTree.acceptedGroupId("org.apache.maven.plugins")); // implied by first (line is redundant) + assertTrue(groupTree.acceptedGroupId("org.apache.maven.plugins.foo")); // implied by first + + // FIXED + groupTree = new GroupTree("root"); + groupTree.loadNodes(Stream.of("# comment", "", "=org.apache", "org.apache.maven.plugins")); + + assertTrue(groupTree.acceptedGroupId("org.apache")); // this is given (=) + assertFalse(groupTree.acceptedGroupId("org.apache.maven")); // not allowed + assertTrue(groupTree.acceptedGroupId("org.apache.maven.plugins")); // this is given (and below) + assertTrue(groupTree.acceptedGroupId("org.apache.maven.plugins.foo")); // implied by above + + // MIXED + groupTree = new GroupTree("root"); + groupTree.loadNodes(Stream.of("# comment", "", "org.apache", "!=org.apache.maven.plugins")); + + assertTrue(groupTree.acceptedGroupId("org.apache")); // this is given + assertTrue(groupTree.acceptedGroupId("org.apache.maven")); // implied by first + assertFalse(groupTree.acceptedGroupId("org.apache.maven.plugins")); // this is given (!=) + assertTrue(groupTree.acceptedGroupId("org.apache.maven.plugins.foo")); // implied by first + } }