private void scanEntry()

in application/org.openjdk.jmc.joverflow/src/main/java/org/openjdk/jmc/joverflow/descriptors/TreeMapDescriptor.java [144:204]


	private void scanEntry(JavaThing entryThing, JavaThing[] entryFields, MapIteratorCallback cb) {
		if (entryThing == null || entryThing instanceof UnresolvedObject) {
			return;
		}
		JavaObject entry = (JavaObject) entryThing;
		if (!cb.scanImplementationObject(entry)) {
			return;
		}

		entryFields = entry.getFields(entryFields);
		JavaThing keyThing = entryFields[keyFieldIdx];
		JavaThing valueThing = entryFields[valueFieldIdx];
		JavaHeapObject key = null, value = null;

		if (((Factory) factory).isJRockitVersion) {
			JavaObjectArray keysArr = (keyThing != null && keyThing instanceof JavaObjectArray)
					? (JavaObjectArray) keyThing : null;
			JavaObjectArray valuesArr = (valueThing != null && valueThing instanceof JavaObjectArray)
					? (JavaObjectArray) valueThing : null;
			JavaHeapObject[] keys = EMPTY_OBJ_ARRAY;
			if (keysArr != null) {
				if (!cb.scanImplementationObject(keysArr)) {
					return;
				}
				keys = keysArr.getElements();
			}
			JavaHeapObject[] values = EMPTY_OBJ_ARRAY;
			if (valuesArr != null) {
				if (!cb.scanImplementationObject(valuesArr)) {
					return;
				}
				values = valuesArr.getElements();
			}
			int maxLen = (keys.length > values.length) ? keys.length : values.length;

			for (int i = 0; i < maxLen; i++) {
				key = (i < keys.length) ? keys[i] : null;
				value = (i < values.length) ? values[i] : null;
				if (!cb.scanMapEntry(key, value)) {
					return;
				}
			}

		} else {
			if (keyThing != null && keyThing instanceof JavaHeapObject) {
				key = (JavaHeapObject) keyThing;
			}
			if (valueThing != null && valueThing instanceof JavaHeapObject) {
				value = (JavaHeapObject) valueThing;
			}

			if (!cb.scanMapEntry(key, value)) {
				return;
			}
		}

		JavaThing leftThing = entryFields[leftFieldIdx];
		JavaThing rightThing = entryFields[rightFieldIdx];
		scanEntry(leftThing, entryFields, cb);
		scanEntry(rightThing, entryFields, cb);
	}