public List < Symbol > functionalInterfaceBridges ( TypeSymbol origin ) { Assert . check ( isFunctionalInterface ( origin ) ) ; Symbol descSym = findDescriptorSymbol ( origin ) ; CompoundScope members = membersClosure ( origin . type , false ) ; ListBuffer < Symbol > overridden = new ListBuffer <> ( ) ; outer : for ( Symbol m2 : members . getElementsByName ( descSym . name , bridgeFilter ) ) { if ( m2 == descSym ) continue ; else if ( descSym . overrides ( m2 , origin , Types . this , false ) ) { for ( Symbol m3 : overridden ) { if ( isSameType ( m3 . erasure ( Types . this ) , m2 . erasure ( Types . this ) ) || ( m3 . overrides ( m2 , origin , Types . this , false ) && ( pendingBridges ( ( ClassSymbol ) origin , m3 . enclClass ( ) ) || ( ( ( MethodSymbol ) m2 ) . binaryImplementation ( ( ClassSymbol ) m3 . owner , Types . this ) != null ) ) ) ) { continue outer ; } } overridden . add ( m2 ) ; } } return overridden . toList ( ) ; }
Find the minimal set of methods that are overridden by the functional descriptor in origin . All returned methods are assumed to have different erased signatures .