Exprent (Exprent exprent) { if (exprent.type == Exprent.EXPRENT_VAR) { int varIndex = ((VarExprent)exprent).getIndex(); if (mapParamsToNewVars.containsKey(varIndex)) { VarVersionPair newVar = mapParamsToNewVars.get(varIndex); method.varproc.getExternalVars().add(newVar); return new VarExprent(newVar.var, method.varproc.getVarType(newVar), method.varproc); } } else if (exprent.type == Exprent.EXPRENT_FIELD) { FieldExprent fExpr = (FieldExprent)exprent; String key = InterpreterUtil.makeUniqueKey(fExpr.getClassname(), fExpr.getName(), fExpr.getDescriptor().descriptorString); if (mapFieldsToNewVars.containsKey(key)) { //if(fExpr.getClassname().equals(child.classStruct.qualifiedName) && // mapFieldsToNewVars.containsKey(key)) { VarVersionPair newVar = mapFieldsToNewVars.get(key); method.varproc.getExternalVars().add(newVar); return new VarExprent(newVar.var, method.varproc.getVarType(newVar), method.varproc); } } boolean replaced = true; while (replaced) { replaced = false; for (Exprent expr : exprent.getAllExprents()) { Exprent retExpr = replaceExprent(expr); if (retExpr != null) { exprent.replaceExprent(expr, retExpr); replaced = true; break; } } } return null; } }