@@ -41,7 +41,11 @@ public class PythonDetailsProvider extends DetailsProvider.Basic {
4141 private static final String PCLASS_MASK = "com.oracle.graal.python.builtins.objects.type.PythonClass+" ; // NOI18N
4242 private static final String PMANAGEDCLASS_MASK = "com.oracle.graal.python.builtins.objects.type.PythonManagedClass+" ; // NOI18N
4343 private static final String PFUNCTION_MASK = "com.oracle.graal.python.builtins.objects.function.PFunction+" ; // NOI18N
44- private static final String PBUILDIN_FUNCTION_MASK = "com.oracle.graal.python.builtins.objects.function.PBuiltinFunction" ; // NOI18N
44+ private static final String PBUILTIN_FUNCTION_MASK = "com.oracle.graal.python.builtins.objects.function.PBuiltinFunction" ; // NOI18N
45+ private static final String PBUILTIN_METHOD_MASK = "com.oracle.graal.python.builtins.objects.method.PBuiltinMethod" ; // NOI18N
46+ private static final String PMETHOD_MASK = "com.oracle.graal.python.builtins.objects.method.PMethod" ; // NOI18N
47+ private static final String PDECORATEDMETHOD_MASK = "com.oracle.graal.python.builtins.objects.method.PDecoratedMethod" ; // NOI18N
48+ private static final String PCELL_MASK = "com.oracle.graal.python.builtins.objects.cell.PCell" ; // NOI18N
4549 private static final String PNONE_MASK = "com.oracle.graal.python.builtins.objects.PNone" ; // NOI18N
4650 private static final String PLIST_MASK = "com.oracle.graal.python.builtins.objects.list.PList" ; // NOI18N
4751 private static final String PSTRING_MASK = "com.oracle.graal.python.builtins.objects.str.PString" ; // NOI18N
@@ -55,14 +59,16 @@ public class PythonDetailsProvider extends DetailsProvider.Basic {
5559 private static final String PINT_MASK = "com.oracle.graal.python.builtins.objects.ints.PInt" ; // NOI18N
5660 private static final String PEXCEPTION_MASK = "com.oracle.graal.python.runtime.exception.PException" ; // NOI18N
5761 private static final String GETSET_DESCRIPTOR_MASK = "com.oracle.graal.python.builtins.objects.getsetdescriptor.GetSetDescriptor" ; // NOI18N
58- private static final String PBUILDIN_CLASSTYPE_MASK = "com.oracle.graal.python.builtins.PythonBuiltinClassType" ; // NOI18N
62+ private static final String PBUILTIN_CLASSTYPE_MASK = "com.oracle.graal.python.builtins.PythonBuiltinClassType" ; // NOI18N
5963 private static final String PLAZY_STRING_MASK = "com.oracle.graal.python.builtins.objects.str.LazyString" ; // NOI18N
64+ private static final String PRANGE_MASK = "com.oracle.graal.python.builtins.objects.range.PRange" ; // NOI18N
65+ private static final String PSOCKET_MASK = "com.oracle.graal.python.builtins.objects.socket.PSocket" ; // NOI18N
6066
6167 public PythonDetailsProvider () {
6268 super (PCLASS_MASK ,PMANAGEDCLASS_MASK ,PFUNCTION_MASK ,PNONE_MASK ,PLIST_MASK ,PSTRING_MASK ,BASIC_STORAGE_MASK ,
6369 PTUPLE_MASK ,PMODULE_MASK ,PBYTES_MASK ,EMPTY_STORAGE_MASK ,PINT_MASK ,
64- PCOMPLEX_MASK ,PEXCEPTION_MASK ,PBUILDIN_FUNCTION_MASK , BYTE_STORAGE_MASK ,
65- GETSET_DESCRIPTOR_MASK ,PBUILDIN_CLASSTYPE_MASK ,PLAZY_STRING_MASK );
70+ PCOMPLEX_MASK ,PEXCEPTION_MASK ,PBUILTIN_FUNCTION_MASK , PBUILTIN_METHOD_MASK , PMETHOD_MASK , PDECORATEDMETHOD_MASK , PCELL_MASK , BYTE_STORAGE_MASK ,
71+ GETSET_DESCRIPTOR_MASK ,PBUILTIN_CLASSTYPE_MASK ,PLAZY_STRING_MASK , PRANGE_MASK , PSOCKET_MASK );
6672 }
6773
6874 public String getDetailsString (String className , Instance instance , Heap heap ) {
@@ -72,29 +78,51 @@ public String getDetailsString(String className, Instance instance, Heap heap) {
7278 if (PMANAGEDCLASS_MASK .equals (className )) {
7379 return DetailsUtils .getInstanceFieldString (instance , "className" , heap ); // NOI18N
7480 }
75- if (PBUILDIN_FUNCTION_MASK .equals (className )) {
81+ if (PBUILTIN_FUNCTION_MASK .equals (className )) {
7682 return DetailsUtils .getInstanceFieldString (instance , "name" , heap ); // NOI18N
7783 }
84+ if (PBUILTIN_METHOD_MASK .equals (className )) {
85+ Object moduleO = instance .getValueOfField ("self" ); // NOI18N
86+ if (!(moduleO instanceof Instance )) moduleO = null ;
87+ else if (!((Instance )moduleO ).getJavaClass ().getName ().equals (PMODULE_MASK )) moduleO = null ;
88+ String module = moduleO == null ? null : DetailsUtils .getInstanceString ((Instance )moduleO , heap );
89+ String function = DetailsUtils .getInstanceFieldString (instance , "function" , heap ); // NOI18N
90+ if (function != null ) return module != null ? module + "." + function : function ; // NOI18N
91+ return null ;
92+ }
93+ if (PMETHOD_MASK .equals (className )) {
94+ return DetailsUtils .getInstanceFieldString (instance , "function" , heap ); // NOI18N
95+ }
96+ if (PDECORATEDMETHOD_MASK .equals (className )) {
97+ return DetailsUtils .getInstanceFieldString (instance , "callable" , heap ); // NOI18N
98+ }
99+ if (PCELL_MASK .equals (className )) {
100+ Object refO = instance .getValueOfField ("ref" );
101+ if (!(refO instanceof Instance )) refO = null ;
102+ else if (((Instance )refO ).getJavaClass ().getName ().equals (PLIST_MASK )) refO = null ;
103+ else if (((Instance )refO ).getJavaClass ().getName ().equals (PTUPLE_MASK )) refO = null ;
104+ return refO == null ? null : DetailsUtils .getInstanceString ((Instance )refO , heap );
105+ }
78106 if (PFUNCTION_MASK .equals (className )) {
79107 String enclName = DetailsUtils .getInstanceFieldString (instance , "enclosingClassName" , heap ); // NOI18N
80108 String name = DetailsUtils .getInstanceFieldString (instance , "name" , heap ); // NOI18N
81109
82110 if (enclName != null && !enclName .isEmpty ()) {
83111 if (name != null ) {
84- return enclName +"." +name ;
112+ return enclName +"." +name ; // NOI18N
85113 }
86114 }
87115 return name ;
88116 }
89117 if (PSTRING_MASK .equals (className )) {
90118 return DetailsUtils .getInstanceFieldString (instance , "value" , heap ); // NOI18N
91119 }
92- if (PBUILDIN_CLASSTYPE_MASK .equals (className )) {
120+ if (PBUILTIN_CLASSTYPE_MASK .equals (className )) {
93121 // get name field of PythonBuiltinClassType - there is a conflict with name field from Enum
94122 for (Object fv : instance .getFieldValues ()) {
95123 if (fv instanceof ObjectFieldValue ) {
96124 ObjectFieldValue ofv = (ObjectFieldValue ) fv ;
97- if ("name" .equals (ofv .getField ().getName ())) {
125+ if ("name" .equals (ofv .getField ().getName ())) { // NOI18N
98126 return DetailsUtils .getInstanceString (ofv .getInstance (), heap );
99127 }
100128 }
@@ -150,18 +178,24 @@ public String getDetailsString(String className, Instance instance, Heap heap) {
150178 return DetailsUtils .getInstanceFieldString (instance , "name" , heap ); // NOI18N
151179 }
152180 if (PLAZY_STRING_MASK .equals (className )) {
153- Object val = instance .getValueOfField ("length" ); // NOI18N
154181 Object vall = instance .getValueOfField ("left" ); // NOI18N
155182 Object valr = instance .getValueOfField ("right" ); // NOI18N
156183
157- if (val instanceof Integer ) {
158- String left = DetailsUtils .getInstanceString ((Instance )vall , heap );
184+ String left = DetailsUtils .getInstanceString ((Instance )vall , heap );
159185
160- if (valr == null || left .length () > DetailsUtils .MAX_ARRAY_LENGTH ) {
161- return left ;
162- }
163- return left + DetailsUtils .getInstanceString ((Instance )valr , heap );
186+ if (valr == null || left .length () > DetailsUtils .MAX_ARRAY_LENGTH ) {
187+ return left ;
164188 }
189+ return left + DetailsUtils .getInstanceString ((Instance )valr , heap );
190+ }
191+ if (PRANGE_MASK .equals (className )) {
192+ int start = DetailsUtils .getIntFieldValue (instance , "start" , 0 ); // NOI18N
193+ int stop = DetailsUtils .getIntFieldValue (instance , "stop" , 0 ); // NOI18N
194+ int step = DetailsUtils .getIntFieldValue (instance , "step" , 1 ); // NOI18N
195+ return "[" + start + ", " + stop + ", " + step + "]" ; // NOI18N
196+ }
197+ if (PSOCKET_MASK .equals (className )) {
198+ return DetailsUtils .getInstanceFieldString (instance , "address" , heap ); // NOI18N
165199 }
166200 return null ;
167201 }
0 commit comments