mirror of
https://github.com/GTNewHorizons/bdlib.git
synced 2026-10-25 20:22:25 +00:00
Added misc.withAutoClose - Provides something like java try-with-resources in scala
This commit is contained in:
1 parent
174af254e8
commit
ece84599f9
2 files changed
+37
-13
No files matched your search
@@ -140,5 +140,29 @@ object Misc {
|
||||
if (f != null) getFluidColor(new FluidStack(f, 1)) else 0xFFFFFF
|
||||
|
||||
lazy val lineSeparator = System.getProperty("line.separator")
|
||||
|
||||
/**
|
||||
* Provides something like java try-with-resources in scala
|
||||
*/
|
||||
def withAutoClose[T <: AutoCloseable, R](o: T)(f: T => R): R = {
|
||||
val res = try {
|
||||
f(o)
|
||||
} catch {
|
||||
case t1: Throwable =>
|
||||
if (o != null) {
|
||||
try {
|
||||
o.close()
|
||||
} catch {
|
||||
case t2: Throwable =>
|
||||
t1.addSuppressed(t2)
|
||||
}
|
||||
}
|
||||
throw t1
|
||||
}
|
||||
if (o != null)
|
||||
o.close()
|
||||
res
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ package net.bdew.lib.recipes
|
||||
import java.io._
|
||||
|
||||
import cpw.mods.fml.common.FMLCommonHandler
|
||||
import net.bdew.lib.BdLib
|
||||
import net.bdew.lib.{BdLib, Misc}
|
||||
|
||||
object RecipesHelper {
|
||||
/**
|
||||
@@ -26,15 +26,14 @@ object RecipesHelper {
|
||||
def loadConfigs(modName: String, listResource: String, configDir: File, resBaseName: String, loader: RecipeLoader) {
|
||||
BdLib.logInfo("Loading internal config files for mod %s", modName)
|
||||
|
||||
val listReader = new BufferedReader(new InputStreamReader(getClass.getResourceAsStream(listResource)))
|
||||
val internals = Iterator.continually(listReader.readLine)
|
||||
.takeWhile(_ != null)
|
||||
.map(_.trim)
|
||||
.filterNot(_.startsWith("#"))
|
||||
.filterNot(_.isEmpty)
|
||||
.toList
|
||||
listReader.close()
|
||||
|
||||
val internals = Misc.withAutoClose(new BufferedReader(new InputStreamReader(getClass.getResourceAsStream(listResource)))) { listReader =>
|
||||
Iterator.continually(listReader.readLine)
|
||||
.takeWhile(_ != null)
|
||||
.map(_.trim)
|
||||
.filterNot(_.startsWith("#"))
|
||||
.filterNot(_.isEmpty)
|
||||
.toList
|
||||
}
|
||||
|
||||
val overrideDir = new File(configDir, "overrides")
|
||||
if (!overrideDir.exists()) overrideDir.mkdir()
|
||||
@@ -44,9 +43,10 @@ object RecipesHelper {
|
||||
if (overrideFile.exists()) {
|
||||
tryLoadConfig(new FileReader(overrideFile), overrideFile.getCanonicalPath, modName, loader)
|
||||
} else {
|
||||
val resource = resBaseName + fileName
|
||||
tryLoadConfig(new InputStreamReader(getClass.getResourceAsStream(resource)),
|
||||
getClass.getResource(resource).toString, modName, loader)
|
||||
val url = getClass.getResource(resBaseName + fileName)
|
||||
Misc.withAutoClose(url.openStream()) { stream =>
|
||||
tryLoadConfig(new InputStreamReader(stream), url.toString, modName, loader)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user