<lambda>null1package shark.internal 2 3 import shark.HeapObject 4 import shark.HeapObject.HeapClass 5 import shark.HeapObject.HeapInstance 6 import shark.HeapObject.HeapObjectArray 7 import shark.HeapObject.HeapPrimitiveArray 8 9 /** 10 * INTERNAL 11 * 12 * This class is public to be accessible from other LeakCanary modules but shouldn't be 13 * called directly, the API may break at any point. 14 */ 15 object InternalSharkCollectionsHelper { 16 17 fun arrayListValues(heapInstance: HeapInstance): Sequence<String> { 18 val graph = heapInstance.graph 19 val arrayListReader = OpenJdkInstanceRefReaders.ARRAY_LIST.create(graph) 20 ?: ApacheHarmonyInstanceRefReaders.ARRAY_LIST.create(graph) 21 ?: return emptySequence() 22 23 if (!arrayListReader.matches(heapInstance)) { 24 return emptySequence() 25 } 26 27 return arrayListReader.read(heapInstance).map { reference -> 28 val arrayListValue = graph.findObjectById(reference.valueObjectId) 29 val details = reference.lazyDetailsResolver.resolve() 30 "[${details.name}] = ${className(arrayListValue)}" 31 } 32 } 33 34 private fun className(graphObject: HeapObject): String { 35 return when (graphObject) { 36 is HeapClass -> { 37 graphObject.name 38 } 39 is HeapInstance -> { 40 graphObject.instanceClassName 41 } 42 is HeapObjectArray -> { 43 graphObject.arrayClassName 44 } 45 is HeapPrimitiveArray -> { 46 graphObject.arrayClassName 47 } 48 } 49 } 50 } 51