MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / GetOrCreateClass

Function GetOrCreateClass

Source/Engine/Scripting/Runtime/DotNet.cpp:1739–1773  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1737}
1738
1739MClass* GetOrCreateClass(MType* typeHandle)
1740{
1741 if (!typeHandle)
1742 return nullptr;
1743 PROFILE_MEM(ScriptingCSharp);
1744 ScopeLock lock(BinaryModule::Locker);
1745 MClass* klass;
1746 if (!CachedClassHandles.TryGet(typeHandle, klass))
1747 {
1748 NativeClassDefinitions classInfo;
1749 void* assemblyHandle;
1750 static void* GetManagedClassFromTypePtr = GetStaticMethodPointer(TEXT("GetManagedClassFromType"));
1751 CallStaticMethod<void, void*, void*>(GetManagedClassFromTypePtr, typeHandle, &classInfo, &assemblyHandle);
1752 MAssembly* assembly = GetAssembly(assemblyHandle);
1753 klass = assembly->Memory.New<MClass>(assembly, classInfo.typeHandle, classInfo.name, classInfo.fullname, classInfo.namespace_, classInfo.typeAttributes);
1754 if (assembly != nullptr)
1755 {
1756 auto& classes = assembly->GetTypeClasses();
1757 if (classes.ContainsKey(klass->GetFullName()))
1758 {
1759 LOG(Warning, "Class '{0}' was already added to assembly '{1}'", String(klass->GetFullName()), String(assembly->GetName()));
1760 }
1761 classes[klass->GetFullName()] = klass;
1762 }
1763
1764 if (typeHandle != classInfo.typeHandle)
1765 CallStaticMethod<void, void*, void*>(GetManagedClassFromTypePtr, typeHandle, &classInfo);
1766
1767 MCore::GC::FreeMemory((void*)classInfo.name);
1768 MCore::GC::FreeMemory((void*)classInfo.fullname);
1769 MCore::GC::FreeMemory((void*)classInfo.namespace_);
1770 }
1771 ASSERT(klass != nullptr);
1772 return klass;
1773}
1774
1775MType* GetObjectType(MObject* obj)
1776{

Callers 6

GetClassMethod · 0.85
GetArrayClassMethod · 0.85
ToStringMethod · 0.85
GetSizeMethod · 0.85
GetTypeMethod · 0.85
DotNet.cppFile · 0.85

Calls 6

GetStaticMethodPointerFunction · 0.85
GetAssemblyFunction · 0.85
StringFunction · 0.50
TryGetMethod · 0.45
ContainsKeyMethod · 0.45
GetNameMethod · 0.45

Tested by

no test coverage detected