code: def _get_associated_classnames(self, classname, namespace, assoc_class,
                                     result_class, result_role, role):
          
          class_repo = self._get_class_repo(namespace)
  
          result_classes = self._classnamedict(result_class, namespace)
          assoc_classes = self._classnamedict(assoc_class, namespace)
  
          rtn_classnames_set = set()
  
          role = role.lower() if role else role
          result_role = result_role.lower() if result_role else result_role
  
          ref_clns = self._get_reference_classnames(classname, namespace,
                                                    assoc_class, role)
  
          cls = [class_repo[cln] for cln in ref_clns]
          for cl in cls:
              for prop in six.itervalues(cl.properties):
                  if prop.type == 'reference':
                      if self._assoc_prop_matches(prop,
                                                  cl.classname,
                                                  assoc_classes,
                                                  result_classes,
                                                  result_role):
  
                          rtn_classnames_set.add(prop.reference_class)
  
          return list(rtn_classnames_set)
docs: Get list of classnames that are associated classes for which this
          classname is a target filtered by the assoc_class, role, result_class,
          and result_role parameters if they are none.
  
          This is a common method used by all of the other reference and
          associator methods to create a list of reference classnames
  
          Returns:
              list of classnames that satisfy the criteria.