From baedcf435e44511f8763668ad4f5a9cdad663c3b Mon Sep 17 00:00:00 2001 From: IzzelAliz Date: Mon, 13 Jul 2020 14:17:06 +0800 Subject: [PATCH] Optimize implementer: skip code parsing. --- .../common/asm/InventoryImplementer.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/asm/InventoryImplementer.java b/arclight-common/src/main/java/io/izzel/arclight/common/asm/InventoryImplementer.java index ea9e8bde..880a00fe 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/asm/InventoryImplementer.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/asm/InventoryImplementer.java @@ -80,17 +80,21 @@ public class InventoryImplementer implements Implementer { private ClassNode findClass(String typeName, ILaunchPluginService.ITransformerLoader transformerLoader) throws Exception { try { - byte[] bytes = transformerLoader.buildTransformedClassNodeFor(Type.getObjectType(typeName).getClassName()); - ClassNode node = new ClassNode(); - new ClassReader(bytes).accept(node, ClassReader.EXPAND_FRAMES); - return node; - } catch (ClassNotFoundException e) { InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream(typeName + ".class"); if (stream == null) throw LocalizedException.checked("implementer.not-found", typeName); byte[] array = ByteStreams.toByteArray(stream); ClassNode node = new ClassNode(); - new ClassReader(array).accept(node, ClassReader.EXPAND_FRAMES); + new ClassReader(array).accept(node, ClassReader.SKIP_CODE); return node; + } catch (Throwable e) { + try { + byte[] bytes = transformerLoader.buildTransformedClassNodeFor(Type.getObjectType(typeName).getClassName()); + ClassNode node = new ClassNode(); + new ClassReader(bytes).accept(node, ClassReader.SKIP_CODE); + return node; + } catch (Throwable t) { + throw LocalizedException.checked("implementer.not-found", typeName); + } } }