From 4ff89cb1d48cb6916220ee308bf40810cfd868e2 Mon Sep 17 00:00:00 2001 From: Gegy Date: Sat, 15 Dec 2018 22:29:41 +0200 Subject: Tweak variable name generation (#86) * Don't apply offset to all methods in abstract class * Tweak local variable naming --- src/main/java/cuchaz/enigma/mapping/NameValidator.java | 4 ++++ src/main/java/cuchaz/enigma/mapping/TypeDescriptor.java | 16 ++++++++-------- .../java/cuchaz/enigma/mapping/entry/MethodDefEntry.java | 16 ++++++++++++++++ 3 files changed, 28 insertions(+), 8 deletions(-) (limited to 'src/main/java/cuchaz/enigma/mapping') diff --git a/src/main/java/cuchaz/enigma/mapping/NameValidator.java b/src/main/java/cuchaz/enigma/mapping/NameValidator.java index 9273c9b..fca8cfc 100644 --- a/src/main/java/cuchaz/enigma/mapping/NameValidator.java +++ b/src/main/java/cuchaz/enigma/mapping/NameValidator.java @@ -66,4 +66,8 @@ public class NameValidator { public static String validateArgumentName(String name) { return validateFieldName(name); } + + public static boolean isReserved(String name) { + return ReservedWords.contains(name); + } } diff --git a/src/main/java/cuchaz/enigma/mapping/TypeDescriptor.java b/src/main/java/cuchaz/enigma/mapping/TypeDescriptor.java index 3c8cc74..6e58aa0 100644 --- a/src/main/java/cuchaz/enigma/mapping/TypeDescriptor.java +++ b/src/main/java/cuchaz/enigma/mapping/TypeDescriptor.java @@ -223,14 +223,14 @@ public class TypeDescriptor { } public enum Primitive { - Byte('B'), - Character('C'), - Short('S'), - Integer('I'), - Long('J'), - Float('F'), - Double('D'), - Boolean('Z'); + BYTE('B'), + CHARACTER('C'), + SHORT('S'), + INTEGER('I'), + LONG('J'), + FLOAT('F'), + DOUBLE('D'), + BOOLEAN('Z'); private static final Map lookup; diff --git a/src/main/java/cuchaz/enigma/mapping/entry/MethodDefEntry.java b/src/main/java/cuchaz/enigma/mapping/entry/MethodDefEntry.java index 960b08d..fa9e668 100644 --- a/src/main/java/cuchaz/enigma/mapping/entry/MethodDefEntry.java +++ b/src/main/java/cuchaz/enigma/mapping/entry/MethodDefEntry.java @@ -42,4 +42,20 @@ public class MethodDefEntry extends MethodEntry implements DefEntry { public MethodDefEntry updateOwnership(ClassEntry classEntry) { return new MethodDefEntry(new ClassEntry(classEntry.getName()), name, descriptor, signature, access); } + + public int getArgumentIndex(ClassDefEntry ownerEntry, int localVariableIndex) { + int argumentIndex = localVariableIndex; + + // Enum constructors have an implicit "name" and "ordinal" parameter as well as "this" + if (ownerEntry.getAccess().isEnum() && getName().startsWith("<")) { + argumentIndex -= 2; + } + + // If we're not static, "this" is bound to index 0 + if (!getAccess().isStatic()) { + argumentIndex -= 1; + } + + return argumentIndex; + } } -- cgit v1.2.3