Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
            }
        }