From 0f47403d0220757fed189b76e2071e25b1025cb8 Mon Sep 17 00:00:00 2001 From: Runemoro Date: Wed, 3 Jun 2020 13:39:42 -0400 Subject: Split GUI code to separate module (#242) * Split into modules * Post merge compile fixes Co-authored-by: modmuss50 --- .../bytecode/translators/AsmObjectTranslator.java | 46 ------- .../translators/LocalVariableFixVisitor.java | 126 ------------------ .../bytecode/translators/SourceFixVisitor.java | 39 ------ .../translators/TranslationAnnotationVisitor.java | 51 -------- .../translators/TranslationClassVisitor.java | 102 --------------- .../translators/TranslationFieldVisitor.java | 33 ----- .../translators/TranslationMethodVisitor.java | 145 --------------------- .../translators/TranslationSignatureVisitor.java | 129 ------------------ 8 files changed, 671 deletions(-) delete mode 100644 src/main/java/cuchaz/enigma/bytecode/translators/AsmObjectTranslator.java delete mode 100644 src/main/java/cuchaz/enigma/bytecode/translators/LocalVariableFixVisitor.java delete mode 100644 src/main/java/cuchaz/enigma/bytecode/translators/SourceFixVisitor.java delete mode 100644 src/main/java/cuchaz/enigma/bytecode/translators/TranslationAnnotationVisitor.java delete mode 100644 src/main/java/cuchaz/enigma/bytecode/translators/TranslationClassVisitor.java delete mode 100644 src/main/java/cuchaz/enigma/bytecode/translators/TranslationFieldVisitor.java delete mode 100644 src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java delete mode 100644 src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java (limited to 'src/main/java/cuchaz/enigma/bytecode') diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/AsmObjectTranslator.java b/src/main/java/cuchaz/enigma/bytecode/translators/AsmObjectTranslator.java deleted file mode 100644 index 1a2b47f..0000000 --- a/src/main/java/cuchaz/enigma/bytecode/translators/AsmObjectTranslator.java +++ /dev/null @@ -1,46 +0,0 @@ -package cuchaz.enigma.bytecode.translators; - -import cuchaz.enigma.translation.Translator; -import cuchaz.enigma.translation.representation.MethodDescriptor; -import cuchaz.enigma.translation.representation.TypeDescriptor; -import cuchaz.enigma.translation.representation.entry.ClassEntry; -import cuchaz.enigma.translation.representation.entry.MethodEntry; -import org.objectweb.asm.Handle; -import org.objectweb.asm.Type; - -public class AsmObjectTranslator { - public static Type translateType(Translator translator, Type type) { - String descString = type.getDescriptor(); - switch (type.getSort()) { - case Type.OBJECT: { - ClassEntry classEntry = new ClassEntry(type.getInternalName()); - return Type.getObjectType(translator.translate(classEntry).getFullName()); - } - case Type.ARRAY: { - TypeDescriptor descriptor = new TypeDescriptor(descString); - return Type.getType(translator.translate(descriptor).toString()); - } - case Type.METHOD: { - MethodDescriptor descriptor = new MethodDescriptor(descString); - return Type.getMethodType(translator.translate(descriptor).toString()); - } - } - return type; - } - - public static Handle translateHandle(Translator translator, Handle handle) { - MethodEntry entry = new MethodEntry(new ClassEntry(handle.getOwner()), handle.getName(), new MethodDescriptor(handle.getDesc())); - MethodEntry translatedMethod = translator.translate(entry); - ClassEntry ownerClass = translatedMethod.getParent(); - return new Handle(handle.getTag(), ownerClass.getFullName(), translatedMethod.getName(), translatedMethod.getDesc().toString(), handle.isInterface()); - } - - public static Object translateValue(Translator translator, Object value) { - if (value instanceof Type) { - return translateType(translator, (Type) value); - } else if (value instanceof Handle) { - return translateHandle(translator, (Handle) value); - } - return value; - } -} diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/LocalVariableFixVisitor.java b/src/main/java/cuchaz/enigma/bytecode/translators/LocalVariableFixVisitor.java deleted file mode 100644 index cfd8fbe..0000000 --- a/src/main/java/cuchaz/enigma/bytecode/translators/LocalVariableFixVisitor.java +++ /dev/null @@ -1,126 +0,0 @@ -package cuchaz.enigma.bytecode.translators; - -import com.google.common.base.CharMatcher; -import cuchaz.enigma.translation.LocalNameGenerator; -import cuchaz.enigma.translation.representation.TypeDescriptor; -import cuchaz.enigma.translation.representation.entry.ClassDefEntry; -import cuchaz.enigma.translation.representation.entry.MethodDefEntry; -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.Label; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class LocalVariableFixVisitor extends ClassVisitor { - private ClassDefEntry ownerEntry; - - public LocalVariableFixVisitor(int api, ClassVisitor visitor) { - super(api, visitor); - } - - @Override - public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { - ownerEntry = ClassDefEntry.parse(access, name, signature, superName, interfaces); - super.visit(version, access, name, signature, superName, interfaces); - } - - @Override - public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { - MethodDefEntry methodEntry = MethodDefEntry.parse(ownerEntry, access, name, descriptor, signature); - return new Method(api, methodEntry, super.visitMethod(access, name, descriptor, signature, exceptions)); - } - - private class Method extends MethodVisitor { - private final MethodDefEntry methodEntry; - private final Map parameterNames = new HashMap<>(); - private final Map parameterIndices = new HashMap<>(); - private boolean hasParameterTable; - private int parameterIndex = 0; - - Method(int api, MethodDefEntry methodEntry, MethodVisitor visitor) { - super(api, visitor); - this.methodEntry = methodEntry; - - int lvIndex = methodEntry.getAccess().isStatic() ? 0 : 1; - List parameters = methodEntry.getDesc().getArgumentDescs(); - for (int parameterIndex = 0; parameterIndex < parameters.size(); parameterIndex++) { - TypeDescriptor param = parameters.get(parameterIndex); - parameterIndices.put(lvIndex, parameterIndex); - lvIndex += param.getSize(); - } - } - - @Override - public void visitParameter(String name, int access) { - hasParameterTable = true; - super.visitParameter(fixParameterName(parameterIndex, name), fixParameterAccess(parameterIndex, access)); - parameterIndex++; - } - - @Override - public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) { - if (index == 0 && !methodEntry.getAccess().isStatic()) { - name = "this"; - } else if (parameterIndices.containsKey(index)) { - name = fixParameterName(parameterIndices.get(index), name); - } else if (isInvalidName(name)) { - name = LocalNameGenerator.generateLocalVariableName(index, new TypeDescriptor(desc)); - } - - super.visitLocalVariable(name, desc, signature, start, end, index); - } - - private boolean isInvalidName(String name) { - return name == null || name.isEmpty() || !CharMatcher.ascii().matchesAllOf(name); - } - - @Override - public void visitEnd() { - if (!hasParameterTable) { - List arguments = methodEntry.getDesc().getArgumentDescs(); - for (int argumentIndex = 0; argumentIndex < arguments.size(); argumentIndex++) { - super.visitParameter(fixParameterName(argumentIndex, null), fixParameterAccess(argumentIndex, 0)); - } - } - - super.visitEnd(); - } - - private String fixParameterName(int index, String name) { - if (parameterNames.get(index) != null) { - return parameterNames.get(index); // to make sure that LVT names are consistent with parameter table names - } - - if (isInvalidName(name)) { - List arguments = methodEntry.getDesc().getArgumentDescs(); - name = LocalNameGenerator.generateArgumentName(index, arguments.get(index), arguments); - } - - if (index == 0 && ownerEntry.getAccess().isEnum() && methodEntry.getName().equals("")) { - name = "name"; - } - - if (index == 1 && ownerEntry.getAccess().isEnum() && methodEntry.getName().equals("")) { - name = "ordinal"; - } - - parameterNames.put(index, name); - return name; - } - - private int fixParameterAccess(int index, int access) { - if (index == 0 && ownerEntry.getAccess().isEnum() && methodEntry.getName().equals("")) { - access |= Opcodes.ACC_SYNTHETIC; - } - - if (index == 1 && ownerEntry.getAccess().isEnum() && methodEntry.getName().equals("")) { - access |= Opcodes.ACC_SYNTHETIC; - } - - return access; - } - } -} diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/SourceFixVisitor.java b/src/main/java/cuchaz/enigma/bytecode/translators/SourceFixVisitor.java deleted file mode 100644 index 2b750ea..0000000 --- a/src/main/java/cuchaz/enigma/bytecode/translators/SourceFixVisitor.java +++ /dev/null @@ -1,39 +0,0 @@ -package cuchaz.enigma.bytecode.translators; - -import cuchaz.enigma.analysis.index.BridgeMethodIndex; -import cuchaz.enigma.analysis.index.JarIndex; -import cuchaz.enigma.translation.representation.entry.ClassDefEntry; -import cuchaz.enigma.translation.representation.entry.MethodDefEntry; -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -public class SourceFixVisitor extends ClassVisitor { - private final JarIndex index; - private ClassDefEntry ownerEntry; - - public SourceFixVisitor(int api, ClassVisitor visitor, JarIndex index) { - super(api, visitor); - this.index = index; - } - - @Override - public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { - ownerEntry = ClassDefEntry.parse(access, name, signature, superName, interfaces); - super.visit(version, access, name, signature, superName, interfaces); - } - - @Override - public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { - MethodDefEntry methodEntry = MethodDefEntry.parse(ownerEntry, access, name, descriptor, signature); - - BridgeMethodIndex bridgeIndex = index.getBridgeMethodIndex(); - if (bridgeIndex.isBridgeMethod(methodEntry)) { - access |= Opcodes.ACC_BRIDGE; - } else if (bridgeIndex.isSpecializedMethod(methodEntry)) { - name = bridgeIndex.getBridgeFromSpecialized(methodEntry).getName(); - } - - return super.visitMethod(access, name, descriptor, signature, exceptions); - } -} diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationAnnotationVisitor.java b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationAnnotationVisitor.java deleted file mode 100644 index cb843ad..0000000 --- a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationAnnotationVisitor.java +++ /dev/null @@ -1,51 +0,0 @@ -package cuchaz.enigma.bytecode.translators; - -import cuchaz.enigma.translation.Translator; -import cuchaz.enigma.translation.representation.TypeDescriptor; -import cuchaz.enigma.translation.representation.entry.ClassEntry; -import cuchaz.enigma.translation.representation.entry.FieldEntry; -import org.objectweb.asm.AnnotationVisitor; - -public class TranslationAnnotationVisitor extends AnnotationVisitor { - private final Translator translator; - private final ClassEntry annotationEntry; - - public TranslationAnnotationVisitor(Translator translator, ClassEntry annotationEntry, int api, AnnotationVisitor av) { - super(api, av); - this.translator = translator; - this.annotationEntry = annotationEntry; - } - - @Override - public void visit(String name, Object value) { - super.visit(name, AsmObjectTranslator.translateValue(translator, value)); - } - - @Override - public AnnotationVisitor visitArray(String name) { - return new TranslationAnnotationVisitor(translator, annotationEntry, api, super.visitArray(name)); - } - - @Override - public AnnotationVisitor visitAnnotation(String name, String desc) { - TypeDescriptor type = new TypeDescriptor(desc); - if (name != null) { - FieldEntry annotationField = translator.translate(new FieldEntry(annotationEntry, name, type)); - return super.visitAnnotation(annotationField.getName(), annotationField.getDesc().toString()); - } else { - return super.visitAnnotation(null, translator.translate(type).toString()); - } - } - - @Override - public void visitEnum(String name, String desc, String value) { - TypeDescriptor type = new TypeDescriptor(desc); - FieldEntry enumField = translator.translate(new FieldEntry(type.getTypeEntry(), value, type)); - if (name != null) { - FieldEntry annotationField = translator.translate(new FieldEntry(annotationEntry, name, type)); - super.visitEnum(annotationField.getName(), annotationField.getDesc().toString(), enumField.getName()); - } else { - super.visitEnum(null, translator.translate(type).toString(), enumField.getName()); - } - } -} diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationClassVisitor.java b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationClassVisitor.java deleted file mode 100644 index e4c41d3..0000000 --- a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationClassVisitor.java +++ /dev/null @@ -1,102 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015 Jeff Martin. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Lesser General Public - * License v3.0 which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/lgpl.html - *

- * Contributors: - * Jeff Martin - initial API and implementation - ******************************************************************************/ - -package cuchaz.enigma.bytecode.translators; - -import cuchaz.enigma.translation.Translator; -import cuchaz.enigma.translation.representation.MethodDescriptor; -import cuchaz.enigma.translation.representation.TypeDescriptor; -import cuchaz.enigma.translation.representation.entry.*; -import org.objectweb.asm.*; - -import java.util.Arrays; - -public class TranslationClassVisitor extends ClassVisitor { - private final Translator translator; - - private ClassDefEntry obfClassEntry; - - public TranslationClassVisitor(Translator translator, int api, ClassVisitor cv) { - super(api, cv); - this.translator = translator; - } - - @Override - public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { - obfClassEntry = ClassDefEntry.parse(access, name, signature, superName, interfaces); - - ClassDefEntry translatedEntry = translator.translate(obfClassEntry); - String translatedSuper = translatedEntry.getSuperClass() != null ? translatedEntry.getSuperClass().getFullName() : null; - String[] translatedInterfaces = Arrays.stream(translatedEntry.getInterfaces()).map(ClassEntry::getFullName).toArray(String[]::new); - - super.visit(version, translatedEntry.getAccess().getFlags(), translatedEntry.getFullName(), translatedEntry.getSignature().toString(), translatedSuper, translatedInterfaces); - } - - @Override - public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { - FieldDefEntry entry = FieldDefEntry.parse(obfClassEntry, access, name, desc, signature); - FieldDefEntry translatedEntry = translator.translate(entry); - FieldVisitor fv = super.visitField(translatedEntry.getAccess().getFlags(), translatedEntry.getName(), translatedEntry.getDesc().toString(), translatedEntry.getSignature().toString(), value); - return new TranslationFieldVisitor(translator, translatedEntry, api, fv); - } - - @Override - public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - MethodDefEntry entry = MethodDefEntry.parse(obfClassEntry, access, name, desc, signature); - MethodDefEntry translatedEntry = translator.translate(entry); - String[] translatedExceptions = new String[exceptions.length]; - for (int i = 0; i < exceptions.length; i++) { - translatedExceptions[i] = translator.translate(new ClassEntry(exceptions[i])).getFullName(); - } - MethodVisitor mv = super.visitMethod(translatedEntry.getAccess().getFlags(), translatedEntry.getName(), translatedEntry.getDesc().toString(), translatedEntry.getSignature().toString(), translatedExceptions); - return new TranslationMethodVisitor(translator, obfClassEntry, entry, api, mv); - } - - @Override - public void visitInnerClass(String name, String outerName, String innerName, int access) { - ClassDefEntry classEntry = ClassDefEntry.parse(access, name, obfClassEntry.getSignature().toString(), null, new String[0]); - ClassDefEntry translatedEntry = translator.translate(classEntry); - ClassEntry translatedOuterClass = translatedEntry.getOuterClass(); - if (translatedOuterClass == null) { - throw new IllegalStateException("Translated inner class did not have outer class"); - } - - // Anonymous classes do not specify an outer or inner name. As we do not translate from the given parameter, ignore if the input is null - String translatedName = translatedEntry.getFullName(); - String translatedOuterName = outerName != null ? translatedOuterClass.getFullName() : null; - String translatedInnerName = innerName != null ? translatedEntry.getName() : null; - super.visitInnerClass(translatedName, translatedOuterName, translatedInnerName, translatedEntry.getAccess().getFlags()); - } - - @Override - public void visitOuterClass(String owner, String name, String desc) { - if (desc != null) { - MethodEntry translatedEntry = translator.translate(new MethodEntry(new ClassEntry(owner), name, new MethodDescriptor(desc))); - super.visitOuterClass(translatedEntry.getParent().getFullName(), translatedEntry.getName(), translatedEntry.getDesc().toString()); - } else { - super.visitOuterClass(owner, name, desc); - } - } - - @Override - public AnnotationVisitor visitAnnotation(String desc, boolean visible) { - TypeDescriptor translatedDesc = translator.translate(new TypeDescriptor(desc)); - AnnotationVisitor av = super.visitAnnotation(translatedDesc.toString(), visible); - return new TranslationAnnotationVisitor(translator, translatedDesc.getTypeEntry(), api, av); - } - - @Override - public AnnotationVisitor visitTypeAnnotation(int typeRef, TypePath typePath, String desc, boolean visible) { - TypeDescriptor translatedDesc = translator.translate(new TypeDescriptor(desc)); - AnnotationVisitor av = super.visitTypeAnnotation(typeRef, typePath, translatedDesc.toString(), visible); - return new TranslationAnnotationVisitor(translator, translatedDesc.getTypeEntry(), api, av); - } -} diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationFieldVisitor.java b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationFieldVisitor.java deleted file mode 100644 index 28fc199..0000000 --- a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationFieldVisitor.java +++ /dev/null @@ -1,33 +0,0 @@ -package cuchaz.enigma.bytecode.translators; - -import cuchaz.enigma.translation.Translator; -import cuchaz.enigma.translation.representation.TypeDescriptor; -import cuchaz.enigma.translation.representation.entry.FieldDefEntry; -import org.objectweb.asm.AnnotationVisitor; -import org.objectweb.asm.FieldVisitor; -import org.objectweb.asm.TypePath; - -public class TranslationFieldVisitor extends FieldVisitor { - private final FieldDefEntry fieldEntry; - private final Translator translator; - - public TranslationFieldVisitor(Translator translator, FieldDefEntry fieldEntry, int api, FieldVisitor fv) { - super(api, fv); - this.translator = translator; - this.fieldEntry = fieldEntry; - } - - @Override - public AnnotationVisitor visitAnnotation(String desc, boolean visible) { - TypeDescriptor typeDesc = translator.translate(new TypeDescriptor(desc)); - AnnotationVisitor av = super.visitAnnotation(typeDesc.toString(), visible); - return new TranslationAnnotationVisitor(translator, typeDesc.getTypeEntry(), api, av); - } - - @Override - public AnnotationVisitor visitTypeAnnotation(int typeRef, TypePath typePath, String desc, boolean visible) { - TypeDescriptor typeDesc = translator.translate(new TypeDescriptor(desc)); - AnnotationVisitor av = super.visitAnnotation(typeDesc.toString(), visible); - return new TranslationAnnotationVisitor(translator, typeDesc.getTypeEntry(), api, av); - } -} diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java deleted file mode 100644 index a82df1b..0000000 --- a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java +++ /dev/null @@ -1,145 +0,0 @@ -package cuchaz.enigma.bytecode.translators; - -import cuchaz.enigma.translation.Translator; -import cuchaz.enigma.translation.representation.MethodDescriptor; -import cuchaz.enigma.translation.representation.Signature; -import cuchaz.enigma.translation.representation.TypeDescriptor; -import cuchaz.enigma.translation.representation.entry.*; -import org.objectweb.asm.*; - -public class TranslationMethodVisitor extends MethodVisitor { - private final MethodDefEntry methodEntry; - private final Translator translator; - - private int parameterIndex = 0; - private int parameterLvIndex; - - public TranslationMethodVisitor(Translator translator, ClassDefEntry ownerEntry, MethodDefEntry methodEntry, int api, MethodVisitor mv) { - super(api, mv); - this.translator = translator; - this.methodEntry = methodEntry; - - parameterLvIndex = methodEntry.getAccess().isStatic() ? 0 : 1; - } - - @Override - public void visitParameter(String name, int access) { - name = translateVariableName(parameterLvIndex, name); - parameterLvIndex += methodEntry.getDesc().getArgumentDescs().get(parameterIndex++).getSize(); - - super.visitParameter(name, access); - } - - @Override - public void visitFieldInsn(int opcode, String owner, String name, String desc) { - FieldEntry entry = new FieldEntry(new ClassEntry(owner), name, new TypeDescriptor(desc)); - FieldEntry translatedEntry = translator.translate(entry); - super.visitFieldInsn(opcode, translatedEntry.getParent().getFullName(), translatedEntry.getName(), translatedEntry.getDesc().toString()); - } - - @Override - public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { - MethodEntry entry = new MethodEntry(new ClassEntry(owner), name, new MethodDescriptor(desc)); - MethodEntry translatedEntry = translator.translate(entry); - super.visitMethodInsn(opcode, translatedEntry.getParent().getFullName(), translatedEntry.getName(), translatedEntry.getDesc().toString(), itf); - } - - @Override - public void visitFrame(int type, int localCount, Object[] locals, int stackCount, Object[] stack) { - Object[] translatedLocals = this.getTranslatedFrame(locals, localCount); - Object[] translatedStack = this.getTranslatedFrame(stack, stackCount); - super.visitFrame(type, localCount, translatedLocals, stackCount, translatedStack); - } - - private Object[] getTranslatedFrame(Object[] array, int count) { - if (array == null) { - return null; - } - for (int i = 0; i < count; i++) { - Object object = array[i]; - if (object instanceof String) { - String type = (String) object; - array[i] = translator.translate(new ClassEntry(type)).getFullName(); - } - } - return array; - } - - @Override - public AnnotationVisitor visitAnnotation(String desc, boolean visible) { - TypeDescriptor typeDesc = translator.translate(new TypeDescriptor(desc)); - AnnotationVisitor av = super.visitAnnotation(typeDesc.toString(), visible); - return new TranslationAnnotationVisitor(translator, typeDesc.getTypeEntry(), api, av); - } - - @Override - public AnnotationVisitor visitParameterAnnotation(int parameter, String desc, boolean visible) { - TypeDescriptor typeDesc = translator.translate(new TypeDescriptor(desc)); - AnnotationVisitor av = super.visitParameterAnnotation(parameter, typeDesc.toString(), visible); - return new TranslationAnnotationVisitor(translator, typeDesc.getTypeEntry(), api, av); - } - - @Override - public AnnotationVisitor visitTypeAnnotation(int typeRef, TypePath typePath, String desc, boolean visible) { - TypeDescriptor typeDesc = translator.translate(new TypeDescriptor(desc)); - AnnotationVisitor av = super.visitTypeAnnotation(typeRef, typePath, typeDesc.toString(), visible); - return new TranslationAnnotationVisitor(translator, typeDesc.getTypeEntry(), api, av); - } - - @Override - public void visitTypeInsn(int opcode, String type) { - ClassEntry translatedEntry = translator.translate(new ClassEntry(type)); - super.visitTypeInsn(opcode, translatedEntry.getFullName()); - } - - @Override - public void visitInvokeDynamicInsn(String name, String desc, Handle bsm, Object... bsmArgs) { - MethodDescriptor translatedMethodDesc = translator.translate(new MethodDescriptor(desc)); - Object[] translatedBsmArgs = new Object[bsmArgs.length]; - for (int i = 0; i < bsmArgs.length; i++) { - translatedBsmArgs[i] = AsmObjectTranslator.translateValue(translator, bsmArgs[i]); - } - super.visitInvokeDynamicInsn(name, translatedMethodDesc.toString(), AsmObjectTranslator.translateHandle(translator, bsm), translatedBsmArgs); - } - - @Override - public void visitLdcInsn(Object cst) { - super.visitLdcInsn(AsmObjectTranslator.translateValue(translator, cst)); - } - - @Override - public void visitMultiANewArrayInsn(String desc, int dims) { - super.visitMultiANewArrayInsn(translator.translate(new TypeDescriptor(desc)).toString(), dims); - } - - @Override - public void visitTryCatchBlock(Label start, Label end, Label handler, String type) { - if (type != null) { - ClassEntry translatedEntry = translator.translate(new ClassEntry(type)); - super.visitTryCatchBlock(start, end, handler, translatedEntry.getFullName()); - } else { - super.visitTryCatchBlock(start, end, handler, type); - } - } - - @Override - public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) { - signature = translator.translate(Signature.createTypedSignature(signature)).toString(); - name = translateVariableName(index, name); - desc = translator.translate(new TypeDescriptor(desc)).toString(); - - super.visitLocalVariable(name, desc, signature, start, end, index); - } - - private String translateVariableName(int index, String name) { - LocalVariableEntry entry = new LocalVariableEntry(methodEntry, index, "", true,null); - LocalVariableEntry translatedEntry = translator.translate(entry); - String translatedName = translatedEntry.getName(); - - if (!translatedName.isEmpty()) { - return translatedName; - } - - return name; - } -} diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java deleted file mode 100644 index eebd650..0000000 --- a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationSignatureVisitor.java +++ /dev/null @@ -1,129 +0,0 @@ -package cuchaz.enigma.bytecode.translators; - -import cuchaz.enigma.utils.Utils; -import org.objectweb.asm.signature.SignatureVisitor; - -import java.util.Stack; -import java.util.function.Function; - -public class TranslationSignatureVisitor extends SignatureVisitor { - private final Function remapper; - - private final SignatureVisitor sv; - private final Stack classStack = new Stack<>(); - - public TranslationSignatureVisitor(Function remapper, SignatureVisitor sv) { - super(Utils.ASM_VERSION); - this.remapper = remapper; - this.sv = sv; - } - - @Override - public void visitClassType(String name) { - classStack.push(name); - String translatedEntry = this.remapper.apply(name); - this.sv.visitClassType(translatedEntry); - } - - @Override - public void visitInnerClassType(String name) { - String lastClass = classStack.pop(); - if (!name.startsWith(lastClass+"$")){//todo see if there's a way to base this on whether there were type params or not - name = lastClass+"$"+name; - } - String translatedEntry = this.remapper.apply(name); - if (translatedEntry.contains("/")){ - translatedEntry = translatedEntry.substring(translatedEntry.lastIndexOf("/")+1); - } - if (translatedEntry.contains("$")){ - translatedEntry = translatedEntry.substring(translatedEntry.lastIndexOf("$")+1); - } - this.sv.visitInnerClassType(translatedEntry); - } - - @Override - public void visitFormalTypeParameter(String name) { - this.sv.visitFormalTypeParameter(name); - } - - @Override - public void visitTypeVariable(String name) { - this.sv.visitTypeVariable(name); - } - - @Override - public SignatureVisitor visitArrayType() { - this.sv.visitArrayType(); - return this; - } - - @Override - public void visitBaseType(char descriptor) { - this.sv.visitBaseType(descriptor); - } - - @Override - public SignatureVisitor visitClassBound() { - this.sv.visitClassBound(); - return this; - } - - @Override - public SignatureVisitor visitExceptionType() { - this.sv.visitExceptionType(); - return this; - } - - @Override - public SignatureVisitor visitInterface() { - this.sv.visitInterface(); - return this; - } - - @Override - public SignatureVisitor visitInterfaceBound() { - this.sv.visitInterfaceBound(); - return this; - } - - @Override - public SignatureVisitor visitParameterType() { - this.sv.visitParameterType(); - return this; - } - - @Override - public SignatureVisitor visitReturnType() { - this.sv.visitReturnType(); - return this; - } - - @Override - public SignatureVisitor visitSuperclass() { - this.sv.visitSuperclass(); - return this; - } - - @Override - public void visitTypeArgument() { - this.sv.visitTypeArgument(); - } - - @Override - public SignatureVisitor visitTypeArgument(char wildcard) { - this.sv.visitTypeArgument(wildcard); - return this; - } - - @Override - public void visitEnd() { - this.sv.visitEnd(); - if (!classStack.empty()) - classStack.pop(); - } - - @Override - public String toString() { - return this.sv.toString(); - } -} -- cgit v1.2.3