// resolve type parameters, if any
ExecutableType xType = viewIn(checkedElement, x, state);
TypeMirror returnType = xType.getReturnType();
if (state.types.isAssignable(returnType, state.requestType)) {
// Extract Request<Foo> type
DeclaredType asRequest = (DeclaredType) State.viewAs(state.requestType, returnType, state);
if (asRequest.getTypeArguments().isEmpty()) {
state.poison(x, Messages.rawType());
} else {
TypeMirror requestReturn = asRequest.getTypeArguments().get(0);
if (!state.isTransportableType(requestReturn)) {
state.poison(x, Messages.untransportableType(requestReturn));
}
}
} else if (state.types.isAssignable(returnType, state.instanceRequestType)) {
// Extract InstanceRequest<FooProxy, String>
DeclaredType asInstanceRequest =
(DeclaredType) State.viewAs(state.instanceRequestType, returnType, state);
if (asInstanceRequest.getTypeArguments().isEmpty()) {
state.poison(x, Messages.rawType());
} else {
TypeMirror instanceType = asInstanceRequest.getTypeArguments().get(0);
state.maybeScanProxy((TypeElement) state.types.asElement(instanceType));
TypeMirror requestReturn = asInstanceRequest.getTypeArguments().get(1);
if (!state.isTransportableType(requestReturn)) {
state.poison(x, Messages.untransportableType(requestReturn));
}
}
} else if (!isSetter(x, state)) {