public jvmtiError GetImplementedInterfaces(JniEnvironment nativeEnvironment, jclass classHandle, out TaggedReferenceTypeId[] interfaces) { interfaces = null; int interfacesCount; IntPtr interfacesPtr; jvmtiError error = RawInterface.GetImplementedInterfaces(this, classHandle, out interfacesCount, out interfacesPtr); if (error != jvmtiError.None) { return(error); } try { List <TaggedReferenceTypeId> interfaceList = new List <TaggedReferenceTypeId>(); unsafe { jclass *interfaceHandles = (jclass *)interfacesPtr; for (int i = 0; i < interfacesCount; i++) { if (interfaceHandles[i] == jclass.Null) { continue; } interfaceList.Add(VirtualMachine.TrackLocalClassReference(interfaceHandles[i], this, nativeEnvironment, true)); } } interfaces = interfaceList.ToArray(); return(jvmtiError.None); } finally { Deallocate(interfacesPtr); } }
public jvmtiError GetLoadedClasses(JniEnvironment nativeEnvironment, out TaggedReferenceTypeId[] classes) { classes = null; int classCount; IntPtr classesPtr; jvmtiError error = RawInterface.GetLoadedClasses(this, out classCount, out classesPtr); if (error != jvmtiError.None) { return(error); } try { List <TaggedReferenceTypeId> classList = new List <TaggedReferenceTypeId>(); unsafe { jclass *classHandles = (jclass *)classesPtr; for (int i = 0; i < classCount; i++) { if (classHandles[i] == jclass.Null) { continue; } classList.Add(VirtualMachine.TrackLocalClassReference(classHandles[i], this, nativeEnvironment, true)); } } classes = classList.ToArray(); return(jvmtiError.None); } finally { Deallocate(classesPtr); } }