⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 javascriptrunner.java

📁 AJAX_aptana_update 关于AJAX的Eclipse插件。可以在这里下载的
💻 JAVA
字号:
/******************************************************************************* * Copyright (c) 2005, 2006 Eclipse Foundation * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: *     Bjorn Freeman-Benson - initial implementation *     Ward Cunningham - initial implementation *******************************************************************************/package org.eclipse.eclipsemonkey.lang.javascript;import java.io.IOException;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.eclipse.core.runtime.CoreException;import org.eclipse.core.runtime.IConfigurationElement;import org.eclipse.core.runtime.IExtension;import org.eclipse.core.runtime.IExtensionPoint;import org.eclipse.core.runtime.IExtensionRegistry;import org.eclipse.core.runtime.IPath;import org.eclipse.core.runtime.InvalidRegistryObjectException;import org.eclipse.core.runtime.Platform;import org.eclipse.eclipsemonkey.DOMDescriptor;import org.eclipse.eclipsemonkey.EclipseMonkeyPlugin;import org.eclipse.eclipsemonkey.IMonkeyScriptRunner;import org.eclipse.eclipsemonkey.RunMonkeyException;import org.eclipse.eclipsemonkey.ScriptMetadata;import org.eclipse.eclipsemonkey.StoredScript;import org.eclipse.eclipsemonkey.dom.IMonkeyDOMFactory;import org.eclipse.eclipsemonkey.dom.Utilities;import org.eclipse.eclipsemonkey.lang.javascript.doms.IJavaScriptDOMFactory;import org.eclipse.ui.IWorkbenchWindow;import org.eclipse.ui.PlatformUI;import org.eclipse.ui.console.MessageConsoleStream;import org.mozilla.javascript.Context;import org.mozilla.javascript.EvaluatorException;import org.mozilla.javascript.Function;import org.mozilla.javascript.NativeJavaObject;import org.mozilla.javascript.RhinoException;import org.mozilla.javascript.Script;import org.mozilla.javascript.Scriptable;import org.mozilla.javascript.ScriptableObject;import org.mozilla.javascript.WrappedException;/** *  * @author Ingo Muschenetz * */public class JavaScriptRunner implements IMonkeyScriptRunner{	IPath path;	IWorkbenchWindow window;	StoredScript storedScript;	ClassLoader old_classloader;	JavaScriptClassLoader classloader;	/**	 * 	 * @param path	 * @param window	 */	public JavaScriptRunner(IPath path, IWorkbenchWindow window)	{		this.path = path;				if(window == null)		{			this.window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();		}		else		{			this.window = window;		}	}		/**	 * @see org.eclipse.eclipsemonkey.IMonkeyScriptRunner#getStoredScript()	 */	public StoredScript getStoredScript()	{		return storedScript;	}	/**	 * @see org.eclipse.eclipsemonkey.IMonkeyScriptRunner#run(java.lang.String, java.lang.Object[])	 */	public Object run(String entryName, Object[] functionArgs) throws RunMonkeyException	{		Object result = null;		try		{			Context cx = Context.enter();			Scriptable sharedScope = null;			String fileName = this.path.toPortableString();			Map scriptStore = EclipseMonkeyPlugin.getDefault().getScriptStore();						storedScript = (StoredScript) (scriptStore.get(fileName));			if (!storedScript.metadata.ensure_doms_are_loaded(window))			{				return null;			}			String sharedScopeName = storedScript.metadata.getScopeName();			if (sharedScopeName != null)			{				Map scopeStore = EclipseMonkeyPlugin.getDefault().getScopeStore();				sharedScope = (Scriptable) scopeStore.get(sharedScopeName);				if (sharedScope == null)				{					sharedScope = new JavaScriptGlobal(cx);					scopeStore.put(sharedScopeName, sharedScope);				}			}			defineDynamicVariables(path);			ClassLoader oldLoader = null;			//defineClassLoader(cx);			try			{				Scriptable compiledScope = (Scriptable) storedScript.extra.get("compiledScope");				boolean needs_compiling = compiledScope == null;								if (needs_compiling)				{					compiledScope = new JavaScriptGlobal(cx);					storedScript.extra.put("compiledScope", compiledScope);					if (sharedScope != null)					{						compiledScope.setParentScope(sharedScope);					}				}				defineStandardGlobalVariables(compiledScope);				defineExtensionGlobalVariables(compiledScope, storedScript.metadata);				if (needs_compiling)				{					String contents = Utilities.getFileContents(path);					Script compiledScript = cx.compileString(contents, fileName, 1, null);										// place path in script's global					compiledScope.put(JavaScriptGlobal.LOCATION_PROPERTY, compiledScope, this.path);										// place script's class loader in script's global					JavaScriptClassLoader cl = new JavaScriptClassLoader();					compiledScope.put(JavaScriptGlobal.CLASS_LOADER_PROPERTY, compiledScope, cl);										compiledScript.exec(cx, compiledScope);					storedScript.extra.put("compiledScript", compiledScript);					EclipseMonkeyPlugin.getDefault().notifyScriptsChanged();				}				Object fObj = compiledScope.get(entryName, compiledScope);								if (!(fObj instanceof Function))				{					throw new EvaluatorException("function " + entryName + "() is not defined in ", fileName, 0, "", 0);				}				else				{					Object scriptsLoader = compiledScope.get(JavaScriptGlobal.CLASS_LOADER_PROPERTY, compiledScope);										if (scriptsLoader != null && scriptsLoader instanceof ClassLoader)					{						cx.setApplicationClassLoader((ClassLoader) scriptsLoader);						oldLoader = cx.getApplicationClassLoader();					}										Function f = (Function) fObj;					result = f.call(cx, compiledScope, compiledScope, functionArgs);				}			}			finally			{				if (oldLoader != null)				{					cx.setApplicationClassLoader(oldLoader);				}				//undefineClassLoader(cx);				undefineDynamicVariables(path);			}		}		catch (WrappedException x)		{			error(x, x.getWrappedException().toString());		}		catch (EvaluatorException x)		{			error(x, x.lineSource() + "\n" + x.details());		}		catch (RhinoException x)		{			error(x, x.details());		}		catch (IOException x)		{			error(x, this.path.toString(), x.toString());		}		catch (CoreException x)		{			error(x, this.path.toString(), x.toString());		}		finally		{			Context.exit();		}		if (result instanceof NativeJavaObject)		{			result = ((NativeJavaObject) result).unwrap();		}		return result;	}		private void defineStandardGlobalVariables(Scriptable scope)	{		Object wrappedWindow = Context.javaToJS(window, scope);		ScriptableObject.putProperty(scope, "window", wrappedWindow);	}	private void defineExtensionGlobalVariables(Scriptable scope,			ScriptMetadata metadata) throws IOException 	{		IExtensionRegistry registry = Platform.getExtensionRegistry();		IExtensionPoint point = registry				.getExtensionPoint("org.eclipse.eclipsemonkey.dom");		if (point != null) {			IExtension[] extensions = point.getExtensions();			for (int i = 0; i < extensions.length; i++) {				IExtension extension = extensions[i];				IConfigurationElement[] configurations = extension						.getConfigurationElements();				for (int j = 0; j < configurations.length; j++) {					IConfigurationElement element = configurations[j];					try {						IExtension declaring = element.getDeclaringExtension();//						String declaring_plugin_id = declaring//								.getDeclaringPluginDescriptor()//								.getUniqueIdentifier();						String declaring_plugin_id = declaring.getNamespaceIdentifier();												if (metadata.containsDOM_by_plugin(declaring_plugin_id)) {							String variableName = element									.getAttribute("variableName");							Object object = element									.createExecutableExtension("class");							IMonkeyDOMFactory factory = (IMonkeyDOMFactory) object;														Object rootObject = factory.getDOMroot();							//							ClassLoader rootLoader = rootObject.getClass()//									.getClassLoader();//							classloader.add(rootLoader);							Object wrappedRoot = Context.javaToJS(rootObject,									scope);							ScriptableObject.putProperty(scope, variableName,									wrappedRoot);						}					} catch (InvalidRegistryObjectException x) {						// ignore bad extensions					} catch (CoreException x) {						// ignore bad extensions					}				}			}		}				point = registry.getExtensionPoint("org.eclipse.eclipsemonkey.lang.javascript.javascript_dom");				if (point != null) {			IExtension[] extensions = point.getExtensions();			for (int i = 0; i < extensions.length; i++) {				IExtension extension = extensions[i];				IConfigurationElement[] configurations = extension						.getConfigurationElements();				for (int j = 0; j < configurations.length; j++) {					IConfigurationElement element = configurations[j];					try {						IExtension declaring = element.getDeclaringExtension();				//				String declaring_plugin_id = declaring		//						.getDeclaringPluginDescriptor()		//						.getUniqueIdentifier();						String declaring_plugin_id = declaring.getNamespaceIdentifier();												if (metadata.containsDOM_by_plugin(declaring_plugin_id)) {														String variableName = element									.getAttribute("variableName");														String basedOnDOM = element								.getAttribute("basedOn");														if(basedOnDOM != null && basedOnDOM.trim().length() > 0)							{								Pattern p = Pattern.compile("\\s*(\\p{Graph}+)\\/((\\p{Alnum}|\\.)+)",										Pattern.DOTALL);								Matcher m = p.matcher(basedOnDOM);								while (m.find()) {									metadata.getDOMs().add(											new DOMDescriptor(m.group(1), m.group(2)));								}																if(metadata.ensure_doms_are_loaded(window) == false)								{									throw new IOException("Cannot load the required DOM extension:\n\n" + basedOnDOM + "\n");								}							}														Object object = element									.createExecutableExtension("class");														IJavaScriptDOMFactory factory = (IJavaScriptDOMFactory) object;														Object rootObject = factory.getDOMroot(scope);							//							ClassLoader rootLoader = rootObject.getClass().getClassLoader();//							classloader.add(rootLoader);							Object wrappedRoot = Context.javaToJS(rootObject,									scope);							ScriptableObject.putProperty(scope, variableName,									wrappedRoot);						}					} catch (InvalidRegistryObjectException x) {						// ignore bad extensions					} catch (CoreException x) {						// ignore bad extensions					}				}			}		}					}	private void error(RhinoException x, String string)			throws RunMonkeyException {				RunMonkeyException e = new RunMonkeyException(x.getClass().getName(), x.sourceName(),				new Integer(x.lineNumber()), string);				MessageConsoleStream cs = JavaScriptGlobal.getConsoleStream();				cs.println(e.toString());		throw e;	}		private void defineDynamicVariables(IPath path) {		Utilities.state().begin(path);		Utilities.state().set(Utilities.SCRIPT_NAME,				path.toPortableString());	}	private void undefineDynamicVariables(IPath path) {		Utilities.state().end(path);	}	private void error(Exception x, String fileName, String string)			throws RunMonkeyException {		RunMonkeyException e = new RunMonkeyException(x.getClass().getName(), fileName, null,				string);				MessageConsoleStream cs = JavaScriptGlobal.getConsoleStream();				cs.println(e.toString());		throw e;	}//	private void defineClassLoader(Context cx) {//		old_classloader = cx.getApplicationClassLoader(); //		classloader = new JavaScriptClassLoader();//		cx.setApplicationClassLoader(classloader);//	}////	private void undefineClassLoader(Context cx) {//		cx.setApplicationClassLoader(old_classloader);//	}}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -