ó
ĊZc           @   sâ   d  d l  m Z d  d l  m Z d  d l  m Z d  d l  m Z d  d l  m Z d  d l  m Z d  d l  m Z d  d l m	 Z	 m
 Z
 d  d	 l m Z m Z d
 e f d     YZ d e f d     YZ d e f d     YZ d S(   i˙˙˙˙(   t   evaluate(   t
   exceptions(   t   libutils(   t   pynames(   t
   taskhandle(   t   utils(   t   worder(   t	   ChangeSett   ChangeContents(   t   sourceutilst   occurrencest   EncapsulateFieldc           B   sY   e  Z d    Z d d d e j   d  Z d   Z d   Z d   Z	 d   Z
 d   Z RS(   c         C   s   | |  _  t j | |  |  _ |  j  j |  } t j | |  |  _ |  j |  j  si t	 j
 d   n  |  j j   d j   |  _ d  S(   Ns:   Encapsulate field should be performed on class attributes.i    (   t   projectR   t   get_name_att   namet   get_pymoduleR    t   eval_locationt   pynamet   _is_an_attributeR   t   RefactoringErrort   get_definition_locationt   get_resourcet   resource(   t   selfR   R   t   offsett   this_pymodule(    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyt   __init__   s    	c   
      C   sH  | d k r |  j j   } n  t d |  j  } | j d t |   } | d k re d |  j } n  | d k r d |  j } n  t |  j |  j |  j | |  } x | D] } | j	 | j
  | |  j k r|  j | | | |  }	 | j t |  j |	   n4 | j |  }	 |	 d k	 r6| j t | |	   n  | j   qİ W| S(   sÀ  Get the changes this refactoring makes

        If `getter` is not `None`, that will be the name of the
        getter, otherwise ``get_${field_name}`` will be used.  The
        same is true for `setter` and if it is None set_${field_name} is
        used.

        `resources` can be a list of `rope.base.resource.File`\s that
        the refactoring should be applied on; if `None` all python
        files in the project are searched.

        s   Encapsulate field <%s>s   Collecting Changest   get_t   set_N(   t   NoneR   t   get_python_filesR   R   t   create_jobsett   lent   GetterSetterRenameInModuleR   t   started_jobt   pathR   t   _change_holding_modulet
   add_changeR   t   get_changed_modulet   finished_job(
   R   t   gettert   settert	   resourcest   task_handlet   changest   job_sett   renamert   filet   result(    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyt   get_changes   s,    	c         C   s   |  j  S(   s,   Get the name of the field to be encapsulated(   R   (   R   (    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyt   get_field_name>   s    c         C   s´   | d  k	 r° t | t j  r° |  j j   \ } } | j   j |  } | j   d k rp | | j	   j
   k S| j } | d  k	 r° | j   d k r° | | j	   j
   k Sn  t S(   Nt   Class(   R   t
   isinstanceR   t   AssignedNameR   R   t	   get_scopet   get_inner_scope_for_linet   get_kindt	   get_namest   valuest   parentt   False(   R   R   t   pymodulet   linenot   scopeR;   (    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyR   B   s    		c         C   s.   |  j    } | j   d k r* | j } n  | S(   Nt   Function(   t   _get_defining_scopeR8   R;   (   R   t   defining_scope(    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyt   _get_defining_class_scopeN   s    c         C   s(   |  j  j   \ } } | j   j |  S(   N(   R   R   R6   R7   (   R   R=   t   line(    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyRA   T   s    c         C   s	  |  j  j |  j  } |  j   } |  j   j } t j |  \ } }	 | j d | d | d |	  }
 |
 d  k	 r¨ t
 j |  j  |
 |  j  } | j   j | j    } n  t j |  j   d } d | | |  j f } d | | |  j f } t j | | | | g  }
 |
 S(   NR=   t
   skip_startt   skip_endt    s   def %s(self):
%sreturn self.%ss&   def %s(self, value):
%sself.%s = value(   R   R   R   RC   RA   t   pyobjectR	   t   get_body_regionR&   R   R   t   get_string_moduleR6   R7   t	   get_startt
   get_indentR   t   add_methods(   R   R,   R.   R(   R)   R=   t   class_scopet   defining_objectt   startt   endt
   new_sourcet   indents(    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyR$   X   s&    N(   t   __name__t
   __module__R   R   R   t   NullTaskHandleR1   R2   R   RC   RA   R$   (    (    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyR      s   	
	%				R!   c           B   s&   e  Z d    Z d d d d d  Z RS(   c         C   s@   | |  _  | |  _ t j | | |  |  _ | |  _ | |  _ d  S(   N(   R   R   R
   t   create_findert   finderR(   R)   (   R   R   R   R   R(   R)   (    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyR   q   s
    			i    c         C   s"   t  |  | | | |  } | j   S(   N(   t   _FindChangesForModuleR&   (   R   R   R=   RE   RF   t   change_finder(    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyR&   x   s    N(   RT   RU   R   R   R&   (    (    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyR!   o   s   	RY   c           B   st   e  Z d    Z d   Z d   Z d   Z e e j d     Z	 e e j d     Z
 e e j d     Z RS(   c         C   ss   | j  |  _  | j |  _ | j |  _ | j |  _ | |  _ | |  _ d |  _ d  |  _ d  |  _	 | |  _
 | |  _ d  S(   Ni    (   R   RX   R(   R)   R   R=   t   last_modifiedR   t   last_sett	   set_indexRE   RF   (   R   RX   R   R=   RE   RF   (    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyR      s    						c   
      C   s  g  } xĵ|  j  j |  j |  j  D]} | j   \ } } |  j | k oW |  j k  n rb q" n  |  j | |  | j |  j	 |  j
 | ! |  j |  r­ t j d   n  | j   r¤|  j j |  } | d k rî | j |  j d  nI |  j	 | j   d | !|  j d } | j |  j d | d | d   |  j j |  } |  j j j |  \ } }	 |  j j |	  |  _ |  j	 j d |  d } t |  |  _ n | j |  j d  | |  _
 q" W|  j
 d k r|  j t |  j	  |  | j |  j	 |  j
  d	 j |  Sd  S(
   Ns5   Cannot handle tuple assignments in encapsulate field.t   =t   (i    s   ()s    %s i˙˙˙˙i   t    (   RX   t   find_occurrencesR   R=   t   get_word_rangeRE   RF   t   _manage_writest   appendt   sourceR[   t"   _is_assigned_in_a_tuple_assignmentR   R   t
   is_writtenR   t   get_assignment_typeR)   t   get_primary_rangeR(   t   linest   get_line_numbert   logical_linest   logical_line_int   get_line_endR\   t   indexR    R]   t   joinR   (
   R   R0   t
   occurrenceRP   RQ   t   assignment_typet   var_namet   current_linet
   start_linet   end_line(    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyR&      s>    "%c         C   s   |  j  d  k	 r |  j  | k r | j |  j |  j |  j  ! d j | |  j  j   } | |  j 3| j | d  |  j  |  _ d  |  _  n  d  S(   NR`   t   )(   R\   R   Rd   Re   R[   Rp   R]   t   strip(   R   R   R0   t	   set_value(    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyRc   ²   s    
c         C   s    | j    d } |  j j |  S(   Ni    (   Rb   R   t!   is_assigned_in_a_tuple_assignment(   R   t	   occuranceR   (    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyRf   ğ   s    c         C   s*   |  j  d  k	 r |  j  j   S|  j j Sd  S(   N(   R   R   t   readR=   t   source_code(   R   (    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyRe   ż   s    c         C   s4   |  j  d  k r* |  j j |  j  |  _  n  |  j  j S(   N(   R=   R   R   R   R   Rj   (   R   (    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyRj   Ç   s    c         C   s   t  j |  j  S(   N(   R   t   WorderRe   (   R   (    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyR   Î   s    (   RT   RU   R   R&   Rc   Rf   t   propertyR   t   saveitRe   Rj   R   (    (    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyRY      s   		$			N(   t	   rope.baseR    R   R   R   R   R   R   t   rope.base.changeR   R   t   rope.refactorR	   R
   t   objectR   R!   RY   (    (    (    s>   lib/python2.7/site-packages/rope/refactor/encapsulate_field.pyt   <module>   s   c