--- old/src/java.management/share/classes/sun/management/ThreadInfoCompositeData.java 2018-10-24 15:06:20.000000000 -0700 +++ new/src/java.management/share/classes/sun/management/ThreadInfoCompositeData.java 2018-10-24 15:06:19.000000000 -0700 @@ -75,8 +75,7 @@ protected CompositeData getCompositeData() { // Convert StackTraceElement[] to CompositeData[] StackTraceElement[] stackTrace = threadInfo.getStackTrace(); - CompositeData[] stackTraceData = - new CompositeData[stackTrace.length]; + CompositeData[] stackTraceData = new CompositeData[stackTrace.length]; for (int i = 0; i < stackTrace.length; i++) { StackTraceElement ste = stackTrace[i]; stackTraceData[i] = StackTraceElementCompositeData.toCompositeData(ste); @@ -88,48 +87,42 @@ // Convert LockInfo[] and MonitorInfo[] to CompositeData[] LockInfo[] lockedSyncs = threadInfo.getLockedSynchronizers(); - CompositeData[] lockedSyncsData = - new CompositeData[lockedSyncs.length]; + CompositeData[] lockedSyncsData = new CompositeData[lockedSyncs.length]; for (int i = 0; i < lockedSyncs.length; i++) { LockInfo li = lockedSyncs[i]; lockedSyncsData[i] = LockInfoCompositeData.toCompositeData(li); } MonitorInfo[] lockedMonitors = threadInfo.getLockedMonitors(); - CompositeData[] lockedMonitorsData = - new CompositeData[lockedMonitors.length]; + CompositeData[] lockedMonitorsData = new CompositeData[lockedMonitors.length]; for (int i = 0; i < lockedMonitors.length; i++) { MonitorInfo mi = lockedMonitors[i]; lockedMonitorsData[i] = MonitorInfoCompositeData.toCompositeData(mi); } - // CONTENTS OF THIS ARRAY MUST BE SYNCHRONIZED WITH - // THREAD_INFO_ATTRIBUTES! - final Object[] threadInfoItemValues = { - threadInfo.getThreadId(), - threadInfo.getThreadName(), - threadInfo.getThreadState().name(), - threadInfo.getBlockedTime(), - threadInfo.getBlockedCount(), - threadInfo.getWaitedTime(), - threadInfo.getWaitedCount(), - lockInfoData, - threadInfo.getLockName(), - threadInfo.getLockOwnerId(), - threadInfo.getLockOwnerName(), - stackTraceData, - threadInfo.isSuspended(), - threadInfo.isInNative(), - lockedMonitorsData, - lockedSyncsData, - threadInfo.isDaemon(), - threadInfo.getPriority(), - }; + // values may be null; can't use Map.of + Map items = new HashMap<>(); + items.put(THREAD_ID, threadInfo.getThreadId()); + items.put(THREAD_NAME, threadInfo.getThreadName()); + items.put(THREAD_STATE, threadInfo.getThreadState().name()); + items.put(BLOCKED_TIME, threadInfo.getBlockedTime()); + items.put(BLOCKED_COUNT, threadInfo.getBlockedCount()); + items.put(WAITED_TIME, threadInfo.getWaitedTime()); + items.put(WAITED_COUNT, threadInfo.getWaitedCount()); + items.put(LOCK_INFO, lockInfoData); + items.put(LOCK_NAME, threadInfo.getLockName()); + items.put(LOCK_OWNER_ID, threadInfo.getLockOwnerId()); + items.put(LOCK_OWNER_NAME, threadInfo.getLockOwnerName()); + items.put(STACK_TRACE, stackTraceData); + items.put(SUSPENDED, threadInfo.isSuspended()); + items.put(IN_NATIVE, threadInfo.isInNative()); + items.put(LOCKED_MONITORS, lockedMonitorsData); + items.put(LOCKED_SYNCS, lockedSyncsData); + items.put(DAEMON, threadInfo.isDaemon()); + items.put(PRIORITY, threadInfo.getPriority()); try { - return new CompositeDataSupport(compositeType(), - THREAD_INFO_ATTRIBTUES, - threadInfoItemValues); + return new CompositeDataSupport(ThreadInfoCompositeTypes.ofVersion(RUNTIME_VERSION), items); } catch (OpenDataException e) { // Should never reach here throw new AssertionError(e); @@ -183,10 +176,6 @@ PRIORITY, }; - private static final String[] THREAD_INFO_ATTRIBTUES = - Stream.of(V5_ATTRIBUTES, V6_ATTRIBUTES, V9_ATTRIBUTES) - .flatMap(Arrays::stream).toArray(String[]::new); - public long threadId() { return getLong(cdata, THREAD_ID); } @@ -365,12 +354,8 @@ } } - public static CompositeType compositeType() { - return ThreadInfoCompositeTypes.compositeTypes.get(0); - } - + static final int RUNTIME_VERSION = Runtime.version().feature(); static class ThreadInfoCompositeTypes { - static final int CURRENT = Runtime.version().feature(); static final Map compositeTypes = initCompositeTypes(); /* * Returns CompositeType of the given runtime version @@ -382,7 +367,7 @@ static Map initCompositeTypes() { Map types = new HashMap<>(); CompositeType ctype = initCompositeType(); - types.put(CURRENT, ctype); + types.put(RUNTIME_VERSION, ctype); types.put(5, initV5CompositeType(ctype)); types.put(6, initV6CompositeType(ctype)); return types;