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
+32
-8
No files matched your search
@@ -140,5 +140,29 @@ object Misc {
|
|||||||
if (f != null) getFluidColor(new FluidStack(f, 1)) else 0xFFFFFF
|
if (f != null) getFluidColor(new FluidStack(f, 1)) else 0xFFFFFF
|
||||||
|
|
||||||
lazy val lineSeparator = System.getProperty("line.separator")
|
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 java.io._
|
||||||
|
|
||||||
import cpw.mods.fml.common.FMLCommonHandler
|
import cpw.mods.fml.common.FMLCommonHandler
|
||||||
import net.bdew.lib.BdLib
|
import net.bdew.lib.{BdLib, Misc}
|
||||||
|
|
||||||
object RecipesHelper {
|
object RecipesHelper {
|
||||||
/**
|
/**
|
||||||
@@ -26,15 +26,14 @@ object RecipesHelper {
|
|||||||
def loadConfigs(modName: String, listResource: String, configDir: File, resBaseName: String, loader: RecipeLoader) {
|
def loadConfigs(modName: String, listResource: String, configDir: File, resBaseName: String, loader: RecipeLoader) {
|
||||||
BdLib.logInfo("Loading internal config files for mod %s", modName)
|
BdLib.logInfo("Loading internal config files for mod %s", modName)
|
||||||
|
|
||||||
val listReader = new BufferedReader(new InputStreamReader(getClass.getResourceAsStream(listResource)))
|
val internals = Misc.withAutoClose(new BufferedReader(new InputStreamReader(getClass.getResourceAsStream(listResource)))) { listReader =>
|
||||||
val internals = Iterator.continually(listReader.readLine)
|
Iterator.continually(listReader.readLine)
|
||||||
.takeWhile(_ != null)
|
.takeWhile(_ != null)
|
||||||
.map(_.trim)
|
.map(_.trim)
|
||||||
.filterNot(_.startsWith("#"))
|
.filterNot(_.startsWith("#"))
|
||||||
.filterNot(_.isEmpty)
|
.filterNot(_.isEmpty)
|
||||||
.toList
|
.toList
|
||||||
listReader.close()
|
}
|
||||||
|
|
||||||
|
|
||||||
val overrideDir = new File(configDir, "overrides")
|
val overrideDir = new File(configDir, "overrides")
|
||||||
if (!overrideDir.exists()) overrideDir.mkdir()
|
if (!overrideDir.exists()) overrideDir.mkdir()
|
||||||
@@ -44,9 +43,10 @@ object RecipesHelper {
|
|||||||
if (overrideFile.exists()) {
|
if (overrideFile.exists()) {
|
||||||
tryLoadConfig(new FileReader(overrideFile), overrideFile.getCanonicalPath, modName, loader)
|
tryLoadConfig(new FileReader(overrideFile), overrideFile.getCanonicalPath, modName, loader)
|
||||||
} else {
|
} else {
|
||||||
val resource = resBaseName + fileName
|
val url = getClass.getResource(resBaseName + fileName)
|
||||||
tryLoadConfig(new InputStreamReader(getClass.getResourceAsStream(resource)),
|
Misc.withAutoClose(url.openStream()) { stream =>
|
||||||
getClass.getResource(resource).toString, modName, loader)
|
tryLoadConfig(new InputStreamReader(stream), url.toString, modName, loader)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user