Rhino.Context.GetApplicationClassLoader C# (CSharp) Method

GetApplicationClassLoader() public method

public GetApplicationClassLoader ( ) : ClassLoader
return ClassLoader
		public ClassLoader GetApplicationClassLoader()
		{
			if (applicationClassLoader == null)
			{
				ContextFactory f = GetFactory();
				ClassLoader loader = f.GetApplicationClassLoader();
				if (loader == null)
				{
					ClassLoader threadLoader = VMBridge.instance.GetCurrentThreadClassLoader();
					if (threadLoader != null && Kit.TestIfCanLoadRhinoClasses(threadLoader))
					{
						// Thread.getContextClassLoader is not cached since
						// its caching prevents it from GC which may lead to
						// a memory leak and hides updates to
						// Thread.getContextClassLoader
						return threadLoader;
					}
					// Thread.getContextClassLoader can not load Rhino classes,
					// try to use the loader of ContextFactory or Context
					// subclasses.
					Type fClass = f.GetType();
					if (fClass != ScriptRuntime.ContextFactoryClass)
					{
						loader = fClass.GetClassLoader();
					}
					else
					{
						loader = GetType().GetClassLoader();
					}
				}
				applicationClassLoader = loader;
			}
			return applicationClassLoader;
		}

Usage Example

Example #1
0
		public static void Init(Context cx, Scriptable scope, bool @sealed)
		{
			ClassLoader loader = cx.GetApplicationClassLoader();
			Rhino.NativeJavaTopPackage top = new Rhino.NativeJavaTopPackage(loader);
			top.SetPrototype(GetObjectPrototype(scope));
			top.SetParentScope(scope);
			for (int i = 0; i != commonPackages.Length; i++)
			{
				NativeJavaPackage parent = top;
				for (int j = 0; j != commonPackages[i].Length; j++)
				{
					parent = parent.ForcePackage(commonPackages[i][j], scope);
				}
			}
			// getClass implementation
			IdFunctionObject getClass = new IdFunctionObject(top, FTAG, Id_getClass, "getClass", 1, scope);
			// We want to get a real alias, and not a distinct JavaPackage
			// with the same packageName, so that we share classes and top
			// that are underneath.
			string[] topNames = ScriptRuntime.GetTopPackageNames();
			NativeJavaPackage[] topPackages = new NativeJavaPackage[topNames.Length];
			for (int i_1 = 0; i_1 < topNames.Length; i_1++)
			{
				topPackages[i_1] = (NativeJavaPackage)top.Get(topNames[i_1], top);
			}
			// It's safe to downcast here since initStandardObjects takes
			// a ScriptableObject.
			ScriptableObject global = (ScriptableObject)scope;
			if (@sealed)
			{
				getClass.SealObject();
			}
			getClass.ExportAsScopeProperty();
			global.DefineProperty("Packages", top, ScriptableObject.DONTENUM);
			for (int i_2 = 0; i_2 < topNames.Length; i_2++)
			{
				global.DefineProperty(topNames[i_2], topPackages[i_2], ScriptableObject.DONTENUM);
			}
		}
Context