From 119a61b7bbf50760b811d088f5ff2fd3885e83b4 Mon Sep 17 00:00:00 2001 From: Dmytro Kulieshov Date: Fri, 25 May 2018 15:23:01 +0300 Subject: [PATCH] Fixed possible places of failure due to not closing InputStreams(#9780) Signed-off-by: Dmytro Kulieshov --- .../ComposerValueProviderFactory.java | 10 ++-- .../cpp/generator/CProjectGenerator.java | 12 +++-- .../cpp/generator/CppProjectGenerator.java | 12 +++-- .../CreateNetCoreProjectHandler.java | 11 ++-- .../generator/PlainJavaProjectGenerator.java | 53 ++++++++++--------- .../generator/NodeJsProjectGenerator.java | 14 +++-- .../php/projecttype/PhpProjectGenerator.java | 14 +++-- .../generator/PythonProjectGenerator.java | 14 +++-- .../impl/CreateBaseProjectTypeHandler.java | 10 ++-- 9 files changed, 92 insertions(+), 58 deletions(-) diff --git a/plugins/plugin-composer/che-plugin-composer-server/src/main/java/org/eclipse/che/plugin/composer/server/projecttype/ComposerValueProviderFactory.java b/plugins/plugin-composer/che-plugin-composer-server/src/main/java/org/eclipse/che/plugin/composer/server/projecttype/ComposerValueProviderFactory.java index c96d742f5e..126cee46f9 100644 --- a/plugins/plugin-composer/che-plugin-composer-server/src/main/java/org/eclipse/che/plugin/composer/server/projecttype/ComposerValueProviderFactory.java +++ b/plugins/plugin-composer/che-plugin-composer-server/src/main/java/org/eclipse/che/plugin/composer/server/projecttype/ComposerValueProviderFactory.java @@ -13,6 +13,7 @@ import static org.eclipse.che.plugin.composer.shared.Constants.PACKAGE; import com.google.gson.Gson; import com.google.gson.JsonObject; +import java.io.BufferedReader; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -20,7 +21,6 @@ import java.nio.file.Paths; import java.util.Collections; import java.util.List; import javax.inject.Inject; -import org.eclipse.che.api.core.ServerException; import org.eclipse.che.api.fs.server.PathTransformer; import org.eclipse.che.api.project.server.type.ReadonlyValueProvider; import org.eclipse.che.api.project.server.type.ValueProvider; @@ -65,13 +65,15 @@ public class ComposerValueProviderFactory implements ValueProviderFactory { } return Collections.singletonList(value); - } catch (ServerException | IOException e) { + } catch (IOException e) { throw new ValueStorageException("Can't read composer.json : " + e.getMessage()); } } - private JsonObject readModel(Path projectFsPath) throws ServerException, IOException { - return new Gson().fromJson(Files.newBufferedReader(projectFsPath), JsonObject.class); + private JsonObject readModel(Path projectFsPath) throws IOException { + try (BufferedReader reader = Files.newBufferedReader(projectFsPath)) { + return new Gson().fromJson(reader, JsonObject.class); + } } } } diff --git a/plugins/plugin-cpp/che-plugin-cpp-lang-server/src/main/java/org/eclipse/che/plugin/cpp/generator/CProjectGenerator.java b/plugins/plugin-cpp/che-plugin-cpp-lang-server/src/main/java/org/eclipse/che/plugin/cpp/generator/CProjectGenerator.java index bb4876f73a..08172894b5 100644 --- a/plugins/plugin-cpp/che-plugin-cpp-lang-server/src/main/java/org/eclipse/che/plugin/cpp/generator/CProjectGenerator.java +++ b/plugins/plugin-cpp/che-plugin-cpp-lang-server/src/main/java/org/eclipse/che/plugin/cpp/generator/CProjectGenerator.java @@ -12,6 +12,7 @@ package org.eclipse.che.plugin.cpp.generator; import static org.eclipse.che.api.fs.server.WsPathUtils.resolve; +import java.io.IOException; import java.io.InputStream; import java.util.Map; import javax.inject.Inject; @@ -41,10 +42,13 @@ public class CProjectGenerator implements CreateProjectHandler { String projectWsPath, Map attributes, Map options) throws ForbiddenException, ConflictException, ServerException, NotFoundException { - fsManager.createDir(projectWsPath); - InputStream inputStream = getClass().getClassLoader().getResourceAsStream(RESOURCE_NAME); - String wsPath = resolve(projectWsPath, FILE_NAME); - fsManager.createFile(wsPath, inputStream); + try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream(RESOURCE_NAME)) { + fsManager.createDir(projectWsPath); + String wsPath = resolve(projectWsPath, FILE_NAME); + fsManager.createFile(wsPath, inputStream); + } catch (IOException e) { + throw new ServerException(e); + } } @Override diff --git a/plugins/plugin-cpp/che-plugin-cpp-lang-server/src/main/java/org/eclipse/che/plugin/cpp/generator/CppProjectGenerator.java b/plugins/plugin-cpp/che-plugin-cpp-lang-server/src/main/java/org/eclipse/che/plugin/cpp/generator/CppProjectGenerator.java index 97d9a5f074..40dae84160 100644 --- a/plugins/plugin-cpp/che-plugin-cpp-lang-server/src/main/java/org/eclipse/che/plugin/cpp/generator/CppProjectGenerator.java +++ b/plugins/plugin-cpp/che-plugin-cpp-lang-server/src/main/java/org/eclipse/che/plugin/cpp/generator/CppProjectGenerator.java @@ -12,6 +12,7 @@ package org.eclipse.che.plugin.cpp.generator; import static org.eclipse.che.api.fs.server.WsPathUtils.resolve; +import java.io.IOException; import java.io.InputStream; import java.util.Map; import javax.inject.Inject; @@ -40,10 +41,13 @@ public class CppProjectGenerator implements CreateProjectHandler { public void onCreateProject( String projectWsPath, Map attributes, Map options) throws ForbiddenException, ConflictException, ServerException, NotFoundException { - fsManager.createDir(projectWsPath); - InputStream inputStream = getClass().getClassLoader().getResourceAsStream(RESOURCE_NAME); - String wsPath = resolve(projectWsPath, FILE_NAME); - fsManager.createFile(wsPath, inputStream); + try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream(RESOURCE_NAME)) { + fsManager.createDir(projectWsPath); + String wsPath = resolve(projectWsPath, FILE_NAME); + fsManager.createFile(wsPath, inputStream); + } catch (IOException e) { + throw new ServerException(e); + } } @Override diff --git a/plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/java/org/eclipse/che/plugin/csharp/projecttype/CreateNetCoreProjectHandler.java b/plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/java/org/eclipse/che/plugin/csharp/projecttype/CreateNetCoreProjectHandler.java index 9382629260..fd58eaa2b7 100644 --- a/plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/java/org/eclipse/che/plugin/csharp/projecttype/CreateNetCoreProjectHandler.java +++ b/plugins/plugin-csharp/che-plugin-csharp-lang-server/src/main/java/org/eclipse/che/plugin/csharp/projecttype/CreateNetCoreProjectHandler.java @@ -49,10 +49,13 @@ public class CreateNetCoreProjectHandler implements CreateProjectHandler { String projectWsPath, Map attributes, Map options) throws ForbiddenException, ConflictException, ServerException, NotFoundException { - fsManager.createDir(projectWsPath); - InputStream inputStream = new ByteArrayInputStream(getProjectContent()); - String wsPath = resolve(projectWsPath, PROJECT_FILE_NAME); - fsManager.createFile(wsPath, inputStream); + try (InputStream inputStream = new ByteArrayInputStream(getProjectContent()); ) { + fsManager.createDir(projectWsPath); + String wsPath = resolve(projectWsPath, PROJECT_FILE_NAME); + fsManager.createFile(wsPath, inputStream); + } catch (IOException e) { + throw new ServerException(e); + } } private byte[] getProjectContent() { diff --git a/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-server/src/main/java/org/eclipse/che/plugin/java/plain/server/generator/PlainJavaProjectGenerator.java b/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-server/src/main/java/org/eclipse/che/plugin/java/plain/server/generator/PlainJavaProjectGenerator.java index 9a2532a9b4..5453792306 100644 --- a/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-server/src/main/java/org/eclipse/che/plugin/java/plain/server/generator/PlainJavaProjectGenerator.java +++ b/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-server/src/main/java/org/eclipse/che/plugin/java/plain/server/generator/PlainJavaProjectGenerator.java @@ -19,6 +19,8 @@ import static org.eclipse.che.plugin.java.plain.shared.PlainJavaProjectConstants import static org.eclipse.che.plugin.java.plain.shared.PlainJavaProjectConstants.DEFAULT_SOURCE_FOLDER_VALUE; import com.google.inject.Inject; +import java.io.IOException; +import java.io.InputStream; import java.util.List; import java.util.Map; import org.eclipse.che.api.core.ConflictException; @@ -57,31 +59,34 @@ public class PlainJavaProjectGenerator implements CreateProjectHandler { String projectWsPath, Map attributes, Map options) throws ForbiddenException, ConflictException, ServerException, NotFoundException { - List sourceFolders; - if (attributes.containsKey(SOURCE_FOLDER) && !attributes.get(SOURCE_FOLDER).isEmpty()) { - sourceFolders = attributes.get(SOURCE_FOLDER).getList(); - } else { - sourceFolders = singletonList(DEFAULT_SOURCE_FOLDER_VALUE); + try (InputStream inputStream = + getClass().getClassLoader().getResourceAsStream("files/main_class_content")) { + List sourceFolders; + if (attributes.containsKey(SOURCE_FOLDER) && !attributes.get(SOURCE_FOLDER).isEmpty()) { + sourceFolders = attributes.get(SOURCE_FOLDER).getList(); + } else { + sourceFolders = singletonList(DEFAULT_SOURCE_FOLDER_VALUE); + } + + fsManager.createDir(projectWsPath); + + String outputDirWsPath = resolve(projectWsPath, DEFAULT_OUTPUT_FOLDER_VALUE); + fsManager.createDir(outputDirWsPath); + + String sourceDirWsPath = resolve(projectWsPath, sourceFolders.get(0)); + fsManager.createDir(sourceDirWsPath); + + String mainJavaWsPath = resolve(sourceDirWsPath, FILE_NAME); + fsManager.createFile(mainJavaWsPath, inputStream); + + IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectWsPath); + IJavaProject javaProject = JavaCore.create(project); + + classpathBuilder.generateClasspath( + javaProject, sourceFolders, singletonList(DEFAULT_LIBRARY_FOLDER_VALUE)); + } catch (IOException e) { + throw new ServerException(e); } - - fsManager.createDir(projectWsPath); - - String outputDirWsPath = resolve(projectWsPath, DEFAULT_OUTPUT_FOLDER_VALUE); - fsManager.createDir(outputDirWsPath); - - String sourceDirWsPath = resolve(projectWsPath, sourceFolders.get(0)); - fsManager.createDir(sourceDirWsPath); - - String mainJavaWsPath = resolve(sourceDirWsPath, FILE_NAME); - fsManager.createFile( - mainJavaWsPath, - getClass().getClassLoader().getResourceAsStream("files/main_class_content")); - - IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectWsPath); - IJavaProject javaProject = JavaCore.create(project); - - classpathBuilder.generateClasspath( - javaProject, sourceFolders, singletonList(DEFAULT_LIBRARY_FOLDER_VALUE)); } @Override diff --git a/plugins/plugin-nodejs/che-plugin-nodejs-lang-server/src/main/java/org/eclipse/che/plugin/nodejs/generator/NodeJsProjectGenerator.java b/plugins/plugin-nodejs/che-plugin-nodejs-lang-server/src/main/java/org/eclipse/che/plugin/nodejs/generator/NodeJsProjectGenerator.java index 668e641254..f7423aab4a 100644 --- a/plugins/plugin-nodejs/che-plugin-nodejs-lang-server/src/main/java/org/eclipse/che/plugin/nodejs/generator/NodeJsProjectGenerator.java +++ b/plugins/plugin-nodejs/che-plugin-nodejs-lang-server/src/main/java/org/eclipse/che/plugin/nodejs/generator/NodeJsProjectGenerator.java @@ -13,6 +13,7 @@ package org.eclipse.che.plugin.nodejs.generator; import static org.eclipse.che.api.fs.server.WsPathUtils.resolve; import com.google.inject.Inject; +import java.io.IOException; import java.io.InputStream; import java.util.Map; import org.eclipse.che.api.core.ConflictException; @@ -43,11 +44,14 @@ public class NodeJsProjectGenerator implements CreateProjectHandler { String projectWsPath, Map attributes, Map options) throws ForbiddenException, ConflictException, ServerException, NotFoundException { - fsManager.createDir(projectWsPath); - InputStream inputStream = - getClass().getClassLoader().getResourceAsStream("files/default_node_content"); - String wsPath = resolve(projectWsPath, "hello.js"); - fsManager.createFile(wsPath, inputStream); + try (InputStream inputStream = + getClass().getClassLoader().getResourceAsStream("files/default_node_content")) { + fsManager.createDir(projectWsPath); + String wsPath = resolve(projectWsPath, "hello.js"); + fsManager.createFile(wsPath, inputStream); + } catch (IOException e) { + throw new ServerException(e); + } } @Override diff --git a/plugins/plugin-php/che-plugin-php-lang-server/src/main/java/org/eclipse/che/plugin/php/projecttype/PhpProjectGenerator.java b/plugins/plugin-php/che-plugin-php-lang-server/src/main/java/org/eclipse/che/plugin/php/projecttype/PhpProjectGenerator.java index 93e252b1b0..234fae3009 100644 --- a/plugins/plugin-php/che-plugin-php-lang-server/src/main/java/org/eclipse/che/plugin/php/projecttype/PhpProjectGenerator.java +++ b/plugins/plugin-php/che-plugin-php-lang-server/src/main/java/org/eclipse/che/plugin/php/projecttype/PhpProjectGenerator.java @@ -13,6 +13,7 @@ package org.eclipse.che.plugin.php.projecttype; import static org.eclipse.che.api.fs.server.WsPathUtils.resolve; import com.google.inject.Inject; +import java.io.IOException; import java.io.InputStream; import java.util.Map; import org.eclipse.che.api.core.ConflictException; @@ -37,11 +38,14 @@ public class PhpProjectGenerator implements CreateProjectHandler { public void onCreateProject( String projectWsPath, Map attributes, Map options) throws ForbiddenException, ConflictException, ServerException, NotFoundException { - fsManager.createDir(projectWsPath); - InputStream inputStream = - getClass().getClassLoader().getResourceAsStream("files/default_php_content"); - String wsPath = resolve(projectWsPath, "hello.php"); - fsManager.createFile(wsPath, inputStream); + try (InputStream inputStream = + getClass().getClassLoader().getResourceAsStream("files/default_php_content")) { + fsManager.createDir(projectWsPath); + String wsPath = resolve(projectWsPath, "hello.php"); + fsManager.createFile(wsPath, inputStream); + } catch (IOException e) { + throw new ServerException(e); + } } @Override diff --git a/plugins/plugin-python/che-plugin-python-lang-server/src/main/java/org/eclipse/che/plugin/python/generator/PythonProjectGenerator.java b/plugins/plugin-python/che-plugin-python-lang-server/src/main/java/org/eclipse/che/plugin/python/generator/PythonProjectGenerator.java index 151f687eb4..2c16078604 100644 --- a/plugins/plugin-python/che-plugin-python-lang-server/src/main/java/org/eclipse/che/plugin/python/generator/PythonProjectGenerator.java +++ b/plugins/plugin-python/che-plugin-python-lang-server/src/main/java/org/eclipse/che/plugin/python/generator/PythonProjectGenerator.java @@ -12,6 +12,7 @@ package org.eclipse.che.plugin.python.generator; import static org.eclipse.che.api.fs.server.WsPathUtils.resolve; +import java.io.IOException; import java.io.InputStream; import java.util.Map; import javax.inject.Inject; @@ -38,11 +39,14 @@ public class PythonProjectGenerator implements CreateProjectHandler { public void onCreateProject( String projectWsPath, Map attributes, Map options) throws ForbiddenException, ConflictException, ServerException, NotFoundException { - fsManager.createDir(projectWsPath); - InputStream inputStream = - getClass().getClassLoader().getResourceAsStream("files/default_python_content"); - String wsPath = resolve(projectWsPath, "main.py"); - fsManager.createFile(wsPath, inputStream); + try (InputStream inputStream = + getClass().getClassLoader().getResourceAsStream("files/default_python_content")) { + fsManager.createDir(projectWsPath); + String wsPath = resolve(projectWsPath, "main.py"); + fsManager.createFile(wsPath, inputStream); + } catch (IOException e) { + throw new ServerException(e); + } } @Override diff --git a/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/project/server/impl/CreateBaseProjectTypeHandler.java b/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/project/server/impl/CreateBaseProjectTypeHandler.java index f285cbfbbf..004634035b 100644 --- a/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/project/server/impl/CreateBaseProjectTypeHandler.java +++ b/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/project/server/impl/CreateBaseProjectTypeHandler.java @@ -55,9 +55,13 @@ public class CreateBaseProjectTypeHandler implements CreateProjectHandler { public void onCreateProject( String projectWsPath, Map attributes, Map options) throws ForbiddenException, ConflictException, ServerException, NotFoundException { - fsManager.createDir(projectWsPath, true, true); - String wsPath = resolve(projectWsPath, README_FILE_NAME); - fsManager.createFile(wsPath, getReadmeContent()); + try (InputStream inputStream = getReadmeContent()) { + fsManager.createDir(projectWsPath, true, true); + String wsPath = resolve(projectWsPath, README_FILE_NAME); + fsManager.createFile(wsPath, inputStream); + } catch (IOException e) { + throw new ServerException(e); + } } @Override