Skip to content

Commit 93b9cea

Browse files
expose probable component getter methods
1 parent 9fe0dbf commit 93b9cea

File tree

1 file changed

+38
-10
lines changed

1 file changed

+38
-10
lines changed

enigma/src/main/java/org/quiltmc/enigma/impl/plugin/RecordIndexingVisitor.java

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,27 +46,33 @@ final class RecordIndexingVisitor extends ClassVisitor {
4646

4747
// index fields; contents publicly queryable
4848
private final Multimap<ClassEntry, FieldEntry> componentFieldsByClass = HashMultimap.create();
49-
// holds methods that are at least probably getters for their field keys; superset of definiteComponentGettersByField
50-
private final BiMap<FieldEntry, MethodEntry> componentGettersByField = HashBiMap.create();
5149
// holds methods that are definitely the getters for their field keys
5250
private final BiMap<FieldEntry, MethodEntry> definiteComponentGettersByField = HashBiMap.create();
53-
// holds methods that are at least probably getters; superset of definiteComponentGettersByClass
54-
private final Multimap<ClassEntry, MethodEntry> componentGettersByClass = HashMultimap.create();
51+
// holds methods that are probably, but not certainly getters for their field keys
52+
private final BiMap<FieldEntry, MethodEntry> probableComponentGettersByField = HashBiMap.create();
5553
// holds methods that are definitely component getters
5654
private final Multimap<ClassEntry, MethodEntry> definiteComponentGettersByClass = HashMultimap.create();
55+
// holds methods that are probably, but not certainly getters
56+
private final Multimap<ClassEntry, MethodEntry> probableComponentGettersByClass = HashMultimap.create();
5757

5858
RecordIndexingVisitor() {
5959
super(Enigma.ASM_VERSION);
6060
}
6161

62+
// TODO javadoc
6263
@Nullable
6364
public MethodEntry getComponentGetter(FieldEntry componentField) {
64-
return this.componentGettersByField.get(componentField);
65+
final MethodEntry definiteGetter = this.definiteComponentGettersByField.get(componentField);
66+
return definiteGetter == null ? this.probableComponentGettersByField.get(componentField) : definiteGetter;
6567
}
6668

69+
// TODO javadoc
6770
@Nullable
6871
public FieldEntry getComponentField(MethodEntry componentGetter) {
69-
return this.componentGettersByField.inverse().get(componentGetter);
72+
final FieldEntry definiteField = this.definiteComponentGettersByField.inverse().get(componentGetter);
73+
return definiteField == null
74+
? this.probableComponentGettersByField.inverse().get(componentGetter)
75+
: definiteField;
7076
}
7177

7278
// TODO javadoc, prevent directly naming method (always match field)
@@ -81,19 +87,41 @@ public FieldEntry getDefiniteComponentField(MethodEntry componentGetter) {
8187
return this.definiteComponentGettersByField.inverse().get(componentGetter);
8288
}
8389

90+
// TODO javadoc
91+
@Nullable
92+
public MethodEntry getProbableComponentGetter(FieldEntry componentField) {
93+
return this.probableComponentGettersByField.get(componentField);
94+
}
95+
96+
// TODO javadoc
97+
@Nullable
98+
public FieldEntry getProbableComponentField(MethodEntry componentGetter) {
99+
return this.probableComponentGettersByField.inverse().get(componentGetter);
100+
}
101+
102+
// TODO javadoc
84103
public Stream<FieldEntry> streamComponentFields(ClassEntry recordEntry) {
85104
return this.componentFieldsByClass.get(recordEntry).stream();
86105
}
87106

107+
// TODO javadoc
88108
public Stream<MethodEntry> streamComponentMethods(ClassEntry recordEntry) {
89-
return this.componentGettersByClass.get(recordEntry).stream();
109+
return Stream.concat(
110+
this.definiteComponentGettersByClass.get(recordEntry).stream(),
111+
this.probableComponentGettersByClass.get(recordEntry).stream()
112+
);
90113
}
91114

92115
// TODO javadoc
93116
public Stream<MethodEntry> streamDefiniteComponentMethods(ClassEntry recordEntry) {
94117
return this.definiteComponentGettersByClass.get(recordEntry).stream();
95118
}
96119

120+
// TODO javadoc
121+
public Stream<MethodEntry> streamProbableComponentMethods(ClassEntry recordEntry) {
122+
return this.probableComponentGettersByClass.get(recordEntry).stream();
123+
}
124+
97125
@Override
98126
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
99127
super.visit(version, access, name, signature, superName, interfaces);
@@ -210,12 +238,12 @@ private void indexGetter(MethodNode getterNode, FieldEntry fieldEntry, boolean d
210238
final MethodEntry getterEntry =
211239
new MethodEntry(this.clazz, getterNode.name, new MethodDescriptor(getterNode.desc));
212240

213-
this.componentGettersByField.put(fieldEntry, getterEntry);
214-
this.componentGettersByClass.put(this.clazz, getterEntry);
215-
216241
if (definite) {
217242
this.definiteComponentGettersByField.put(fieldEntry, getterEntry);
218243
this.definiteComponentGettersByClass.put(this.clazz, getterEntry);
244+
} else {
245+
this.probableComponentGettersByField.put(fieldEntry, getterEntry);
246+
this.probableComponentGettersByClass.put(this.clazz, getterEntry);
219247
}
220248
}
221249
}

0 commit comments

Comments
 (0)