private void reportErrorIfNoImplementationTypeIsRegisteredForInterfaceReturnType(
     SourceMethod method) {
   if (method.getReturnType().getTypeMirror().getKind() != TypeKind.VOID
       && method.getReturnType().isInterface()
       && method.getReturnType().getImplementationType() == null) {
     messager.printMessage(
         method.getExecutable(), Message.GENERAL_NO_IMPLEMENTATION, method.getReturnType());
   }
 }
 private static boolean isValidCandidate(
     SourceMethod candidate, Method method, List<Parameter> parameterAssignments) {
   if (parameterAssignments == null) {
     return false;
   }
   if (!candidate.matches(extractSourceTypes(parameterAssignments), method.getResultType())) {
     return false;
   }
   return (candidate.getReturnType().isVoid()
       || candidate.getReturnType().isTypeVar()
       || candidate.getReturnType().isAssignableTo(method.getResultType()));
 }