const TCHAR* UInterfaceProperty::ImportText_Internal( const TCHAR* InBuffer, void* Data, int32 PortFlags, UObject* Parent, FOutputDevice* ErrorText/*=NULL*/ ) const { FScriptInterface* InterfaceValue = (FScriptInterface*)Data; UObject* ResolvedObject = InterfaceValue->GetObject(); void* InterfaceAddress = InterfaceValue->GetInterface(); const TCHAR* Buffer = InBuffer; if ( !UObjectPropertyBase::ParseObjectPropertyValue(this, Parent, UObject::StaticClass(), PortFlags, Buffer, ResolvedObject) ) { // we only need to call SetObject here - if ObjectAddress was not modified, then InterfaceValue should not be modified either // if it was set to NULL, SetObject will take care of clearing the interface address too InterfaceValue->SetObject(ResolvedObject); return NULL; } // so we should now have a valid object if ( ResolvedObject == NULL ) { // if ParseObjectPropertyValue returned true but ResolvedObject is NULL, the imported text was "None". Make sure the interface pointer // is cleared, then stop InterfaceValue->SetObject(NULL); return Buffer; } void* NewInterfaceAddress = ResolvedObject->GetInterfaceAddress(InterfaceClass); if ( NewInterfaceAddress == NULL ) { // the object we imported doesn't implement our interface class ErrorText->Logf( TEXT("%s: specified object doesn't implement the required interface class '%s': %s"), *GetFullName(), *InterfaceClass->GetName(), InBuffer ); return NULL; } InterfaceValue->SetObject(ResolvedObject); InterfaceValue->SetInterface(NewInterfaceAddress); return Buffer; }