diff --git a/src/main/java/io/github/smartdoc/builder/ProjectDocConfigBuilder.java b/src/main/java/io/github/smartdoc/builder/ProjectDocConfigBuilder.java index 4eb63014..49e94b3d 100644 --- a/src/main/java/io/github/smartdoc/builder/ProjectDocConfigBuilder.java +++ b/src/main/java/io/github/smartdoc/builder/ProjectDocConfigBuilder.java @@ -283,7 +283,6 @@ private void loadJavaSource(String strPath, JavaProjectBuilder builder) { * @param builder builder */ public void loadJarJavaSource(String path, JavaProjectBuilder builder) { - OutputStream out; if (!path.endsWith(".jar")) { return; } @@ -293,18 +292,17 @@ public void loadJarJavaSource(String path, JavaProjectBuilder builder) { while (entryEnumeration.hasMoreElements()) { JarEntry entry = entryEnumeration.nextElement(); if (entry.getName().endsWith(".java")) { - InputStream is = jarFile.getInputStream(entry); File file = new File(DocGlobalConstants.JAR_TEMP + entry.getName()); if (!file.exists()) { file.getParentFile().mkdirs(); } - out = Files.newOutputStream(file.toPath()); - int len; - while ((len = is.read()) != -1) { - out.write(len); + try (InputStream is = jarFile.getInputStream(entry); + OutputStream out = Files.newOutputStream(file.toPath())) { + int len; + while ((len = is.read()) != -1) { + out.write(len); + } } - is.close(); - out.close(); } } File file = new File(DocGlobalConstants.JAR_TEMP); diff --git a/src/main/java/io/github/smartdoc/builder/openapi/AbstractOpenApiBuilder.java b/src/main/java/io/github/smartdoc/builder/openapi/AbstractOpenApiBuilder.java index c9780abd..9c56ca5a 100644 --- a/src/main/java/io/github/smartdoc/builder/openapi/AbstractOpenApiBuilder.java +++ b/src/main/java/io/github/smartdoc/builder/openapi/AbstractOpenApiBuilder.java @@ -198,7 +198,7 @@ public Map buildPaths(ApiConfig apiConfig, ApiSchema api } } } - for (Map.Entry docEntry : DocMapping.TAG_DOC.entrySet()) { + for (Map.Entry docEntry : DocMapping.getTagDocMap().entrySet()) { tags.addAll(docEntry.getValue() .getClazzDocs() .stream() diff --git a/src/main/java/io/github/smartdoc/model/DocMapping.java b/src/main/java/io/github/smartdoc/model/DocMapping.java index 7f3aa6d0..00d3687a 100644 --- a/src/main/java/io/github/smartdoc/model/DocMapping.java +++ b/src/main/java/io/github/smartdoc/model/DocMapping.java @@ -37,7 +37,7 @@ public class DocMapping { /** * key:tag value:ApiDoc */ - public static Map TAG_DOC = new ConcurrentHashMap<>(64); + private static final Map TAG_DOC = new ConcurrentHashMap<>(64); public static void tagDocPut(String tag, ApiDoc apiDoc, ApiMethodDoc methodDoc) { if (StringUtils.isBlank(tag)) { @@ -55,7 +55,11 @@ public static void tagDocPut(String tag, ApiDoc apiDoc, ApiMethodDoc methodDoc) } public static void init() { - TAG_DOC = new ConcurrentHashMap<>(64); + TAG_DOC.clear(); + } + + public static Map getTagDocMap() { + return TAG_DOC; } } diff --git a/src/main/java/io/github/smartdoc/model/dependency/DependencyTree.java b/src/main/java/io/github/smartdoc/model/dependency/DependencyTree.java index 15d627ba..2756ca2d 100644 --- a/src/main/java/io/github/smartdoc/model/dependency/DependencyTree.java +++ b/src/main/java/io/github/smartdoc/model/dependency/DependencyTree.java @@ -178,8 +178,7 @@ private static void writeFile(DependencyTree instance) { } private static String readFile(File configFile) { - try { - BufferedReader reader = new BufferedReader(new FileReader(configFile)); + try (BufferedReader reader = new BufferedReader(new FileReader(configFile))) { StringBuilder builder = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { diff --git a/src/main/java/io/github/smartdoc/template/GRpcDocBuildTemplate.java b/src/main/java/io/github/smartdoc/template/GRpcDocBuildTemplate.java index bc3a9d55..a519a63a 100644 --- a/src/main/java/io/github/smartdoc/template/GRpcDocBuildTemplate.java +++ b/src/main/java/io/github/smartdoc/template/GRpcDocBuildTemplate.java @@ -531,7 +531,13 @@ public StreamGobbler(InputStream inputStream, Consumer consumer) { @Override public void run() { - new BufferedReader(new InputStreamReader(inputStream)).lines().forEach(consumer); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); + Stream lines = reader.lines()) { + lines.forEach(consumer); + } + catch (IOException e) { + // ignore: the process stream is no longer readable once the process exits + } } } diff --git a/src/main/java/io/github/smartdoc/utils/DocUtil.java b/src/main/java/io/github/smartdoc/utils/DocUtil.java index 9789261f..18e8d7f9 100644 --- a/src/main/java/io/github/smartdoc/utils/DocUtil.java +++ b/src/main/java/io/github/smartdoc/utils/DocUtil.java @@ -98,6 +98,7 @@ import java.util.Stack; import java.util.TimeZone; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -288,12 +289,12 @@ private DocUtil() { /** * Cache the regex and its pattern object */ - private static final Map PATTERN_CACHE = new HashMap<>(); + private static final Map PATTERN_CACHE = new ConcurrentHashMap<>(); /** * "packageFilters" cache */ - private static final Map> FILTER_METHOD_CACHE = new HashMap<>(); + private static final Map> FILTER_METHOD_CACHE = new ConcurrentHashMap<>(); /** * Generate a random value based on java type name. @@ -1882,33 +1883,32 @@ public static void copyAndReplaceDocx(String content, String docxOutputPath, Str InputStream resourceAsStream = WordDocBuilder.class.getClassLoader().getResourceAsStream(templateDocx); Objects.requireNonNull(resourceAsStream, "word template docx is not found"); - ZipInputStream zipInputStream = new ZipInputStream(resourceAsStream); - ZipOutputStream zipOutputStream = new ZipOutputStream(Files.newOutputStream(Paths.get(docxOutputPath))); - // Traverse the files in the compressed package - ZipEntry entry; - while ((entry = zipInputStream.getNextEntry()) != null) { - String entryName = entry.getName(); - // copy fix the bug: invalid entry compressed size - zipOutputStream.putNextEntry(new ZipEntry(entryName)); - if ("word/document.xml".equals(entryName)) { - byte[] bytes = content.getBytes(StandardCharsets.UTF_8); - zipOutputStream.write(bytes, 0, bytes.length); - } - else { - // copy - byte[] buffer = new byte[1024]; - int len; - while ((len = zipInputStream.read(buffer)) > 0) { - zipOutputStream.write(buffer, 0, len); + try (ZipInputStream zipInputStream = new ZipInputStream(resourceAsStream); + ZipOutputStream zipOutputStream = new ZipOutputStream( + Files.newOutputStream(Paths.get(docxOutputPath)))) { + // Traverse the files in the compressed package + ZipEntry entry; + while ((entry = zipInputStream.getNextEntry()) != null) { + String entryName = entry.getName(); + // copy fix the bug: invalid entry compressed size + zipOutputStream.putNextEntry(new ZipEntry(entryName)); + if ("word/document.xml".equals(entryName)) { + byte[] bytes = content.getBytes(StandardCharsets.UTF_8); + zipOutputStream.write(bytes, 0, bytes.length); + } + else { + // copy + byte[] buffer = new byte[1024]; + int len; + while ((len = zipInputStream.read(buffer)) > 0) { + zipOutputStream.write(buffer, 0, len); + } } - } - zipOutputStream.closeEntry(); - zipInputStream.closeEntry(); + zipOutputStream.closeEntry(); + zipInputStream.closeEntry(); + } } - - zipInputStream.close(); - zipOutputStream.close(); } }