diff options
-rw-r--r-- | vpp-integration/api-docs/core/src/main/java/io/fd/hc2vpp/docs/core/ClassPathTypeIndex.java | 27 |
1 files changed, 24 insertions, 3 deletions
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<String, String> buildIndex(final String projectRoot) { try { - return Files.walk(Paths.get(projectRoot)) + Set<String> 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<String, String> 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); } |