code: public TypeMirror asMemberOf(DeclaredType containing, Element element) {
          Type site = (Type)containing;
          Symbol sym = (Symbol)element;
          if (types.asSuper(site, sym.getEnclosingElement()) == null)
              throw new IllegalArgumentException(sym + "@" + site);
          return types.memberType(site, sym);
      }
docs: Returns the type of an element when that element is viewed as
  a member of, or otherwise directly contained by, a given type.
  For example,
  when viewed as a member of the parameterized type {@code Set<String>},
  the {@code Set.add} method is an {@code ExecutableType}
  whose parameter is of type {@code String}.
  
  @param containing  the containing type
  @param element     the element
  @return the type of the element as viewed from the containing type
  @throws IllegalArgumentException if the element is not a valid one
  for the given type