int32 FObjectMemoryAnalyzer::GetReferencedObjects(UObject* Obj, TArray<UObject*>& ReferencedObjects)
{
	FReferenceFinder ObjectReferenceCollector( ReferencedObjects, Obj, false, true, true, false);
	ObjectReferenceCollector.FindReferences( Obj );

	return ReferencedObjects.Num();
 }
Example #2
0
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--;
	}
}
Example #3
0
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);
}