From 6abf9e092424f484e3f16b72d05f8fad0aa0f16e Mon Sep 17 00:00:00 2001 From: Michal Cmarada Date: Fri, 2 Mar 2018 13:03:09 +0100 Subject: Fix generating of docs - when multiple ClassPaths pointed to the same class, ClassPathTypeIndex failed on duplicate key. Issue is resolved by ignoring other keys that refer to the same class and for every class key is genereated only once. Change-Id: I67fc783a335400c936cd52a0ba9118ab53402800 Signed-off-by: Michal Cmarada --- .../io/fd/hc2vpp/docs/core/ClassPathTypeIndex.java | 27 +++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) (limited to 'vpp-integration/api-docs') diff --git a/vpp-integration/api-docs/core/src/main/java/io/fd/hc2vpp/docs/core/ClassPathTypeIndex.java b/vpp-integration/api-docs/core/src/main/java/io/fd/hc2vpp/docs/core/ClassPathTypeIndex.java index 4eeac5953..bc068034a 100644 --- a/vpp-integration/api-docs/core/src/main/java/io/fd/hc2vpp/docs/core/ClassPathTypeIndex.java +++ b/vpp-integration/api-docs/core/src/main/java/io/fd/hc2vpp/docs/core/ClassPathTypeIndex.java @@ -22,9 +22,13 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.HashMap; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Index of java classes to relative absolute paths within repository. Used to generate Git links for binding classes of @@ -32,6 +36,8 @@ import java.util.stream.Collectors; */ public class ClassPathTypeIndex implements LinkGenerator { + private static final Logger LOG = LoggerFactory.getLogger(ClassPathTypeIndex.class); + private static final String JAVA_SOURCE_FOLDER = "src/main/java"; private static final int JAVA_SOURCE_FOLDER_NAME_LENGTH = JAVA_SOURCE_FOLDER.length() + 1; @@ -60,13 +66,28 @@ public class ClassPathTypeIndex implements LinkGenerator { private Map buildIndex(final String projectRoot) { try { - return Files.walk(Paths.get(projectRoot)) + Set names = + Files.walk(Paths.get(projectRoot)) .filter(path -> path.toString().contains("src/main/java")) .filter(path -> path.toString().endsWith(".java")) .map(Path::toString) .map(s -> s.replace(projectRoot, "")) - .distinct() - .collect(Collectors.toMap(ClassPathTypeIndex::key, o -> generateLink(o))); + .collect(Collectors.toSet()); + + Map register = new HashMap<>(); + for (String name : names) { + String key = key(name); + if (register.containsKey(key)) { + /* expected duplicates e.g. In MPLS and SRV6 modules several same types are used + (like ipv6-multicast-source-address). We don`t need to create another link for the same class + so we can skip these duplicates */ + + LOG.trace("Duplicate key found for name: {}. Skip generating new link for the same class", name); + } else { + register.put(key, generateLink(name)); + } + } + return register; } catch (IOException e) { throw new IllegalStateException(format("%s not found", projectRoot), e); } -- cgit 1.2.3-korg