int32 FObjectMemoryAnalyzer::GetReferencedObjects(UObject* Obj, TArray<UObject*>& ReferencedObjects) { FReferenceFinder ObjectReferenceCollector( ReferencedObjects, Obj, false, true, true, false); ObjectReferenceCollector.FindReferences( Obj ); return ReferencedObjects.Num(); }
void FContentComparisonHelper::RecursiveObjectCollection(UObject* InStartObject, int32 InCurrDepth, int32 InMaxDepth, TMap<UObject*,bool>& OutCollectedReferences) { // Serialize object with reference collector. TArray<UObject*> LocalCollectedReferences; FReferenceFinder ObjectReferenceCollector( LocalCollectedReferences, NULL, false, true, true, true ); ObjectReferenceCollector.FindReferences( InStartObject ); if (InCurrDepth < InMaxDepth) { InCurrDepth++; for (int32 ObjRefIdx = 0; ObjRefIdx < LocalCollectedReferences.Num(); ObjRefIdx++) { UObject* InnerObject = LocalCollectedReferences[ObjRefIdx]; if ((InnerObject != NULL) && (InnerObject->IsA(UFunction::StaticClass()) == false) && (InnerObject->IsA(UPackage::StaticClass()) == false) ) { OutCollectedReferences.Add(InnerObject, true); RecursiveObjectCollection(InnerObject, InCurrDepth, InMaxDepth, OutCollectedReferences); } } InCurrDepth--; } }
void UDataTable::AddReferencedObjects(UObject* InThis, FReferenceCollector& Collector) { UDataTable* This = CastChecked<UDataTable>(InThis); // Need to emit references for referenced rows if(This->RowStruct != NULL) { // Now iterate over rows in the map for ( auto RowIt = This->RowMap.CreateIterator(); RowIt; ++RowIt ) { uint8* RowData = RowIt.Value(); if (RowData) { // Serialize all of the properties to make sure they get in the collector FSimpleObjectReferenceCollectorArchive ObjectReferenceCollector( This, Collector ); This->RowStruct->SerializeBin(ObjectReferenceCollector, RowData); } } } #if WITH_EDITOR Collector.AddReferencedObjects(This->TemporarilyReferencedObjects); #endif //WITH_EDITOR Super::AddReferencedObjects( This, Collector ); }
void UUserDefinedStructEditorData::AddReferencedObjects(UObject* InThis, FReferenceCollector& Collector) { UUserDefinedStructEditorData* This = CastChecked<UUserDefinedStructEditorData>(InThis); UStruct* ScriptStruct = This->GetOwnerStruct(); ensure(!This->DefaultStructInstance.IsValid() || This->DefaultStructInstance.GetStruct() == ScriptStruct); uint8* StructData = This->DefaultStructInstance.GetStructMemory(); if (StructData) { FSimpleObjectReferenceCollectorArchive ObjectReferenceCollector(This, Collector); ScriptStruct->SerializeBin(ObjectReferenceCollector, StructData); } Super::AddReferencedObjects(This, Collector); }