@@ -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