public static UMethodInvocation create(
      List<? extends UExpression> typeArguments,
      UExpression methodSelect,
      List<UExpression> arguments) {
    return new AutoValue_UMethodInvocation(
        ImmutableList.copyOf(typeArguments), methodSelect, ImmutableList.copyOf(arguments));
  }
@Test
  public void equality() {
    UMethodType indexOfIntTy = UMethodType.create(UPrimitiveType.INT, UPrimitiveType.INT);
    UExpression fooLit = ULiteral.stringLit("foo");
    UType isEmptyTy = UMethodType.create(UPrimitiveType.BOOLEAN, ImmutableList.<UType>of());

    new EqualsTester()
        .addEqualityGroup(
            UMethodInvocation.create(
                UMemberSelect.create(fooLit, "indexOf", indexOfIntTy), ULiteral.charLit('a')))
        .addEqualityGroup(
            UMethodInvocation.create(
                UMemberSelect.create(fooLit, "indexOf", indexOfIntTy), ULiteral.charLit('b')))
        .addEqualityGroup(
            UMethodInvocation.create(UMemberSelect.create(fooLit, "isEmpty", isEmptyTy)))
        .testEquals();
  }