summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/mapping/LocalVariableDefEntry.java
diff options
context:
space:
mode:
authorGravatar gegy10002018-05-19 17:02:46 +0200
committerGravatar gegy10002018-05-19 17:02:46 +0200
commit2b2249e873c4adfd2dd6e8f1f2489ccd9f6aa021 (patch)
tree14c8b1e806449ace1641a1dbafae162855f79670 /src/main/java/cuchaz/enigma/mapping/LocalVariableDefEntry.java
parentFix build (diff)
downloadenigma-fork-2b2249e873c4adfd2dd6e8f1f2489ccd9f6aa021.tar.gz
enigma-fork-2b2249e873c4adfd2dd6e8f1f2489ccd9f6aa021.tar.xz
enigma-fork-2b2249e873c4adfd2dd6e8f1f2489ccd9f6aa021.zip
Initial port to ASM
Diffstat (limited to 'src/main/java/cuchaz/enigma/mapping/LocalVariableDefEntry.java')
-rw-r--r--src/main/java/cuchaz/enigma/mapping/LocalVariableDefEntry.java75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/main/java/cuchaz/enigma/mapping/LocalVariableDefEntry.java b/src/main/java/cuchaz/enigma/mapping/LocalVariableDefEntry.java
new file mode 100644
index 0000000..cc677c5
--- /dev/null
+++ b/src/main/java/cuchaz/enigma/mapping/LocalVariableDefEntry.java
@@ -0,0 +1,75 @@
1package cuchaz.enigma.mapping;
2
3import com.google.common.base.Preconditions;
4import cuchaz.enigma.utils.Utils;
5
6/**
7 * TypeDescriptor...
8 * Created by Thog
9 * 19/10/2016
10 */
11public class LocalVariableDefEntry extends LocalVariableEntry {
12
13 protected final MethodDefEntry ownerEntry;
14 protected final TypeDescriptor desc;
15
16 public LocalVariableDefEntry(MethodDefEntry ownerEntry, int index, String name, TypeDescriptor desc) {
17 super(ownerEntry, index, name);
18 Preconditions.checkNotNull(desc, "Variable desc cannot be null");
19
20 this.ownerEntry = ownerEntry;
21 this.desc = desc;
22 }
23
24 public LocalVariableDefEntry(MethodDefEntry ownerEntry, int index, String name) {
25 super(ownerEntry, index, name);
26
27 this.ownerEntry = ownerEntry;
28
29 int namedIndex = getNamedIndex();
30 if (namedIndex < 0) {
31 this.desc = TypeDescriptor.of(ownerEntry.getOwnerClassEntry().getName());
32 } else {
33 this.desc = ownerEntry.getDesc().getArgumentDescs().get(namedIndex);
34 }
35 }
36
37 @Override
38 public MethodDefEntry getOwnerEntry() {
39 return this.ownerEntry;
40 }
41
42 public TypeDescriptor getDesc() {
43 return desc;
44 }
45
46 public int getNamedIndex() {
47 // If we're not static, "this" is bound to index 0
48 int indexOffset = ownerEntry.getAccess().isStatic() ? 0 : 1;
49 return index - indexOffset;
50 }
51
52 @Override
53 public LocalVariableDefEntry updateOwnership(ClassEntry classEntry) {
54 return new LocalVariableDefEntry(ownerEntry.updateOwnership(classEntry), index, name, desc);
55 }
56
57 @Override
58 public int hashCode() {
59 return Utils.combineHashesOrdered(this.ownerEntry, this.desc.hashCode(), this.name.hashCode(), Integer.hashCode(this.index));
60 }
61
62 @Override
63 public boolean equals(Object other) {
64 return other instanceof LocalVariableDefEntry && equals((LocalVariableDefEntry) other);
65 }
66
67 public boolean equals(LocalVariableDefEntry other) {
68 return this.ownerEntry.equals(other.ownerEntry) && this.desc.equals(other.desc) && this.name.equals(other.name) && this.index == other.index;
69 }
70
71 @Override
72 public String toString() {
73 return this.ownerEntry + "(" + this.index + ":" + this.name + ":" + this.desc + ")";
74 }
75}