/** * 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 */ 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); }