boolean (@NotNull VarTracker tracker, @Nullable Exprent exprent, @NotNull Statement statement) { if (!(exprent instanceof AssignmentExprent assignmentExprent)) { return false; } Exprent exprentLeft = assignmentExprent.getLeft(); if (!(exprentLeft instanceof VarExprent leftVarExprent)) { return false; } Exprent right = assignmentExprent.getRight(); if (right instanceof VarExprent varExprent) { RecordVarExprent reassignedRecord = tracker.getRecord(varExprent); if (reassignedRecord == null) { return false; } reassignedRecord.copyFrom(leftVarExprent); tracker.put(leftVarExprent, reassignedRecord, statement); } else if (right instanceof FunctionExprent functionExprent && functionExprent.getFuncType() == FunctionExprent.FUNCTION_CAST && functionExprent.getLstOperands().size() == 2 && functionExprent.getLstOperands().get(1) instanceof ConstExprent constExprent) { Exprent varForCast = functionExprent.getLstOperands().get(0); RecordVarExprent recordToCast = tracker.getRecord(varForCast); if (recordToCast == null) { return false; } if (!recordToCast.getVarType().equals(constExprent.getExprType())) { return false; } recordToCast.copyFrom(leftVarExprent); tracker.put(leftVarExprent, recordToCast, statement); } else { return false; } return true; }