46 {
47#if !FIRST_PASS
48 System.Reflection.ConstructorInfo[] constructors = typeof(global::java.lang.management.ThreadInfo).GetConstructors(
System.Reflection.BindingFlags.Instance |
System.Reflection.BindingFlags.NonPublic);
49 foreach (
System.Reflection.ConstructorInfo constructor in constructors)
50 {
51 if (constructor.GetParameters().Length == 9)
52 {
53 global::java.lang.Thread[] threads = (global::java.lang.Thread[])
getThreads();
54 global::java.lang.management.ThreadInfo[] threadInfos = (global::java.lang.management.ThreadInfo[])result;
55 for (int i = 0; i < ids.Length; i++)
56 {
57 long id = ids[i];
58 for (int t = 0; t < threads.Length; t++)
59 {
60 if (threads[t].getId() == id)
61 {
62 global::java.lang.Thread thread = threads[t];
63
64 int state;
65
66 switch (thread.getState().ordinal())
67 {
68 case (int)global::java.lang.Thread.State.__Enum.RUNNABLE:
69 state = JVMTI_THREAD_STATE_RUNNABLE;
70 break;
71 case (int)global::java.lang.Thread.State.__Enum.BLOCKED:
72 state = JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER;
73 break;
74 case (int)global::java.lang.Thread.State.__Enum.WAITING:
75 state = JVMTI_THREAD_STATE_WAITING_INDEFINITELY;
76 break;
77 case (int)global::java.lang.Thread.State.__Enum.TIMED_WAITING:
78 state = JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT;
79 break;
80 case (int)global::java.lang.Thread.State.__Enum.TERMINATED:
81 state = JVMTI_THREAD_STATE_TERMINATED;
82 break;
83 case (int)global::java.lang.Thread.State.__Enum.NEW:
84 state = JVMTI_THREAD_STATE_ALIVE;
85 break;
86 default:
87 state = 0;
88 break;
89 }
90
91
92 global::java.lang.StackTraceElement[] stacktrace = thread.getStackTrace();
93 if (maxDepth >= 0 && maxDepth < stacktrace.Length)
94 {
95 global::java.lang.StackTraceElement[] temp = new global::java.lang.StackTraceElement[maxDepth];
96 System.Array.Copy(stacktrace, temp, temp.Length);
97 stacktrace = temp;
98 }
99
100 object[] parameters = new object[9];
101 parameters[0] = thread;
102 parameters[1] = state;
103
104
105 parameters[4] = 0;
106 parameters[5] = 0;
107 parameters[6] = -1;
108 parameters[7] = 0;
109 parameters[8] = stacktrace;
110 threadInfos[i] = (global::java.lang.management.ThreadInfo)constructor.Invoke(parameters);
111 break;
112 }
113 }
114 }
115 return;
116 }
117 }
118 throw new global::java.lang.InternalError("Constructor for java.lang.management.ThreadInfo not find.");
119#endif
120 }
static object getThreads()