class MethodType extends Constant {

  private static final long serialVersionUID = 3523899677165980823L;

  protected Type returnType;
  protected List<Type> parameterTypes;

  private MethodType(List<Type> parameterTypes, Type returnType) {
    this.returnType = returnType;
    this.parameterTypes = parameterTypes;
  }

  public static MethodType v(List<Type> paramaterTypes, Type returnType) {
    return new MethodType(paramaterTypes, returnType);
  }

  @Override
  public Type getType() {
    return RefType.v("java.lang.invoke.MethodType");
  }

  @Override
  public String toString() {
    return "methodtype: " + SootMethod.getSubSignature("__METHODTYPE__", parameterTypes, returnType);
  }

  public List<Type> getParameterTypes() {
    return parameterTypes == null ? Collections.<Type>emptyList() : parameterTypes;
  }

  public Type getReturnType() {
    return returnType;
  }

  @Override
  public void apply(Switch sw) {
    ((ConstantSwitch) sw).caseMethodType(this);
  }

  @Override
  public int hashCode() {<FILL_FUNCTION_BODY>}

  @Override
  public boolean equals(Object obj) {
    if (this == obj) {
      return true;
    }
    if (obj == null || this.getClass() != obj.getClass()) {
      return false;
    }
    MethodType other = (MethodType) obj;
    return Objects.equals(returnType, other.returnType) && Objects.equals(parameterTypes, other.parameterTypes);
  }
}

    int result = 17;
    result = 31 * result + Objects.hashCode(parameterTypes);
    result = 31 * result + Objects.hashCode(returnType);
    return result;
  
<methods>public non-sealed void <init>() ,public java.lang.Object clone() ,public void convertToBaf(soot.jimple.JimpleToBafContext, List<soot.Unit>) ,public int equivHashCode() ,public boolean equivTo(java.lang.Object) ,public final List<soot.ValueBox> getUseBoxes() ,public void toString(soot.UnitPrinter) <variables>