Esempio n. 1
0
 internal JniClass(JniEnvironment environment, IntPtr handle, JniObjectLifecycle lifecycle)
     : base(environment, handle, lifecycle)
 {
     // TODO - make this instance global???
     if (!mStaticsInitialized)
     {
         mStaticsInitialized = true;
         JniClass localClassClass = this.GetObjectClass(environment);
         // NOTE: no need to NewGlobalRef class handle for java.lang.Class, will not be unloaded
         mGetNameMid = localClassClass.GetMethodId(environment, "getName", "()Ljava/lang/String;");
     }
 }
Esempio n. 2
0
 protected internal JniObject(JniEnvironment environment, IntPtr handle, JniObjectLifecycle lifecycle)
 {
     if (handle == IntPtr.Zero)
     {
         throw new JniException("TODO");
     }
     if (lifecycle == JniObjectLifecycle.Dead)
     {
         throw new JniException("Invalid starting state");
     }
     mHandle = handle;
     mLifeCycle = lifecycle;
     if (mLifeCycle == JniObjectLifecycle.Local)
     {
         environment.AddToCurrentFrame(this);
     }
     else if (mLifeCycle == JniObjectLifecycle.LocalJ2N)
     {
         mWillFinalize = false;
         GC.SuppressFinalize(this);
     }
 }
Esempio n. 3
0
 internal JniByteArray(JniEnvironment environment, IntPtr handle, JniObjectLifecycle lifecycle)
     : base(environment, handle, lifecycle)
 {
 }
Esempio n. 4
0
 internal JniThrowable(JniEnvironment environment, IntPtr handle, JniObjectLifecycle lifecycle)
     : base(environment, handle, lifecycle)
 {
 }
Esempio n. 5
0
 internal JniObjectArray(JniEnvironment environment, IntPtr handle, JniObjectLifecycle lifecycle, int arrayRank, JniType elementType)
     : base(environment, handle, lifecycle)
 {
     mArrayRank = arrayRank;
     mElementType = elementType;
 }
Esempio n. 6
0
 internal JniString(JniEnvironment environment, IntPtr handle, JniObjectLifecycle lifecycle)
     : base(environment, handle, lifecycle)
 {
 }
Esempio n. 7
0
 private JniObject MakeNew(JniEnvironment environment, JniObjectLifecycle target, bool releaseThis)
 {
     VerifyAlive();
     VerifyEnvironment(environment);
     IntPtr result = IntPtr.Zero;
     if (target == JniObjectLifecycle.Global || target == JniObjectLifecycle.GlobalAutoRelease)
     {
         result = JniEnvironment.Functions.NewGlobalRef(environment.Handle, this.Handle);
     }
     else if (target == JniObjectLifecycle.Local)
     {
         result = JniEnvironment.Functions.NewLocalRef(environment.Handle, this.Handle);
     }
     if (result == IntPtr.Zero)
     {
         JniThrowable.CheckException(environment);
     }
     // TODO - create correct type
     JniObject newObject = JniObject.CreateObjectOfType(environment, result, this, target);
     if (releaseThis)
     {
         this.Release(environment);
     }
     return newObject;
 }
Esempio n. 8
0
 private void MakeDead()
 {
     this.mLifeCycle = JniObjectLifecycle.Dead;
     this.mHandle = IntPtr.Zero;
     if (mWillFinalize)
     {
         GC.SuppressFinalize(this);
         mWillFinalize = false;
     }
 }
Esempio n. 9
0
 private static JniObject CreateObjectOfType(JniEnvironment environment, IntPtr handle, 
     JniConcreteObjectType concreteType, JniObjectLifecycle lifecycle)
 {
     switch (concreteType)
     {
         case JniConcreteObjectType.Object: return new JniObject(environment, handle, lifecycle);
         case JniConcreteObjectType.String: return new JniString(environment, handle, lifecycle);
         case JniConcreteObjectType.Class: return new JniClass(environment, handle, lifecycle);
         case JniConcreteObjectType.Throwable: return new JniThrowable(environment, handle, lifecycle);
         case JniConcreteObjectType.BooleanArray: return new JniBooleanArray(environment, handle, lifecycle);
         case JniConcreteObjectType.ByteArray: return new JniByteArray(environment, handle, lifecycle);
         case JniConcreteObjectType.CharArray: return new JniCharArray(environment, handle, lifecycle);
         case JniConcreteObjectType.DoubleArray: return new JniDoubleArray(environment, handle, lifecycle);
         case JniConcreteObjectType.IntArray: return new JniIntArray(environment, handle, lifecycle);
         case JniConcreteObjectType.FloatArray: return new JniFloatArray(environment, handle, lifecycle);
         case JniConcreteObjectType.LongArray: return new JniLongArray(environment, handle, lifecycle);
         case JniConcreteObjectType.ShortArray: return new JniShortArray(environment, handle, lifecycle);
         case JniConcreteObjectType.ObjectArray: return new JniObjectArray(environment, handle, lifecycle, -1, JniType.Null);
         default: throw new JniException("TODO");
     }
 }
Esempio n. 10
0
 private static JniObject CreateObjectOfType(JniEnvironment environment, IntPtr handle,
     JniObject originalObject, JniObjectLifecycle lifecycle)
 {
     if (originalObject.ConcreteType == JniConcreteObjectType.ObjectArray)
     {
         JniObjectArray objectArray = originalObject as JniObjectArray;
         return new JniObjectArray(environment, handle, lifecycle,
             objectArray.ArrayRank,
             objectArray.ElementType);
     }
     return CreateObjectOfType(environment, handle, originalObject.ConcreteType, lifecycle);
 }