Make frequently used IO resources autoclosable (#8181)

* Make frequently used IO resources autoclosable

* Autoclose ruby error input stream
This commit is contained in:
agilob
2021-01-11 16:26:25 +00:00
committed by GitHub
parent e26f440729
commit ed9133e77f
6 changed files with 36 additions and 26 deletions

View File

@@ -109,15 +109,15 @@ public class TemplateManager implements TemplatingExecutor, TemplateProcessor {
if (name == null || name.contains("..")) {
throw new IllegalArgumentException("Template location must be constrained to template directory.");
}
try {
Reader reader = getTemplateReader(name);
try (Reader reader = getTemplateReader(name)) {
if (reader == null) {
throw new RuntimeException("no file found");
}
Scanner s = new Scanner(reader).useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
try (Scanner s = new Scanner(reader).useDelimiter("\\A")) {
return s.hasNext() ? s.next() : "";
}
} catch (Exception e) {
LOGGER.error(e.getMessage());
LOGGER.error("{}", e.getMessage(), e);
}
throw new RuntimeException("can't load template " + name);
}
@@ -142,7 +142,7 @@ public class TemplateManager implements TemplatingExecutor, TemplateProcessor {
if (name == null || name.contains("..")) {
throw new IllegalArgumentException("Template location must be constrained to template directory.");
}
is = new FileInputStream(new File(name)); // May throw but never return a null value
is = new FileInputStream(name); // May throw but never return a null value
}
return is;
}

View File

@@ -172,9 +172,7 @@ abstract public class AbstractRubyCodegen extends DefaultCodegen implements Code
@Override
public String toVarName(final String name) {
String varName;
// sanitize name
varName = sanitizeName(name);
String varName = sanitizeName(name);
// if it's all uppper case, convert to lower case
if (name.matches("^[A-Z_]*$")) {
varName = varName.toLowerCase(Locale.ROOT);
@@ -207,7 +205,7 @@ abstract public class AbstractRubyCodegen extends DefaultCodegen implements Code
// method name cannot use reserved keyword, e.g. return
if (isReservedWord(operationId)) {
String newOperationId = underscore("call_" + operationId);
LOGGER.warn(operationId + " (reserved word) cannot be used as method name. Renamed to " + newOperationId);
LOGGER.warn("{} (reserved word) cannot be used as method name. Renamed to {}", operationId, newOperationId);
return newOperationId;
}
@@ -241,15 +239,16 @@ abstract public class AbstractRubyCodegen extends DefaultCodegen implements Code
Process p = Runtime.getRuntime().exec(command);
int exitValue = p.waitFor();
if (exitValue != 0) {
BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream(), StandardCharsets.UTF_8));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
try(BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream(), StandardCharsets.UTF_8))) {
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
LOGGER.error("Error running the command ({}). Exit value: {}, Error output: {}", command, exitValue, sb.toString());
}
LOGGER.error("Error running the command ({}). Exit value: {}, Error output: {}", command, exitValue, sb.toString());
} else {
LOGGER.info("Successfully executed: " + command);
LOGGER.info("Successfully executed: `{}`", command);
}
} catch (Exception e) {
LOGGER.error("Error running the command ({}). Exception: {}", command, e.getMessage());

View File

@@ -19,9 +19,14 @@ package org.openapitools.codegen.languages;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.nio.file.*;
import java.util.*;
import java.util.stream.Collectors;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
@@ -116,15 +121,13 @@ public class DartClientCodegen extends DefaultCodegen {
modelTestTemplateFiles.put("model_test.mustache", ".dart");
apiTestTemplateFiles.put("api_test.mustache", ".dart");
List<String> reservedWordsList = new ArrayList<>();
try {
BufferedReader reader = new BufferedReader(
final List<String> reservedWordsList = new ArrayList<>();
try(BufferedReader reader = new BufferedReader(
new InputStreamReader(DartClientCodegen.class.getResourceAsStream("/dart/dart-keywords.txt"),
StandardCharsets.UTF_8));
StandardCharsets.UTF_8))) {
while (reader.ready()) {
reservedWordsList.add(reader.readLine());
}
reader.close();
} catch (Exception e) {
LOGGER.error("Error reading dart keywords. Exception: {}", e.getMessage());
}

View File

@@ -20,6 +20,8 @@ import com.samskivert.mustache.Mustache;
import com.samskivert.mustache.Template;
import org.openapitools.codegen.api.TemplatingEngineAdapter;
import org.openapitools.codegen.api.TemplatingExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.Reader;
@@ -29,6 +31,8 @@ import java.util.Map;
public class MustacheEngineAdapter implements TemplatingEngineAdapter {
private static final Logger LOGGER = LoggerFactory.getLogger(TemplatingEngineAdapter.class);
/**
* Provides an identifier used to load the adapter. This could be a name, uuid, or any other string.
*
@@ -64,9 +68,11 @@ public class MustacheEngineAdapter implements TemplatingEngineAdapter {
@SuppressWarnings({"java:S108"}) // catch-all is expected, and is later thrown
public Reader findTemplate(TemplatingExecutor generator, String name) {
for (String extension : extensions) {
final String templateName = name + "." + extension;
try {
return new StringReader(generator.getFullTemplateContents(name + "." + extension));
} catch (Exception ignored) {
return new StringReader(generator.getFullTemplateContents(templateName));
} catch (Exception exception) {
LOGGER.error("Failed to read full template {}, {}", templateName, exception.getMessage());
}
}

View File

@@ -248,4 +248,4 @@ public class TemplateManagerTest {
target.toFile().delete();
}
}
}
}

View File

@@ -68,7 +68,9 @@ public class DartClientCodegenTest {
List<String> reservedWordsList = new ArrayList<String>();
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("src/main/resources/dart/dart-keywords.txt"), Charset.forName("UTF-8")));
while(reader.ready()) { reservedWordsList.add(reader.readLine()); }
while(reader.ready()) {
reservedWordsList.add(reader.readLine());
}
reader.close();
} catch (Exception e) {
String errorString = String.format(Locale.ROOT, "Error reading dart keywords: %s", e);