Skip to content

Commit f65fa2c

Browse files
authored
Merge pull request #233 from Rubenicos/feature/loader-error
feat(plugin): allow menu loader to print full error
2 parents 5c21500 + eba0c36 commit f65fa2c

3 files changed

Lines changed: 38 additions & 11 deletions

File tree

plugin/src/main/kotlin/trplugins/menu/module/conf/Loader.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,6 @@ object Loader {
5454
true
5555
}
5656

57-
val errors = mutableListOf<String>()
58-
5957
val files = mutableListOf<File>().also {
6058
it.addAll(filterMenuFiles(folder))
6159
it.addAll(TrMenu.SETTINGS.getStringList("Loader.Menu-Files").flatMap { filterMenuFiles(File(it)) })
@@ -82,15 +80,15 @@ object Loader {
8280
result = MenuSerializer.serializeMenu(it)
8381
} catch (t: Throwable) {
8482
return@start SerialzeResult(SerialzeResult.Type.MENU, SerialzeResult.State.FAILED).also {
85-
t.message?.let { msg -> it.errors.add(msg) }
83+
it.submitError(t)
8684
}
8785
}
8886
if (result.state == SerialzeResult.State.IGNORE) {
8987
return@start result
9088
}
9189
if (result.succeed() && TrMenu.SETTINGS.getBoolean("Loader.Listen-Files", true)) {
9290
listen(it)
93-
} else errors.addAll(result.errors)
91+
}
9492
result
9593
},
9694
// success
@@ -113,7 +111,7 @@ object Loader {
113111
result.first.nameWithoutExtension,
114112
result.second.type.name
115113
)
116-
result.second.errors.forEach { console().sendMessage(" §8$it") }
114+
result.second.printStackTrace()
117115
console().sendMessage("")
118116
}
119117
Menu.menus.add(menu)
@@ -139,7 +137,7 @@ object Loader {
139137
file.nameWithoutExtension,
140138
it.type.name
141139
)
142-
it.errors.forEach { console().sendMessage(" §8$it") }
140+
it.printStackTrace()
143141
console().sendMessage("")
144142
}
145143
}

plugin/src/main/kotlin/trplugins/menu/module/conf/MenuSerializer.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,20 +85,20 @@ object MenuSerializer : ISerializer {
8585
// 读取菜单设置
8686
val settings = serializeSetting(conf, languages)
8787
if (!settings.succeed()) {
88-
result.errors.addAll(settings.errors).also {
88+
result.submitErrors(settings).also {
8989
return result
9090
}
9191
}
9292

9393
// 读取菜单布局
9494
val layout = serializeLayout(conf)
9595
if (!layout.succeed()) {
96-
result.errors.addAll(layout.errors).also { return result }
96+
result.submitErrors(layout).also { return result }
9797
}
9898
// 读取菜单图标
9999
val icons = serializeIcons(conf, languages, layout.asLayout())
100100
if (!icons.succeed()) {
101-
result.errors.addAll(icons.errors).also {
101+
result.submitErrors(icons).also {
102102
return result
103103
}
104104
}

plugin/src/main/kotlin/trplugins/menu/module/conf/prop/SerialzeResult.kt

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package trplugins.menu.module.conf.prop
22

3+
import taboolib.common.platform.function.console
34
import taboolib.common.util.replaceWithOrder
45
import trplugins.menu.module.display.icon.Icon
56
import trplugins.menu.module.display.layout.MenuLayout
@@ -11,17 +12,45 @@ import trplugins.menu.module.display.layout.MenuLayout
1112
class SerialzeResult(
1213
val type: Type,
1314
var state: State = State.SUCCESS,
14-
val errors: MutableList<String> = mutableListOf(),
15+
val errors: MutableList<Throwable> = mutableListOf(),
1516
var result: Any? = null
1617
) {
1718

1819
fun succeed(): Boolean {
1920
return state == State.SUCCESS && result != null
2021
}
2122

23+
fun submitError(error: Throwable) {
24+
errors.add(error)
25+
}
26+
2227
fun submitError(error: SerializeError, vararg args: Any) {
2328
state = State.FAILED
24-
errors.add(SerializeError.formatInfo(error).replaceWithOrder(*args))
29+
errors.add(RuntimeException(SerializeError.formatInfo(error).replaceWithOrder(*args)))
30+
}
31+
32+
fun submitErrors(result: SerialzeResult): Boolean {
33+
return errors.addAll(result.errors)
34+
}
35+
36+
fun printStackTrace() {
37+
errors.forEach { printStackTrace(it) }
38+
}
39+
40+
fun printStackTrace(t: Throwable) {
41+
printStackTrace(t, " §8")
42+
}
43+
44+
fun printStackTrace(t: Throwable, prefix: String) {
45+
console().sendMessage(prefix + t)
46+
47+
t.stackTrace.forEach { console().sendMessage("$prefix\tat $it") }
48+
49+
val cause = t.cause
50+
if (cause != null) {
51+
console().sendMessage(prefix + "Caused by:")
52+
printStackTrace(cause)
53+
}
2554
}
2655

2756
@Suppress("UNCHECKED_CAST")

0 commit comments

Comments
 (0)