
org.robolectric.shadows.ShadowVirtualRefBasePtr Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of framework Show documentation
Show all versions of framework Show documentation
An alternative Android testing framework.
The newest version!
package org.robolectric.shadows;
import com.android.internal.util.VirtualRefBasePtr;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import java.util.HashMap;
import java.util.Map;
@Implements(value = VirtualRefBasePtr.class, isInAndroidSdk = false)
public class ShadowVirtualRefBasePtr {
private static final Map POINTERS = new HashMap<>();
private static long nextNativeObj = 10000;
synchronized public static long put(T object) {
long nativePtr = nextNativeObj++;
POINTERS.put(nativePtr, new RefHolder(object));
return nativePtr;
}
synchronized public static T get(long nativePtr) {
return (T) POINTERS.get(nativePtr).nativeThing;
}
@Implementation
synchronized public static void nIncStrong(long ptr) {
if (ptr == 0) return;
POINTERS.get(ptr).incr();
}
@Implementation
synchronized public static void nDecStrong(long ptr) {
if (ptr == 0) return;
if (POINTERS.get(ptr).decr()) {
POINTERS.remove(ptr);
}
}
private static class RefHolder {
T nativeThing;
int refCount;
public RefHolder(T object) {
this.nativeThing = object;
}
synchronized public void incr() {
refCount++;
}
synchronized public boolean decr() {
refCount--;
return refCount == 0;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy