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

📄 pluginjar.java

📁 开源的java 编辑器源代码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
			else if(lname.equals("services.xml"))			{				servicesURI = classLoader.getResource(name);				cache.servicesURI = servicesURI;			}			else if(lname.endsWith(".props"))			{				InputStream in = classLoader.getResourceAsStream(name);				properties.load(in);				in.close();			}			else if(name.endsWith(".class"))			{				String className = MiscUtilities					.fileToClass(name);				if(className.endsWith("Plugin"))				{					plugins.add(className);				}				classes.add(className);			}		}		cache.cachedProperties = properties;		jEdit.addPluginProps(properties);		this.classes = cache.classes =			(String[])classes.toArray(			new String[classes.size()]);		String label = null;		Iterator iter = plugins.iterator();		while(iter.hasNext())		{			String className = (String)iter.next();			String _label = jEdit.getProperty("plugin."				+ className + ".name");			String version = jEdit.getProperty("plugin."				+ className + ".version");			if(_label == null || version == null)			{				Log.log(Log.WARNING,this,"Ignoring: "					+ className);			}			else			{				cache.pluginClass = className;				// Check if a plugin with the same name				// is already loaded				if(jEdit.getPlugin(className) != null)				{					jEdit.pluginError(path,						"plugin-error.already-loaded",						null);					return null;				}				else				{					plugin = new EditPlugin.Deferred(						className);					plugin.jar = (EditPlugin.JAR)this;					label = _label;				}				break;			}		}		if(cache.actionsURI != null)		{			actions = new ActionSet(this,null,null,				cache.actionsURI);			actions.load();			cache.cachedActionNames =				actions.getCacheableActionNames();			cache.cachedActionToggleFlags = new boolean[				cache.cachedActionNames.length];			for(int i = 0; i < cache.cachedActionNames.length; i++)			{				 cache.cachedActionToggleFlags[i]				 	= jEdit.getBooleanProperty(					cache.cachedActionNames[i]					+ ".toggle");			}		}		if(cache.browserActionsURI != null)		{			browserActions = new ActionSet(this,null,null,				cache.browserActionsURI);			browserActions.load();			VFSBrowser.getActionContext().addActionSet(browserActions);			cache.cachedBrowserActionNames =				browserActions.getCacheableActionNames();			cache.cachedBrowserActionToggleFlags = new boolean[				cache.cachedBrowserActionNames.length];			for(int i = 0;				i < cache.cachedBrowserActionNames.length;				i++)			{				 cache.cachedBrowserActionToggleFlags[i]				 	= jEdit.getBooleanProperty(					cache.cachedBrowserActionNames[i]					+ ".toggle");			}		}		if(dockablesURI != null)		{			DockableWindowManager.loadDockableWindows(this,				dockablesURI,cache);		}		if(actions.size() != 0)		{			if(label != null)			{				actions.setLabel(jEdit.getProperty(					"action-set.plugin",					new String[] { label }));			}			else				actionsPresentButNotCoreClass();			jEdit.addActionSet(actions);		}		if(servicesURI != null)		{			ServiceManager.loadServices(this,servicesURI,cache);		}		return cache;	} //}}}	//{{{ startPlugin() method	private void startPlugin()	{		try		{			plugin.start();		}		catch(Throwable t)		{			breakPlugin();			Log.log(Log.ERROR,PluginJAR.this,				"Error while starting plugin " + plugin.getClassName());			Log.log(Log.ERROR,PluginJAR.this,t);			String[] args = { t.toString() };			jEdit.pluginError(path,"plugin-error.start-error",args);		}		if(plugin instanceof EBPlugin)		{			if(jEdit.getProperty("plugin."				+ plugin.getClassName() + ".activate")				== null)			{				// old plugins expected jEdit 4.1-style				// behavior, where a PropertiesChanged				// was sent after plugins were started				((EBComponent)plugin).handleMessage(					new org.gjt.sp.jedit.msg.PropertiesChanged(null));			}			EditBus.addToBus((EBPlugin)plugin);		}		// buffers retain a reference to the fold handler in		// question... and the easiest way to handle fold		// handler loading is this...		Buffer buffer = jEdit.getFirstBuffer();		while(buffer != null)		{			FoldHandler handler =				FoldHandler.getFoldHandler(				buffer.getStringProperty("folding"));			// == null before loaded			if(buffer.getFoldHandler() != null				&& handler != null				&& handler != buffer.getFoldHandler())			{				buffer.setFoldHandler(handler);			}			buffer = buffer.getNext();		}	} //}}}	//{{{ startPluginLater() method	private void startPluginLater()	{		SwingUtilities.invokeLater(new Runnable()		{			public void run()			{				if(!activated)					return;				startPlugin();			}		});	} //}}}	//{{{ breakPlugin() method	private void breakPlugin()	{		plugin = new EditPlugin.Broken(plugin.getClassName());		plugin.jar = (EditPlugin.JAR)this;		// remove action sets, dockables, etc so that user doesn't		// see the broken plugin		uninit(false);		// but we want properties to hang around		jEdit.addPluginProps(properties);	} //}}}	//}}}	//{{{ PluginCacheEntry class	/**	 * Used by the <code>DockableWindowManager</code> and	 * <code>ServiceManager</code> to handle caching.	 * @since jEdit 4.2pre1	 */	public static class PluginCacheEntry	{		public static final int MAGIC = 0xB7A2E420;		//{{{ Instance variables		public PluginJAR plugin;		public long modTime;		public String[] classes;		public URL actionsURI;		public String[] cachedActionNames;		public boolean[] cachedActionToggleFlags;		public URL browserActionsURI;		public String[] cachedBrowserActionNames;		public boolean[] cachedBrowserActionToggleFlags;		public URL dockablesURI;		public String[] cachedDockableNames;		public boolean[] cachedDockableActionFlags;		public URL servicesURI;		public ServiceManager.Descriptor[] cachedServices;		public Properties cachedProperties;		public String pluginClass;		//}}}		/* read() and write() must be kept perfectly in sync...		 * its a very simple file format. doing it this way is		 * faster than serializing since serialization calls		 * reflection, etc. */		//{{{ read() method		public boolean read(DataInputStream din) throws IOException		{			int cacheMagic = din.readInt();			if(cacheMagic != MAGIC)				return false;			String cacheBuild = readString(din);			if(!cacheBuild.equals(jEdit.getBuild()))				return false;			long cacheModTime = din.readLong();			if(cacheModTime != modTime)				return false;			actionsURI = readURI(din);			cachedActionNames = readStringArray(din);			cachedActionToggleFlags = readBooleanArray(din);			browserActionsURI = readURI(din);			cachedBrowserActionNames = readStringArray(din);			cachedBrowserActionToggleFlags = readBooleanArray(din);			dockablesURI = readURI(din);			cachedDockableNames = readStringArray(din);			cachedDockableActionFlags = readBooleanArray(din);			servicesURI = readURI(din);			int len = din.readInt();			if(len == 0)				cachedServices = null;			else			{				cachedServices = new ServiceManager.Descriptor[len];				for(int i = 0; i < len; i++)				{					ServiceManager.Descriptor d = new						ServiceManager.Descriptor(						readString(din),						readString(din),						null,						plugin);					cachedServices[i] = d;				}			}			classes = readStringArray(din);			cachedProperties = readMap(din);			pluginClass = readString(din);			return true;		} //}}}		//{{{ write() method		public void write(DataOutputStream dout) throws IOException		{			dout.writeInt(MAGIC);			writeString(dout,jEdit.getBuild());			dout.writeLong(modTime);			writeString(dout,actionsURI);			writeStringArray(dout,cachedActionNames);			writeBooleanArray(dout,cachedActionToggleFlags);			writeString(dout,browserActionsURI);			writeStringArray(dout,cachedBrowserActionNames);			writeBooleanArray(dout,cachedBrowserActionToggleFlags);			writeString(dout,dockablesURI);			writeStringArray(dout,cachedDockableNames);			writeBooleanArray(dout,cachedDockableActionFlags);			writeString(dout,servicesURI);			if(cachedServices == null)				dout.writeInt(0);			else			{				dout.writeInt(cachedServices.length);				for(int i = 0; i < cachedServices.length; i++)				{					writeString(dout,cachedServices[i].clazz);					writeString(dout,cachedServices[i].name);				}			}			writeStringArray(dout,classes);			writeMap(dout,cachedProperties);			writeString(dout,pluginClass);		} //}}}		//{{{ Private members		//{{{ readString() method		private String readString(DataInputStream din)			throws IOException		{			int len = din.readInt();			if(len == 0)				return null;			char[] str = new char[len];			for(int i = 0; i < len; i++)				str[i] = din.readChar();			return new String(str);		} //}}}		//{{{ readURI() method		private URL readURI(DataInputStream din)			throws IOException		{			String str = readString(din);			if(str == null)				return null;			else				return new URL(str);		} //}}}		//{{{ readStringArray() method		private String[] readStringArray(DataInputStream din)			throws IOException		{			int len = din.readInt();			if(len == 0)				return null;			String[] str = new String[len];			for(int i = 0; i < len; i++)			{				str[i] = readString(din);			}			return str;		} //}}}		//{{{ readBooleanArray() method		private boolean[] readBooleanArray(DataInputStream din)			throws IOException		{			int len = din.readInt();			if(len == 0)				return null;			boolean[] bools = new boolean[len];			for(int i = 0; i < len; i++)			{				bools[i] = din.readBoolean();			}			return bools;		} //}}}		//{{{ readMap() method		private Properties readMap(DataInputStream din)			throws IOException		{			Properties returnValue = new Properties();			int count = din.readInt();			for(int i = 0; i < count; i++)			{				String key = readString(din);				String value = readString(din);				if(value == null)					value = "";				returnValue.put(key,value);			}			return returnValue;		} //}}}		//{{{ writeString() method		private void writeString(DataOutputStream dout,			Object obj) throws IOException		{			if(obj == null)			{				dout.writeInt(0);			}			else			{				String str = obj.toString();				dout.writeInt(str.length());				dout.writeChars(str);			}		} //}}}		//{{{ writeStringArray() method		private void writeStringArray(DataOutputStream dout,			String[] str) throws IOException		{			if(str == null)			{				dout.writeInt(0);			}			else			{				dout.writeInt(str.length);				for(int i = 0; i < str.length; i++)				{					writeString(dout,str[i]);				}			}		} //}}}		//{{{ writeBooleanArray() method		private void writeBooleanArray(DataOutputStream dout,			boolean[] bools) throws IOException		{			if(bools == null)			{				dout.writeInt(0);			}			else			{				dout.writeInt(bools.length);				for(int i = 0; i < bools.length; i++)				{					dout.writeBoolean(bools[i]);				}			}		} //}}}		//{{{ writeMap() method		private void writeMap(DataOutputStream dout, Map map)			throws IOException		{			dout.writeInt(map.size());			Iterator iter = map.keySet().iterator();			while(iter.hasNext())			{				String key = (String)iter.next();				writeString(dout,key);				writeString(dout,map.get(key));			}		} //}}}		//}}}	} //}}}}

⌨️ 快捷键说明

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