MethodType asSpreaderType(Class<?> arrayType,int arrayLength){
  assert (parameterCount() >= arrayLength);
  int spreadPos=ptypes.length - arrayLength;
  if (arrayLength == 0)   return this;
  if (arrayType == Object[].class) {
    if (isGeneric())     return this;
    if (spreadPos == 0) {
      MethodType res=genericMethodType(arrayLength);
      if (rtype != Object.class) {
        res=res.changeReturnType(rtype);
      }
      return res;
    }
  }
  Class<?> elemType=arrayType.getComponentType();
  assert (elemType != null);
  for (int i=spreadPos; i < ptypes.length; i++) {
    if (ptypes[i] != elemType) {
      Class<?>[] fixedPtypes=ptypes.clone();
      Arrays.fill(fixedPtypes,i,ptypes.length,elemType);
      return methodType(rtype,fixedPtypes);
    }
  }
  return this;
}

MethodType asSpreaderType ( Class < ? > arrayType , int arrayLength ) { assert ( parameterCount ( ) >= arrayLength ) ; int spreadPos = ptypes . length - arrayLength ; if ( arrayLength == 0 ) return this ; if ( arrayType == Object [ ] . class ) { if ( isGeneric ( ) ) return this ; if ( spreadPos == 0 ) { MethodType res = genericMethodType ( arrayLength ) ; if ( rtype != Object . class ) { res = res . changeReturnType ( rtype ) ; } return res ; } } Class < ? > elemType = arrayType . getComponentType ( ) ; assert ( elemType != null ) ; for ( int i = spreadPos ; i < ptypes . length ; i ++ ) { if ( ptypes [ i ] != elemType ) { Class < ? > [ ] fixedPtypes = ptypes . clone ( ) ; Arrays . fill ( fixedPtypes , i , ptypes . length , elemType ) ; return methodType ( rtype , fixedPtypes ) ; } } return this ; }
replace the last arraylength parameter types with the component type of arraytype .
