? gen.Select(pos, prefixAsValue(pos, pre), insSym)
? gen.Select(pos, gen.mkQualifier(pos, pre), insSym)
        private Tree scalaClassType(int pos, Type tp, Symbol owner, TEnv env) {            switch (tp) {            case TypeRef(Type pre, Symbol sym, Type[] args):                Symbol insSym = getInstMethSym(sym);                Tree preFun = isNestedClass(sym)                    ? gen.Select(pos, prefixAsValue(pos, pre), insSym)                    : gen.Ident(pos, insSym);                // TODO special case for monomorphic cases                Tree[] insArgs;                if (true || args.length > 0) {                    Tree[] elems = new Tree[args.length];                    int[] perm = typeParamsPermutation(sym.typeParams());                    for (int i = 0; i < args.length; ++i)                        elems[i] = typeAsValue(pos, args[perm[i]], owner, env);                    insArgs = new Tree[] {                        gen.mkNewArray(pos, defs.TYPE_TYPE(), elems, owner)                    };                } else                    insArgs = Tree.EMPTY_ARRAY;                return gen.mkApply_V(pos, preFun, insArgs);            default:                throw Debug.abort("unexpected type: ", tp);            }        }