3030import java .util .ArrayList ;
3131import java .util .HashMap ;
3232import java .util .List ;
33- import java .util .ListIterator ;
3433import java .util .Map ;
3534
3635import org .graalvm .compiler .debug .DebugContext ;
@@ -340,12 +339,16 @@ public ClassEntry getSuperClass() {
340339
341340 public MethodEntry ensureMethodEntryForDebugRangeInfo (DebugRangeInfo debugRangeInfo , DebugInfoBase debugInfoBase , DebugContext debugContext ) {
342341 assert listIsSorted (methods );
343- ListIterator <MethodEntry > methodIterator = methods .listIterator ();
344342 String methodName = debugInfoBase .uniqueDebugString (debugRangeInfo .name ());
345343 String paramSignature = debugRangeInfo .paramSignature ();
346344 String returnTypeName = debugRangeInfo .valueType ();
347- while (methodIterator .hasNext ()) {
348- MethodEntry methodEntry = methodIterator .next ();
345+ /* Since the methods list is sorted we perform a binary search */
346+ int start = 0 ;
347+ int end = methods .size () - 1 ;
348+ assert end < (Integer .MAX_VALUE / 2 );
349+ while (start <= end ) {
350+ int middle = (start + end ) / 2 ;
351+ MethodEntry methodEntry = methods .get (middle );
349352 int comparisonResult = methodEntry .compareTo (methodName , paramSignature , returnTypeName );
350353 if (comparisonResult == 0 ) {
351354 methodEntry .updateRangeInfo (debugInfoBase , debugRangeInfo );
@@ -354,13 +357,16 @@ public MethodEntry ensureMethodEntryForDebugRangeInfo(DebugRangeInfo debugRangeI
354357 indexLocalFileEntry (methodEntry .fileEntry );
355358 }
356359 return methodEntry ;
357- } else if (comparisonResult > 0 ) {
358- methodIterator .previous ();
359- break ;
360+ } else if (comparisonResult < 0 ) {
361+ start = middle + 1 ;
362+ } else {
363+ end = middle ;
360364 }
361365 }
366+ assert start == (end + 1 ) : start + " != " + end + " + 1" ;
367+ assert start <= methods .size () : start + " > " + methods .size ();
362368 MethodEntry newMethodEntry = processMethod (debugRangeInfo , debugInfoBase , debugContext );
363- methodIterator .add (newMethodEntry );
369+ methods .add (start , newMethodEntry );
364370 return newMethodEntry ;
365371 }
366372
0 commit comments