Repository: cxf Updated Branches: refs/heads/master 3d3e99d4e -> 8604c5c10
[CXF-7124] Better support for finding a shared package, patch from Neal Hu applied Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/8604c5c1 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/8604c5c1 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/8604c5c1 Branch: refs/heads/master Commit: 8604c5c1092daf1562810ef2ac83eaf7537b63e2 Parents: 3d3e99d Author: Sergey Beryozkin <[email protected]> Authored: Fri Nov 4 12:22:47 2016 +0000 Committer: Sergey Beryozkin <[email protected]> Committed: Fri Nov 4 12:22:47 2016 +0000 ---------------------------------------------------------------------- .../apache/cxf/common/util/PackageUtils.java | 30 +++++++++++--------- .../cxf/common/util/PackageUtilsTest.java | 16 +++++++++++ 2 files changed, 32 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/8604c5c1/core/src/main/java/org/apache/cxf/common/util/PackageUtils.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/cxf/common/util/PackageUtils.java b/core/src/main/java/org/apache/cxf/common/util/PackageUtils.java index b743320..9ff5510 100644 --- a/core/src/main/java/org/apache/cxf/common/util/PackageUtils.java +++ b/core/src/main/java/org/apache/cxf/common/util/PackageUtils.java @@ -20,7 +20,6 @@ package org.apache.cxf.common.util; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.StringTokenizer; @@ -51,20 +50,23 @@ public final class PackageUtils { } public static String getSharedPackageName(List<Class<?>> classes) { - List<String> currentParts = null; + if (classes.isEmpty()) { + return ""; + } + List<List<String>> lParts = new ArrayList<List<String>>(classes.size()); + List<String> currentParts = new ArrayList<String>(); for (Class<?> cls : classes) { - List<String> parts = StringUtils.getParts(getPackageName(cls), "\\."); - if (currentParts == null) { - currentParts = parts; - } else { - List<String> subList = Collections.emptyList(); - for (int i = parts.size() - 1; i > 0; i--) { - subList = parts.subList(0, i + 1); - if (currentParts.equals(subList)) { - break; - } - } - currentParts.retainAll(subList); + lParts.add(StringUtils.getParts(getPackageName(cls), "\\.")); + } + for (int i = 0; i < lParts.get(0).size(); i++) { + int j = 1; + for (; j < lParts.size(); j++) { + if (i > (lParts.get(j).size() - 1) || !lParts.get(j).get(i).equals(lParts.get(0).get(i))) { + break; + } + } + if (j == lParts.size()) { + currentParts.add(lParts.get(j - 1).get(i)); } } StringBuilder sb = new StringBuilder(); http://git-wip-us.apache.org/repos/asf/cxf/blob/8604c5c1/core/src/test/java/org/apache/cxf/common/util/PackageUtilsTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/cxf/common/util/PackageUtilsTest.java b/core/src/test/java/org/apache/cxf/common/util/PackageUtilsTest.java index 644e529..f4401f6 100644 --- a/core/src/test/java/org/apache/cxf/common/util/PackageUtilsTest.java +++ b/core/src/test/java/org/apache/cxf/common/util/PackageUtilsTest.java @@ -77,4 +77,20 @@ public class PackageUtilsTest extends Assert { Arrays.asList(Annotation.class, Array.class)); assertEquals("java.lang", packageName); } + @Test + public void testSharedPackageNameManyClassesCommonRoot4() throws Exception { + String packageName = PackageUtils.getSharedPackageName( + Arrays.asList(org.apache.cxf.common.util.PackageUtils.class, + org.apache.cxf.bus.CXFBusFactory.class, + org.apache.cxf.common.jaxb.JAXBContextCache.class)); + assertEquals("org.apache.cxf", packageName); + } + @Test + public void testSharedPackageNameManyClassesCommonRoot5() throws Exception { + String packageName = PackageUtils.getSharedPackageName( + Arrays.asList(java.lang.annotation.Annotation.class, + org.apache.cxf.bus.CXFBusFactory.class, + org.apache.cxf.common.jaxb.JAXBContextCache.class)); + assertEquals("", packageName); + } }
