src/java.management/share/classes/sun/management/MonitorInfoCompositeData.java
changeset 52288 2b29df6dfa68
parent 49077 b1c42b3cd19b
child 58766 54ffb15c4839
equal deleted inserted replaced
52287:2f6c9127dd97 52288:2b29df6dfa68
    24  */
    24  */
    25 
    25 
    26 package sun.management;
    26 package sun.management;
    27 
    27 
    28 import java.lang.management.MonitorInfo;
    28 import java.lang.management.MonitorInfo;
       
    29 import java.util.HashMap;
       
    30 import java.util.Map;
    29 import javax.management.openmbean.CompositeType;
    31 import javax.management.openmbean.CompositeType;
    30 import javax.management.openmbean.CompositeData;
    32 import javax.management.openmbean.CompositeData;
    31 import javax.management.openmbean.CompositeDataSupport;
    33 import javax.management.openmbean.CompositeDataSupport;
    32 import javax.management.openmbean.OpenDataException;
    34 import javax.management.openmbean.OpenDataException;
    33 import javax.management.openmbean.OpenType;
    35 import javax.management.openmbean.OpenType;
    52         MonitorInfoCompositeData micd = new MonitorInfoCompositeData(mi);
    54         MonitorInfoCompositeData micd = new MonitorInfoCompositeData(mi);
    53         return micd.getCompositeData();
    55         return micd.getCompositeData();
    54     }
    56     }
    55 
    57 
    56     protected CompositeData getCompositeData() {
    58     protected CompositeData getCompositeData() {
    57         // CONTENTS OF THIS ARRAY MUST BE SYNCHRONIZED WITH
    59         StackTraceElement ste = lock.getLockedStackFrame();
    58         // MONITOR_INFO_ATTRIBUTES!
    60         CompositeData steCData = ste != null ? StackTraceElementCompositeData.toCompositeData(ste)
    59 
    61                                              : null;
    60         int len = MONITOR_INFO_ATTRIBUTES.length;
    62         // values may be null; can't use Map.of
    61         Object[] values = new Object[len];
    63         Map<String,Object> items = new HashMap<>();
    62         CompositeData li = LockInfoCompositeData.toCompositeData(lock);
    64         items.put(CLASS_NAME,         lock.getClassName());
    63 
    65         items.put(IDENTITY_HASH_CODE, lock.getIdentityHashCode());
    64         for (int i = 0; i < len; i++) {
    66         items.put(LOCKED_STACK_FRAME, steCData);
    65             String item = MONITOR_INFO_ATTRIBUTES[i];
    67         items.put(LOCKED_STACK_DEPTH, lock.getLockedStackDepth());
    66             if (item.equals(LOCKED_STACK_FRAME)) {
       
    67                 StackTraceElement ste = lock.getLockedStackFrame();
       
    68                 values[i] = (ste != null ? StackTraceElementCompositeData.
       
    69                                                toCompositeData(ste)
       
    70                                          : null);
       
    71             } else if (item.equals(LOCKED_STACK_DEPTH)) {
       
    72                 values[i] = lock.getLockedStackDepth();
       
    73             } else {
       
    74                 values[i] = li.get(item);
       
    75             }
       
    76         }
       
    77 
    68 
    78         try {
    69         try {
    79             return new CompositeDataSupport(MONITOR_INFO_COMPOSITE_TYPE,
    70             return new CompositeDataSupport(MONITOR_INFO_COMPOSITE_TYPE, items);
    80                                             MONITOR_INFO_ATTRIBUTES,
       
    81                                             values);
       
    82         } catch (OpenDataException e) {
    71         } catch (OpenDataException e) {
    83             // Should never reach here
    72             // Should never reach here
    84             throw new AssertionError(e);
    73             throw new AssertionError(e);
    85         }
    74         }
    86     }
    75     }
   124 
   113 
   125     static CompositeType v6CompositeType() {
   114     static CompositeType v6CompositeType() {
   126         return V6_COMPOSITE_TYPE;
   115         return V6_COMPOSITE_TYPE;
   127     }
   116     }
   128 
   117 
   129     static CompositeType compositeType() {
       
   130         return MONITOR_INFO_COMPOSITE_TYPE;
       
   131     }
       
   132 
       
   133     public static String getClassName(CompositeData cd) {
   118     public static String getClassName(CompositeData cd) {
   134         return getString(cd, CLASS_NAME);
   119         return getString(cd, CLASS_NAME);
   135     }
   120     }
   136 
   121 
   137     public static int getIdentityHashCode(CompositeData cd) {
   122     public static int getIdentityHashCode(CompositeData cd) {