private boolean isConstrainedByInterface ( FQMethod fqMethod ) { try { JavaClass fqCls = Repository . lookupClass ( fqMethod . getClassName ( ) ) ; if ( fqCls . isInterface ( ) ) { return true ; } for ( JavaClass inf : fqCls . getAllInterfaces ( ) ) { for ( Method infMethod : inf . getMethods ( ) ) { if ( infMethod . getName ( ) . equals ( fqMethod . getMethodName ( ) ) ) { String infMethodSig = infMethod . getSignature ( ) ; String fqMethodSig = fqMethod . getSignature ( ) ; if ( infMethodSig . equals ( fqMethodSig ) ) { return true ; } List < String > infTypes = SignatureUtils . getParameterSignatures ( infMethodSig ) ; List < String > fqTypes = SignatureUtils . getParameterSignatures ( fqMethodSig ) ; if ( infTypes . size ( ) == fqTypes . size ( ) ) { boolean matches = true ; for ( int i = 0 ; i < infTypes . size ( ) ; i ++ ) { String infParmType = infTypes . get ( i ) ; String fqParmType = fqTypes . get ( i ) ; if ( infParmType . equals ( fqParmType ) ) { if ( ( infParmType . charAt ( 0 ) != ' ' ) || ( fqParmType . charAt ( 0 ) != ' ' ) ) { matches = false ; break ; } JavaClass infParmClass = Repository . lookupClass ( SignatureUtils . stripSignature ( infParmType ) ) ; JavaClass fqParmClass = Repository . lookupClass ( SignatureUtils . stripSignature ( fqParmType ) ) ; if ( ! fqParmClass . instanceOf ( infParmClass ) ) { matches = false ; break ; } } } if ( matches ) { return true ; } } } } } return false ; } catch ( ClassNotFoundException cnfe ) { bugReporter . reportMissingClass ( cnfe ) ; return true ; } }
looks to see if this method is an implementation of a method in an interface including generic specified interface methods .