Type.SubstThisMap thisTypeMap = new Type.SubstThisMap(oldOwner, newOwner); Type newTp = thisTypeMap.apply(substParams(clone.info(), symMap)); clone.updateInfo(newTp);
updateMemberInfo(clone, oldOwner, newOwner, symMap);
    protected Symbol deepCloneSymbol(Symbol original,                                     Symbol oldOwner,                                     Symbol newOwner,                                     SymbolSubstTypeMap map) {        SymbolSubstTypeMap symMap;        Symbol clone = cloneSymbol(original, newOwner);        if (clone.isMethod()) {            Symbol[] tparams = clone.typeParams();            Symbol[] newTParams = new Symbol[tparams.length];            symMap = new SymbolSubstTypeMap(map);            for (int i = 0; i < tparams.length; ++i) {                newTParams[i] = cloneSymbol(tparams[i], clone);                symMap.insertSymbol(tparams[i], newTParams[i]);            }            Symbol[] vparams = clone.valueParams();            Symbol[] newVParams = new Symbol[vparams.length];            for (int i = 0; i < vparams.length; ++i) {                newVParams[i] = cloneSymbol(vparams[i], clone);                newVParams[i].updateInfo(symMap.apply(newVParams[i].info()));                symMap.insertSymbol(vparams[i], newVParams[i]);            }        } else            symMap = map;        Type.SubstThisMap thisTypeMap = new Type.SubstThisMap(oldOwner, newOwner);        Type newTp = thisTypeMap.apply(substParams(clone.info(), symMap));        clone.updateInfo(newTp);        return clone;    }