} else if (type.typeParams().length > 0 && !isPrimitive(symbol)) {
} else if (type.typeParams().length > 0 && !monoPrimitive(symbol)) {
    public Type transformInfo(Symbol symbol, Type type) {        if (symbol.isClass()) {            NewMember[] toAdd = membersToAdd(symbol);            if (toAdd.length == 0)                return type;            else {                Scope newMembers = new Scope(symbol.members());                for (int i = 0; i < toAdd.length; ++i)                    newMembers.enterOrOverload(toAdd[i].symbolToAdd());                return Type.compoundType(type.parents(), newMembers, symbol);            }        } else if (type.typeParams().length > 0 && !isPrimitive(symbol)) {            // Polymorphic method/constructor:            // - add a value parameter for every type parameter.            switch (type) {            case PolyType(Symbol[] tparams, // :                          Type.MethodType(Symbol[] vparams, Type result)):                List newVParams =                    new LinkedList(Arrays.asList(paramsToAdd(symbol)));                newVParams.addAll(Arrays.asList(vparams));                Symbol[] newVParamsA = (Symbol[])                    newVParams.toArray(new Symbol[newVParams.size()]);                return new Type.PolyType(tparams,                                         new Type.MethodType(newVParamsA,                                                             result));            default:                throw Debug.abort("unexpected type: ", type);            }        } else            return type;    }