Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,22 @@ public static int getJNIPassCounter() {
return mJniCallCounter;
}

private HashMap<String, Object> getLocalMap() {
if (mLocalMap != null) {
return mLocalMap;
}
private void ensureKeysAreImported() {
synchronized (this) {
if (mKeys == null) {
mKeys = Assertions.assertNotNull(importKeys());
mJniCallCounter++;
}
}
}

private HashMap<String, Object> getLocalMap() {
if (mLocalMap != null) {
return mLocalMap;
}
ensureKeysAreImported();
synchronized (this) {

if (mLocalMap == null) {
Object[] values = Assertions.assertNotNull(importValues());
mJniCallCounter++;
Expand All @@ -69,11 +76,8 @@ private HashMap<String, Object> getLocalMap() {
if (mLocalTypeMap != null) {
return mLocalTypeMap;
}
ensureKeysAreImported();
synchronized (this) {
if (mKeys == null) {
mKeys = Assertions.assertNotNull(importKeys());
mJniCallCounter++;
}
// check that no other thread has already updated
if (mLocalTypeMap == null) {
Object[] types = Assertions.assertNotNull(importTypes());
Expand Down Expand Up @@ -187,48 +191,47 @@ public int getInt(@NonNull String name) {

@Override
public @NonNull Iterator<Map.Entry<String, Object>> getEntryIterator() {
if (mKeys == null) {
mKeys = Assertions.assertNotNull(importKeys());
}
ensureKeysAreImported();
final String[] iteratorKeys = mKeys;
final Object[] iteratorValues = Assertions.assertNotNull(importValues());
return new Iterator<Map.Entry<String, Object>>() {
int currentIndex = 0;
synchronized (this) {
final Object[] iteratorValues = Assertions.assertNotNull(importValues());

@Override
public boolean hasNext() {
return currentIndex < iteratorKeys.length;
}
return new Iterator<Map.Entry<String, Object>>() {
int currentIndex = 0;

@Override
public Map.Entry<String, Object> next() {
final int index = currentIndex++;
return new Map.Entry<String, Object>() {
@Override
public String getKey() {
return iteratorKeys[index];
}

@Override
public Object getValue() {
return iteratorValues[index];
}

@Override
public Object setValue(Object value) {
throw new UnsupportedOperationException(
"Can't set a value while iterating over a ReadableNativeMap");
}
};
}
};
@Override
public boolean hasNext() {
return currentIndex < iteratorKeys.length;
}

@Override
public Map.Entry<String, Object> next() {
final int index = currentIndex++;
return new Map.Entry<String, Object>() {
@Override
public String getKey() {
return iteratorKeys[index];
}

@Override
public Object getValue() {
return iteratorValues[index];
}

@Override
public Object setValue(Object value) {
throw new UnsupportedOperationException(
"Can't set a value while iterating over a ReadableNativeMap");
}
};
}
};
}
}

@Override
public @NonNull ReadableMapKeySetIterator keySetIterator() {
if (mKeys == null) {
mKeys = Assertions.assertNotNull(importKeys());
}
ensureKeysAreImported();
final String[] iteratorKeys = mKeys;
return new ReadableMapKeySetIterator() {
int currentIndex = 0;
Expand Down