
    c!                         d dl mZmZmZmZmZmZmZ d dlm	Z	m
Z
 d dlmZmZ  G d d          Z G d d          Z G d d	          Zd
S )    )evaluate
exceptionslibutilspynames
taskhandleutilsworder)ChangeContents	ChangeSet)occurrencessourceutilsc                   L    e Zd Zd Zdddej        fdZd Zd Zd Z	d Z
d ZdS )	EncapsulateFieldc                 x   || _         t          j        ||          | _        | j                             |          }t          j        ||          | _        |                     | j                  st          j
        d          | j                                        d                                         | _        d S )Nz:Encapsulate field should be performed on class attributes.r   )projectr	   get_name_atnameget_pymoduler   eval_locationpyname_is_an_attributer   RefactoringErrorget_definition_locationget_resourceresource)selfr   r   offsetthis_pymodules        ?lib/python3.11/site-packages/rope/refactor/encapsulate_field.py__init__zEncapsulateField.__init__   s    &x88	11(;;,]FCC$$T[11 	-L   ;;==a@MMOO    Nc                    || j                                         }t          d| j        z            }|                    dt          |                    }|
d| j        z   }|
d| j        z   }t          | j         | j        | j        ||          }|D ]}|                    |j	                   || j
        k    rA|                     ||||          }	|                    t          | j
        |	                     n:|                    |          }	|	#|                    t          ||	                     |                                 |S )a  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` that
        the refactoring should be applied on; if `None` all python
        files in the project are searched.

        NzEncapsulate field <%s>zCollecting Changesget_set_)r   get_python_filesr   r   create_jobsetlenGetterSetterRenameInModuler   started_jobpathr   _change_holding_module
add_changer
   get_changed_modulefinished_job)
r   gettersetter	resourcestask_handlechangesjob_setrenamerfileresults
             r   get_changeszEncapsulateField.get_changes   s_   &  	85577I4ty@AA++,@#i..QQ 	(di'F 	(di'F,L$)T[&&
 
  		# 		#D	***t}$ E44WgvvVV"">$-#H#HIIII 33D99 E&&~dF'C'CDDD  """"r!   c                     | j         S )z,Get the name of the field to be encapsulated)r   r   s    r   get_field_namezEncapsulateField.get_field_name<   s
    yr!   c                    |t          |t          j                  r| j                                        \  }}|                                                    |          }|                                dk    r(||                                	                                v S |j
        }|@|                                dk    r(||                                	                                v S dS )NClassF)
isinstancer   AssignedNamer   r   	get_scopeget_inner_scope_for_lineget_kind	get_namesvaluesparent)r   r   pymodulelinenoscoperE   s         r   r   z!EncapsulateField._is_an_attribute@   s     	=*VW5I"J"J 	=#{BBDDHf&&((AA&IIE~~7* <!2!2!9!9!;!;;;\F =foo&7&77&B =!1!1!3!3!:!:!<!<<<ur!   c                 l    |                                  }|                                dk    r|j        }|S )NFunction)_get_defining_scoperB   rE   )r   defining_scopes     r   _get_defining_class_scopez*EncapsulateField._get_defining_class_scopeK   s:    1133""$$
2 	3+2Nr!   c                     | j                                         \  }}|                                                    |          S N)r   r   r@   rA   )r   rF   lines      r   rK   z$EncapsulateField._get_defining_scopeQ   s9    <<>>$!!##<<TBBBr!   c                 \   | j                             | j                  }|                                 }|                                 j        }t          j        |          \  }}	|                    |||	          }
|
Yt          j
        | j         |
| j                  }|                                                    |                                          }t          j        | j                   dz  }d| d| d| j         }d| d| d| j         d}t          j        ||||g          }
|
S )	N)rF   
skip_startskip_end zdef z(self):
zreturn self.z(self, value):
zself.z = value)r   r   r   rM   rK   pyobjectr   get_body_regionr-   r   get_string_moduler@   rA   	get_start
get_indentr   add_methods)r   r3   r5   r/   r0   rF   class_scopedefining_objectstartend
new_sourceindentss               r   r+   z'EncapsulateField._change_holding_moduleU   sE   <,,T];;44662244= 0AA
s//%# 0 
 

  	1j$- H #,,..GG%%'' K (66<IIIIIdiIIQQQQQdiQQQ ,X{VVDTUU
r!   )__name__
__module____qualname__r    r   DEFAULT_TASK_HANDLEr8   r;   r   rM   rK   r+    r!   r   r   r      s        	P 	P 	P 2( ( ( (T  	 	 	  C C C    r!   r   c                       e Zd Zd Z	 ddZdS )r(   c                 t    || _         || _        t          j        |||          | _        || _        || _        d S rO   )r   r   r   create_finderfinderr/   r0   )r   r   r   r   r/   r0   s         r   r    z#GetterSetterRenameInModule.__init__m   s8    	!/vFFr!   Nr   c                 P    t          | ||||          }|                                S rO   )_FindChangesForModuler-   )r   r   rF   rR   rS   change_finders         r   r-   z-GetterSetterRenameInModule.get_changed_modulet   s2     .(Hj(
 
 //111r!   )NNr   r   )ra   rb   rc   r    r-   re   r!   r   r(   r(   l   s>           DE2 2 2 2 2 2r!   r(   c                       e Zd Zd Zd Zd Zd Zeej	        d                         Z
eej	        d                         Zeej	        d                         ZdS )	rk   c                     |j         | _         |j        | _        |j        | _        |j        | _        || _        || _        d| _        d | _        d | _        || _	        || _
        d S Nr   )r   ri   r/   r0   r   rF   last_modifiedlast_set	set_indexrR   rS   )r   ri   r   rF   rR   rS   s         r   r    z_FindChangesForModule.__init__~   s\    ~mmm  $ r!   c                 6   g }| j                             | j        | j                  D ] }|                                \  }}| j        |cxk    r| j        k     rn n5|                     ||           |                    | j	        | j
        |                    |                     |          rt          j        d          |                                r,| j                            |          }|dk    r|                    | j        dz              n`| j	        |                                d         |         | j        z   dz   }|                    | j        dz   |z   d|d d         z  z              | j                            |          }| j        j                            |          \  }}	| j                            |	          | _        | j	                            d|          dz   }t7          |          | _        n|                    | j        dz              || _
        | j
        dk    rd|                     t7          | j	                  |           |                    | j	        | j
        d                     d	                    |          S d S )
Nz5Cannot handle tuple assignments in encapsulate field.=(r   z()z %s     )ri   find_occurrencesr   rF   get_word_rangerR   rS   _manage_writesappendsourcerp   "_is_assigned_in_a_tuple_assignmentr   r   
is_writtenr	   get_assignment_typer0   get_primary_ranger/   linesget_line_numberlogical_lineslogical_line_inget_line_endrq   indexr'   rr   join)
r   r7   
occurrencer]   r^   assignment_typevar_namecurrent_line
start_lineend_lines
             r   r-   z(_FindChangesForModule.get_changed_module   s   +66t}dmTT  	%  	%J#2244JE3%    $-     v...MM$+d&85&@ABBB66zBB  1K   $$&& 2"&+"A"A%"H"H"c) 
MM$+"34444 J$@$@$B$B1$E$MN+& 
 MMc)H4vPSQSPS@T7TT    $z99%@@'+}'B'R'R ( ($
H !%
 7 7 A Ak''S11A5!$VdkD0111!$D" 	#DK 0 0&999MM$+d&8&:&:;<<<776??"tr!   c                 \   | j         | j         |k    r|                    | j        | j        | j                             d                    || j        d                                                    }|| j        d = |                    |dz              | j         | _        d | _         d S d S d S )Nrx   ))rq   r|   r}   rp   r   rr   strip)r   r   r7   	set_values       r   r{   z$_FindChangesForModule._manage_writes   s    = 	!&)@ 	!MM$+d&84=&HIJJJt~'7'7 899??AAIt~''(MM)c/***!%D DMMM	! 	! 	! 	!r!   c                 j    |                                 d         }| j                            |          S ro   )rz   r	   !is_assigned_in_a_tuple_assignment)r   r   r   s      r   r~   z8_FindChangesForModule._is_assigned_in_a_tuple_assignment   s.    **,,Q/{<<VDDDr!   c                 Z    | j         | j                                         S | j        j        S rO   )r   readrF   source_coder:   s    r   r}   z_FindChangesForModule.source   s-     = 	-=%%'''=,,r!   c                 p    | j         $| j                            | j                  | _         | j         j        S rO   )rF   r   r   r   r   r:   s    r   r   z_FindChangesForModule.lines   s3     = 	E L55dmDDDM}""r!   c                 4    t          j        | j                  S rO   )r	   Worderr}   r:   s    r   r	   z_FindChangesForModule.worder   s     }T[)))r!   N)ra   rb   rc   r    r-   r{   r~   propertyr   saveitr}   r   r	   re   r!   r   rk   rk   }   s        ! ! !' ' 'R! ! !E E E 
\- - \ X- 
\# # \ X#
 
\* * \ X* * *r!   rk   N)	rope.baser   r   r   r   r   r   r	   rope.base.changer
   r   rope.refactorr   r   r   r(   rk   re   r!   r   <module>r      s    X X X X X X X X X X X X X X X X X X 6 6 6 6 6 6 6 6 2 2 2 2 2 2 2 2c c c c c c c cL2 2 2 2 2 2 2 2"V* V* V* V* V* V* V* V* V* V*r!   