| 292 | } |
| 293 | |
| 294 | MClass* ScriptsBuilder::FindScript(const StringView& scriptName) |
| 295 | { |
| 296 | PROFILE_CPU(); |
| 297 | const StringAnsi scriptNameStd = scriptName.ToStringAnsi(); |
| 298 | |
| 299 | const ScriptingTypeHandle scriptingType = Scripting::FindScriptingType(scriptNameStd); |
| 300 | if (scriptingType) |
| 301 | { |
| 302 | MClass* mclass = scriptingType.GetType().ManagedClass; |
| 303 | if (mclass) |
| 304 | { |
| 305 | return mclass; |
| 306 | } |
| 307 | } |
| 308 | |
| 309 | // Check all assemblies (ignoring the typename namespace) |
| 310 | auto& modules = BinaryModule::GetModules(); |
| 311 | StringAnsi className; |
| 312 | GetClassName(scriptNameStd, className); |
| 313 | MClass* scriptClass = Script::GetStaticClass(); |
| 314 | for (int32 j = 0; j < modules.Count(); j++) |
| 315 | { |
| 316 | auto managedModule = dynamic_cast<ManagedBinaryModule*>(modules[j]); |
| 317 | if (!managedModule) |
| 318 | continue; |
| 319 | auto assembly = managedModule->Assembly; |
| 320 | auto& classes = assembly->GetClasses(); |
| 321 | for (auto i = classes.Begin(); i.IsNotEnd(); ++i) |
| 322 | { |
| 323 | MClass* mclass = i->Value; |
| 324 | |
| 325 | // Managed scripts |
| 326 | if (mclass->IsSubClassOf(scriptClass) && !mclass->IsStatic() && !mclass->IsAbstract() && !mclass->IsInterface()) |
| 327 | { |
| 328 | StringAnsi mclassName; |
| 329 | GetClassName(mclass->GetFullName(), mclassName); |
| 330 | if (className == mclassName) |
| 331 | { |
| 332 | LOG(Info, "Found {0} type for type {1} (assembly {2})", String(mclass->GetFullName()), String(scriptName.Get(), scriptName.Length()), assembly->ToString()); |
| 333 | return mclass; |
| 334 | } |
| 335 | } |
| 336 | } |
| 337 | } |
| 338 | |
| 339 | LOG(Warning, "Failed to find script class of name {0}", String(scriptNameStd)); |
| 340 | return nullptr; |
| 341 | } |
| 342 | |
| 343 | void ScriptsBuilder::GetExistingEditors(int32* result, int32 count) |
| 344 | { |
no test coverage detected