import java.util.Collections;

public class GetReceiverLoop {

  void test() {
    String s = Collections.emptyList().toString();
  }

  /*
   * getAnnotatedType( emptyList().toString )
   * -> TypeFromExpression.visitMemberSelect( emptyList().toString )
   * -> TypeFromExpression.visitMethodInvocation( emptyList() )
   * -> AnnotatedTypes.findTypeParameters( emptyList() )
   * -> AnnotatedTypes.assignedTo( emptyList() )
   * [the assignment context is emptyList().toString(), so then:]
   * -> AnnotatedTypeFactory.getReceiver( emptyList() )
   * -> getAnnotatedType( emtpyList() )
   * -> TypeFromExpression.visitMethodInvocation( emptyList() )
   * ...
   */

}
