You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by si...@apache.org on 2019/04/04 13:45:43 UTC

[sling-whiteboard] branch master updated: [api-regions] added check to avoid adding duplicates across inheritance

This is an automated email from the ASF dual-hosted git repository.

simonetripodi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git


The following commit(s) were added to refs/heads/master by this push:
     new 770dab0  [api-regions] added check to avoid adding duplicates across inheritance
770dab0 is described below

commit 770dab0c627b39c00930521687d71ae737671ae1
Author: stripodi <st...@192.168.1.111>
AuthorDate: Thu Apr 4 15:45:35 2019 +0200

    [api-regions] added check to avoid adding duplicates across inheritance
---
 .../java/org/apache/sling/feature/apiregions/ApiRegion.java  | 12 ++++++++----
 .../org/apache/sling/feature/apiregions/ApiRegionTest.java   |  9 +++++++++
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/feature-api-regions/src/main/java/org/apache/sling/feature/apiregions/ApiRegion.java b/feature-api-regions/src/main/java/org/apache/sling/feature/apiregions/ApiRegion.java
index 0dd60fe..a264944 100644
--- a/feature-api-regions/src/main/java/org/apache/sling/feature/apiregions/ApiRegion.java
+++ b/feature-api-regions/src/main/java/org/apache/sling/feature/apiregions/ApiRegion.java
@@ -111,23 +111,27 @@ public final class ApiRegion implements Iterable<String> {
         }
     }
 
-    public void addApi(String api) {
+    public boolean addApi(String api) {
         // ignore null, empty package and non well-formed packages names, i.e. javax.jms.doc-files
         if (api == null
                 || api.isEmpty()
                 || !PACKAGE_NAME_VALIDATION.matcher(api).matches()) {
             // ignore it
-            return;
+            return false;
         }
 
         // ignore packages with reserved keywords, i.e. org.apache.commons.lang.enum
         for (String apiPart : api.split("\\.")) {
             if (KEYWORDS.contains(apiPart)) {
-                return;
+                return false;
             }
         }
 
-        apis.add(api);
+        if (contains(api)) {
+            return false;
+        }
+
+        return apis.add(api);
     }
 
     public boolean contains(String api) {
diff --git a/feature-api-regions/src/test/java/org/apache/sling/feature/apiregions/ApiRegionTest.java b/feature-api-regions/src/test/java/org/apache/sling/feature/apiregions/ApiRegionTest.java
index e0c78aa..c8b637f 100644
--- a/feature-api-regions/src/test/java/org/apache/sling/feature/apiregions/ApiRegionTest.java
+++ b/feature-api-regions/src/test/java/org/apache/sling/feature/apiregions/ApiRegionTest.java
@@ -82,6 +82,15 @@ public class ApiRegionTest {
     }
 
     @Test
+    public void inheritanceAvoidsDuplicates() {
+        ApiRegion granpa = new ApiRegion("granpa", null);
+        assertTrue(granpa.addApi("org.apache.sling.feature.apiregions"));
+
+        ApiRegion father = new ApiRegion("father", granpa);
+        assertFalse(father.addApi("org.apache.sling.feature.apiregions"));
+    }
+
+    @Test
     public void inheritanceIteratorCheck() {
         ApiRegion granpa = new ApiRegion("granpa", null);
         granpa.addApi("org.apache.sling.feature.apiregions");