@@ -78,6 +78,7 @@ public final class UtilDetailsProvider extends DetailsProvider.Basic {
78
78
private static final String SYN_MAP_MASK = "java.util.Collections$SynchronizedMap+" ; // NOI18N
79
79
private static final String DEQUE_MASK = "java.util.ArrayDeque+" ; // NOI18N
80
80
private static final String ENUM_SET_MASK = "java.util.RegularEnumSet" ; // NOI18N
81
+ private static final String CONCURRENT_MAP_MASK = "java.util.concurrent.ConcurrentHashMap" ; // NOI18N
81
82
82
83
private Formatter formatter = new SimpleFormatter ();
83
84
@@ -89,7 +90,8 @@ public UtilDetailsProvider() {
89
90
UNMOD_COLLECTION_MASK , UNMOD_MAP_MASK , ARRAYS_LIST_MASK ,
90
91
EMPTY_LIST_MASK , EMPTY_MAP_MASK , EMPTY_SET_MASK ,
91
92
SINGLETON_LIST_MASK , SINGLETON_MAP_MASK , SINGLETON_SET_MASK ,
92
- SYN_COLLECTION_MASK , SYN_MAP_MASK , DEQUE_MASK , ENUM_SET_MASK );
93
+ SYN_COLLECTION_MASK , SYN_MAP_MASK , DEQUE_MASK , ENUM_SET_MASK ,
94
+ CONCURRENT_MAP_MASK );
93
95
}
94
96
95
97
public String getDetailsString (String className , Instance instance ) {
@@ -191,6 +193,13 @@ public String getDetailsString(String className, Instance instance) {
191
193
if (elements instanceof Long ) {
192
194
return getElementsString (Long .bitCount ((Long )elements ));
193
195
}
196
+ } else if (CONCURRENT_MAP_MASK .equals (className )) {
197
+ long baseCount = DetailsUtils .getLongFieldValue (instance , "baseCount" , -1 ); // NOI18N
198
+ ObjectArrayInstance counterCells = (ObjectArrayInstance )instance .getValueOfField ("counterCells" ); // NOI18N
199
+
200
+ if (baseCount != -1 ) {
201
+ return getElementsString (getConcurrentMapSize (baseCount , counterCells ));
202
+ }
194
203
}
195
204
return null ;
196
205
}
@@ -204,6 +213,28 @@ private static String getElementsString(int length) {
204
213
Bundle .UtilDetailsProvider_ItemsNumberString (length );
205
214
}
206
215
216
+ private int getConcurrentMapSize (long baseCount , ObjectArrayInstance counterCells ) {
217
+ long n = getConcurrentMapSumCount (baseCount , counterCells );
218
+ return ((n < 0L ) ? 0 :
219
+ (n > (long )Integer .MAX_VALUE ) ? Integer .MAX_VALUE :
220
+ (int )n );
221
+ }
222
+
223
+ private long getConcurrentMapSumCount (long baseCount , ObjectArrayInstance counterCells ) {
224
+ long sum = baseCount ;
225
+
226
+ if (counterCells != null ) {
227
+ List <Instance > as = counterCells .getValues ();
228
+ Instance a ;
229
+
230
+ for (int i = 0 ; i < as .size (); ++i ) {
231
+ if ((a = as .get (i )) != null )
232
+ sum += DetailsUtils .getLongFieldValue (a , "value" , 0 ); // NOI18N
233
+ }
234
+ }
235
+ return sum ;
236
+ }
237
+
207
238
private static class DetailsLogRecord extends LogRecord {
208
239
private final Instance record ;
209
240
0 commit comments