question: 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 ; }
target:  Replace the last arrayLength parameter types with the component type of arrayType.