code: private TypeVarToTypeMap mapTypes( TypeVarToTypeMap actualParamByVarName, IType... types )
    {
      for( int i = 0; i < types.length; i++ )
      {
        IType type = types[i];
        if( type instanceof ITypeVariableType )
        {
          actualParamByVarName.put( (ITypeVariableType)types[i], types[i] );
        }
        if( type instanceof ITypeVariableArrayType )
        {
          mapTypes( actualParamByVarName, type.getComponentType() );
        }
        if( type.isParameterizedType() )
        {
          IType[] parameters = type.getTypeParameters();
          mapTypes( actualParamByVarName, parameters );
        }
        if( type instanceof IFunctionType )
        {
          IFunctionType funType = (IFunctionType)type;
          mapTypes( actualParamByVarName, funType.getReturnType() );
          IType[] paramTypes = funType.getParameterTypes();
          for( IType paramType : paramTypes )
          {
            mapTypes( actualParamByVarName, paramType );
          }
        }
      }
      return actualParamByVarName;
    }
docs: Move Intrinsic type helper up here