1
2
3
4
5
6 package mockit.asm.util;
7
8 import edu.umd.cs.findbugs.annotations.NonNull;
9
10 import org.checkerframework.checker.index.qual.NonNegative;
11
12
13
14
15 public final class MethodHandle {
16 public interface Tag {
17 int TAG_GETFIELD = 1;
18 int TAG_GETSTATIC = 2;
19 int TAG_PUTFIELD = 3;
20 int TAG_PUTSTATIC = 4;
21 int TAG_INVOKEVIRTUAL = 5;
22 int TAG_INVOKESTATIC = 6;
23 int TAG_INVOKESPECIAL = 7;
24 int TAG_NEWINVOKESPECIAL = 8;
25 int TAG_INVOKEINTERFACE = 9;
26 }
27
28
29
30
31 @NonNegative
32 public final int tag;
33
34
35
36
37 @NonNull
38 public final String owner;
39
40
41
42
43 @NonNull
44 public final String name;
45
46
47
48
49 @NonNull
50 public final String desc;
51
52
53
54
55
56
57
58
59
60
61
62
63
64 public MethodHandle(@NonNegative int tag, @NonNull String owner, @NonNull String name, @NonNull String desc) {
65 this.tag = tag;
66 this.owner = owner;
67 this.name = name;
68 this.desc = desc;
69 }
70
71 @Override
72 public boolean equals(Object obj) {
73 if (obj == this) {
74 return true;
75 }
76
77 if (!(obj instanceof MethodHandle)) {
78 return false;
79 }
80
81 MethodHandle h = (MethodHandle) obj;
82 return tag == h.tag && owner.equals(h.owner) && name.equals(h.name) && desc.equals(h.desc);
83 }
84
85 @Override
86 public int hashCode() {
87 return tag + owner.hashCode() * name.hashCode() * desc.hashCode();
88 }
89 }