a
    =db+                     @   s.  d dl mZ d dl mZ d dl mZ dZd dlmZ d dlZddlm	Z	m
Z
mZmZmZmZmZmZmZ eeZG d	d
 d
ee
e	ZG dd dee
e	ZG dd dee
e	ZG dd dee
e	ZG dd dee
e	ZG dd dee
e	Zdd Zg Zdd Zdd Zdd Zdd Z dd  Z!dS )!    )absolute_import)unicode_literals)division)	autoclassensureclass)with_metaclassN   )		JavaClassMetaJavaClass
JavaMethodJavaStaticMethod	JavaFieldJavaStaticFieldJavaMultipleMethodfind_javaclassJavaExceptionc                   @   s<  e Zd ZdZedZeddgZedZedZ	edZ
edZed	ZedZedZed	Zed
ZedZedZedZedZed
ZedZedZedZedZedZedZedZedZedZedZedZ edZ!edZ"edZ#edZ$edZ%edZ&edZ'edZ(dd Z)dd Z*dS )Classzjava/lang/Class()Z)z=(Ljava/lang/String,Z,Ljava/lang/ClassLoader;)Ljava/langClass;TF)z%(Ljava/lang/String;)Ljava/lang/Class;TFz()Ljava/lang/ClassLoader;()[Ljava/lang/Class;()Ljava/lang/Class;z3([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;z"()[Ljava/lang/reflect/Constructor;z-(Ljava/lang/String;)Ljava/lang/reflect/Field;z()[Ljava/lang/reflect/Field;z@(Ljava/lang/String,[Ljava/lang/Class;)Ljava/lang/reflect/Method;z()[Ljava/lang/reflect/Method;z()[I()Ljava/lang/String;z()Ljava/lang/Package;z"()Ljava/security/ProtectionDomain;z"(Ljava/lang/String;)Ljava/net/URL;z)(Ljava/lang/String;)Ljava/io/InputStream;z()[Ljava/lang/Object;z(Ljava/lang/reflect/Class;)Zz(Ljava/lang/Object;)Zz()Ljava/lang/Object;c                 C   s4   |   rdnd|  rdn|  r&dnd|  f S )Nz%s: [%s]z%s: %sZ	InterfaceZ	Primitiver   )isArrayisInterfaceisPrimitivegetNameself r   9/home/tom/ab/renpy-build/tmp/py3/pyjnius/jnius/reflect.py__str__:   s    zClass.__str__c                 C   s   d| t | f S )Nz<%s at 0x%x>)idr   r   r   r   __repr__D   s    zClass.__repr__N)+__name__
__module____qualname____javaclass__r   ZdesiredAssertionStatusr   ZforNameZgetClassLoaderZ
getClassesZgetComponentTypeZgetConstructorgetConstructorsZgetDeclaredClassesZgetDeclaredConstructorZgetDeclaredConstructorsZgetDeclaredFieldZgetDeclaredFieldsZgetDeclaredMethodgetDeclaredMethodsZgetDeclaringClassZgetField	getFieldsgetInterfacesZ	getMethodZ
getMethodsgetModifiersr   Z
getPackageZgetProtectionDomainZgetResourceZgetResourceAsStreamZ
getSignersgetSuperclassr   ZisAssignableFrom
isInstancer   r   ZnewInstancetoStringr   r!   r   r   r   r   r      sR   
r   c                   @   s    e Zd ZdZedZedZdS )Objectzjava/lang/Objectr   ()IN)r"   r#   r$   r%   r   getClassZhashCoder   r   r   r   r.   H   s   r.   c                   @   sp   e Zd ZdZedZedZedZedZedZ	edZ
edZedZedZedZedZedZdS )Modifierzjava/lang/reflect/Modifierz(I)ZN)r"   r#   r$   r%   r   
isAbstractisFinalr   isNative	isPrivateisProtectedisPublicisStaticisStrictisSynchronizedisTransient
isVolatiler   r   r   r   r1   O   s   r1   c                   @   s@   e Zd ZdZedZedZedZedZedZ	edZ
dS )Methodzjava/lang/reflect/Methodr   r   r   r/   r   N)r"   r#   r$   r%   r   r   r-   getParameterTypesgetReturnTyper*   	isVarArgsr   r   r   r   r=   `   s   r=   c                   @   s0   e Zd ZdZedZedZedZedZdS )Fieldzjava/lang/reflect/Fieldr   r   r/   N)	r"   r#   r$   r%   r   r   r-   getTyper*   r   r   r   r   rA   k   s
   rA   c                   @   s0   e Zd ZdZedZedZedZedZdS )Constructorzjava/lang/reflect/Constructorr   r   r/   r   N)	r"   r#   r$   r%   r   r-   r>   r*   r@   r   r   r   r   rC   t   s
   rC   c              
   C   s\   |   }|d dkr |ddS ddddd	d
dddd	}||}|rJ|S d|ddS )Nr   [./VZBCSIJFD)	ZvoidZbooleanZbytecharZshortintZlongfloatZdoublezL{0};)r   replacegetformat)Zcls_tptp
signaturesretr   r   r   get_signature}   s    
rY   c                 C   s<   | t v rd S | dd}t|r&d S t |  t|  d S )NrE   rF   )	registersrS   r
   get_javaclassappendr   )clsnamejninamer   r   r   r      s    

r   c                 C   s$   | r | d d   | dd   S dS )Nr    )lowersr   r   r   
lower_name   s    rc   c                 C   sD   |  dr"t| dkr"| d  pB|  doBt| dkoB| d  S )NrT      is   )
startswithlenisupperra   r   r   r   bean_getter   s    rj   c                 C   sz   |   }td||t|t|t|t|t|t	|t
|t|t|t|t|t| d S )Nz
meth: %s
  sig: %s
  Public %s
  Private %s
  Protected %s
  Static %s
  Final %s
  Synchronized %s
  Volatile %s
  Transient %s
  Native %s
  Interface %s
  Abstract %s
  Strict %s
)r*   logdebugr1   r7   r5   r6   r8   r3   r:   r<   r;   r4   r   r2   r9   )methodnameZ	signatureZmodsr   r   r   
log_method   s$    ro   c              	   C   s  |  dd}t|}|r|S i }t| }|d u rDtd|d S g }| D ]4}dddd | D }|	||
 f qP||d< |}|d urn| }d	d |D }	t|D ]\}
}|	|
 }||v rq|	|d
krt| }|
 }dddd | D t| }tjtjkr>t||| |rHtnt||d||< |dkrt|rt| dkrt||drdndd  }dd |||< qg }t|	D ]\}
}||kr̐q||
 }dddd | D t| }tjtjkrt||| |	|t| |
 f qt|||< q| }|sh|  rhtd}q|}qdd }|! D ].}|" dkr~||d< dd |d<  qq~|# D ]>}t| }t|$ }|rt%nt&}||||" < q|  dd|d< t't| t(f|S )NrE   rF   zJava class {0} not foundz({0})Vr_   c                 S   s   g | ]}t |qS r   rY   .0xr   r   r   
<listcomp>       zautoclass.<locals>.<listcomp>Z__javaconstructor__c                 S   s   g | ]}|  qS r   )r   rq   r   r   r   rt      ru   r   z({0}){1}c                 S   s   g | ]}t |qS r   rp   rq   r   r   r   rt      ru   )varargsr0   r   re   rf   rd   c                    s   t  fddS )Nc                    s   t |   S N)getattrr   nr   r   <lambda>   ru   z-autoclass.<locals>.<lambda>.<locals>.<lambda>)propertyry   r   ry   r   r{      ru   zautoclass.<locals>.<lambda>c                 S   s   g | ]}t |qS r   rp   rq   r   r   r   rt      ru   zjava.lang.Objectc              
   S   sZ   z|  |W S  tyT } z0t|j }td|r>t n W Y d }~n
d }~0 0 d S )Nz#java.lang.IndexOutOfBoundsException)rT   r   r   Z	classnamer   r,   
IndexError)r   indexeZmock_exception_objectr   r   r   _getitem  s    zautoclass.<locals>._getitemzjava.util.List__getitem__c                 S   s   |   S rw   )sizer   r   r   r   r{     ru   __len__r%   ))rS   r
   r[   r   	ExceptionrU   r&   joinr>   r\   r@   r'   	enumeratecountr1   r8   r*   rY   r?   rk   levelloggingDEBUGro   r   r   rj   rh   rc   rg   r   r+   r   r)   r   r(   rB   r   r   __new__r	   )r]   r^   clsZ	classDictcZconstructorsconstructorZsigmethodsZmethods_namer~   rm   rn   Zstaticrv   Z	lowernamerW   subname_clsr   ZiclassZfieldr   r   r   r      s    


  

"

r   )"Z
__future__r   r   r   __all__Zsixr   r   Zjniusr	   r
   r   r   r   r   r   r   r   Z	getLoggerr"   rk   r   r.   r1   r=   rA   rC   rY   rZ   r   rc   rj   ro   r   r   r   r   r   <module>   s(   ,
7		
"