summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/mapping
diff options
context:
space:
mode:
authorGravatar Thog2016-09-07 16:58:12 +0200
committerGravatar Thog2016-09-07 16:58:12 +0200
commit591f44c85c392ecf281039a9f3c52673c11d9584 (patch)
tree3210b2c45643a286dda715915fb7776deac84ee3 /src/main/java/cuchaz/enigma/mapping
parentGenerify ProcyonEntryFactory (Fix #18) (diff)
downloadenigma-fork-591f44c85c392ecf281039a9f3c52673c11d9584.tar.gz
enigma-fork-591f44c85c392ecf281039a9f3c52673c11d9584.tar.xz
enigma-fork-591f44c85c392ecf281039a9f3c52673c11d9584.zip
Follow Javassist signature instead of ignoring generic classes (Fix #19)
Diffstat (limited to 'src/main/java/cuchaz/enigma/mapping')
-rw-r--r--src/main/java/cuchaz/enigma/mapping/ProcyonEntryFactory.java31
1 files changed, 26 insertions, 5 deletions
diff --git a/src/main/java/cuchaz/enigma/mapping/ProcyonEntryFactory.java b/src/main/java/cuchaz/enigma/mapping/ProcyonEntryFactory.java
index 08dc8b1..8cbca13 100644
--- a/src/main/java/cuchaz/enigma/mapping/ProcyonEntryFactory.java
+++ b/src/main/java/cuchaz/enigma/mapping/ProcyonEntryFactory.java
@@ -10,19 +10,40 @@
10 ******************************************************************************/ 10 ******************************************************************************/
11package cuchaz.enigma.mapping; 11package cuchaz.enigma.mapping;
12 12
13import com.strobel.assembler.metadata.FieldDefinition; 13import com.strobel.assembler.metadata.*;
14import com.strobel.assembler.metadata.MemberReference; 14
15import com.strobel.assembler.metadata.MethodDefinition; 15import java.util.List;
16import com.strobel.assembler.metadata.MethodReference;
17 16
18public class ProcyonEntryFactory { 17public class ProcyonEntryFactory {
19 18
19 private static String getErasedSignature(MemberReference def)
20 {
21 if (!(def instanceof MethodReference))
22 return def.getErasedSignature();
23 MethodReference methodReference = (MethodReference) def;
24 StringBuilder builder = new StringBuilder("(");
25 for (ParameterDefinition param : methodReference.getParameters())
26 {
27 TypeReference paramType = param.getParameterType();
28 if (paramType.getErasedSignature().equals("Ljava/lang/Object;") && paramType.hasExtendsBound() && paramType.getExtendsBound() instanceof CompoundTypeReference)
29 {
30 List<TypeReference> interfaces = ((CompoundTypeReference) paramType.getExtendsBound()).getInterfaces();
31 interfaces.forEach((inter) -> builder.append(inter.getErasedSignature()));
32 }
33 else
34 builder.append(paramType.getErasedSignature());
35 }
36 builder.append(")");
37 builder.append(methodReference.getReturnType().getErasedSignature());
38 return builder.toString();
39 }
40
20 public static FieldEntry getFieldEntry(MemberReference def) { 41 public static FieldEntry getFieldEntry(MemberReference def) {
21 return new FieldEntry(new ClassEntry(def.getDeclaringType().getInternalName()), def.getName(), new Type(def.getErasedSignature())); 42 return new FieldEntry(new ClassEntry(def.getDeclaringType().getInternalName()), def.getName(), new Type(def.getErasedSignature()));
22 } 43 }
23 44
24 public static MethodEntry getMethodEntry(MemberReference def) { 45 public static MethodEntry getMethodEntry(MemberReference def) {
25 return new MethodEntry(new ClassEntry(def.getDeclaringType().getInternalName()), def.getName(), new Signature(def.getErasedSignature())); 46 return new MethodEntry(new ClassEntry(def.getDeclaringType().getInternalName()), def.getName(), new Signature(getErasedSignature(def)));
26 } 47 }
27 48
28 public static ConstructorEntry getConstructorEntry(MethodReference def) { 49 public static ConstructorEntry getConstructorEntry(MethodReference def) {