java.lang.Object
org.gjt.sp.jedit.PluginJAR
Loads and unloads plugins.
JAR file contents
When loading a plugin, jEdit looks for the following resources:- A file named
actions.xml
defining plugin actions. Only one such file per plugin is allowed. SeeActionSet
for syntax. - A file named
browser.actions.xml
defining file system browser actions. Only one such file per plugin is allowed. SeeActionSet
for syntax. - A file named
dockables.xml
defining dockable windows. Only one such file per plugin is allowed. SeeDockableWindowManager
for syntax. - A file named
services.xml
defining additional services offered by the plugin, such as virtual file systems. Only one such file per plugin is allowed. SeeServiceManager
for syntax. - File with extension
.props
containing name/value pairs separated by an equals sign. A plugin can supply any number of property files. Property files are used to define plugin men items, plugin option panes, as well as arbitriary settings and strings used by the plugin. SeeEditPlugin
for information about properties used by jEdit. Seejava.util.Properties
for property file syntax. - Since jEdit 5.0, files named lang_[language_iso_code].properties are localization files. If one of those files match the current language, jEdit will load it. If a label is missing in the localization file, it will be loaded from the other .props files. Those files will be ignored by jEdit's versions older than 5.0 and do not cause any problem See jEdit's localization wiki
Plugin
.
This class, known as the plugin core class must extend
EditPlugin
and define a few required properties, otherwise it is
ignored.
Dynamic and deferred loading
Unlike in prior jEdit versions, jEdit 4.2 and later allow plugins to be added and removed to the resident set at any time using thejEdit.addPluginJAR(String)
and
jEdit.removePluginJAR(PluginJAR,boolean)
methods. Furthermore, the
plugin core class might not be loaded until the plugin is first used. See
EditPlugin.start()
for a full description.- Since:
- jEdit 4.2pre1
- Version:
- $Id: PluginJAR.java 25239 2020-04-14 20:00:17Z kpouer $
- Author:
- Slava Pestov
- See Also:
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
Used by theDockableWindowManager
andServiceManager
to handle caching. -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
Loads the plugin core class.void
Should be called after a new plugin is installed.boolean
Returns true if all dependencies are satisified, false otherwise.void
deactivatePlugin
(boolean exit) Unloads the plugin core class.static String
findPlugin
(String className) Unlike getPlugin(), will return a PluginJAR that is not yet loaded, given its classname.Returns the plugin's action set for the jEdit action contextjEdit.getActionContext()
.String[]
Returns the plugin's action set for the file system browser action contextVFSBrowser.getActionContext()
.Returns the full path name of this plugin's summary file.Returns the plugin's class loader.getDependencies
(String classname) Returns a list of dependencies by searching the plugin properties.getDependencySet
(String className) String[]
Returns the location of the plugin'sdockables.xml
file.getFile()
Returns a file pointing to the plugin JAR.getFiles()
Get the files listed in this plugin and return full paths to themgetJars()
Get the jars listed in this plugin and return full paths to themgetOptionalDependencies
(String classname) Returns a list of optional dependencies by searching the plugin properties.String[]
getPath()
Returns the full path name of this plugin's JAR file.Returns the plugin core class for this JAR file.static PluginJAR.PluginCacheEntry
getPluginCache
(PluginJAR plugin) static PluginJAR.PluginCacheEntry
getPluginCacheEntry
(String path) Returns the cache entry for an installed but not loaded plugin.Returns the required jars of this plugin.String[]
Returns the location of the plugin'sservices.xml
file.Returns the plugin's JAR file, opening it if necessary.boolean
init()
static PluginJAR
Loads a plugin, and its dependent plugins if necessary.static Collection<String>
parseJarsFilesString
(String path, String jarsString) parse the files listed in plugin.CLASSNAME.jars or plugin.CLASSNAME.files and return full paths to each file of the list.static Collection<String>
parseJarsFilesStringNames
(String jarsString) parse the files listed in plugin.CLASSNAME.jars or plugin.CLASSNAME.files and return them as a collectiontoString()
static void
transitiveClosure
(String[] dependents, List<String> listModel) If plugin A is needed by B, and B is needed by C, we want to tell the user that A is needed by B and C when they try to unload A.void
uninit
(boolean exit)
-
Constructor Details
-
PluginJAR
Creates a PluginJAR object which is not necessarily loaded, but can be later.- See Also:
-
-
Method Details
-
load
Loads a plugin, and its dependent plugins if necessary.- Since:
- jEdit 4.3pre7
-
parseJarsFilesString
parse the files listed in plugin.CLASSNAME.jars or plugin.CLASSNAME.files and return full paths to each file of the list.- Since:
- jEdit 5.3pre1
-
parseJarsFilesStringNames
parse the files listed in plugin.CLASSNAME.jars or plugin.CLASSNAME.files and return them as a collection- Since:
- jEdit 5.3pre1
-
getJars
Get the jars listed in this plugin and return full paths to them- Returns:
- jars full paths or empty collection if plugin is null
- Since:
- jEdit 5.3pre1
-
getFiles
Get the files listed in this plugin and return full paths to them- Returns:
- files full paths or empty collection if plugin is null
- Since:
- jEdit 5.3pre1
-
getPath
Returns the full path name of this plugin's JAR file. -
findPlugin
Unlike getPlugin(), will return a PluginJAR that is not yet loaded, given its classname.- Parameters:
className
- a class name- Returns:
- the JARpath of the first PluginJAR it can find which contains this className, or null if not found.
- Since:
- 4.3pre7
-
getCachePath
Returns the full path name of this plugin's summary file. The summary file is used to store certain information which allows loading of the plugin's resources and core class to be deferred until the plugin is first used. As long as a plugin is using the jEdit 4.2 plugin API, no extra effort is required to take advantage of the summary cache. -
getDependencySet
- Parameters:
className
- of a plugin that we wish to load- Returns:
- an ordered set of JARpaths that contains the plugins that need to be (re)loaded, in the correct order.
-
getFile
Returns a file pointing to the plugin JAR. -
getClassLoader
Returns the plugin's class loader. -
getZipFile
Returns the plugin's JAR file, opening it if necessary.- Throws:
IOException
- Since:
- jEdit 4.2pre1
-
getActionSet
Returns the plugin's action set for the jEdit action contextjEdit.getActionContext()
. These actions are loaded from theactions.xml
file; seeActionSet
. .- Since:
- jEdit 4.2pre1
-
getBrowserActionSet
Returns the plugin's action set for the file system browser action contextVFSBrowser.getActionContext()
. These actions are loaded from thebrowser.actions.xml
file; seeActionSet
. .- Since:
- jEdit 4.2pre1
-
checkDependencies
public boolean checkDependencies()Returns true if all dependencies are satisified, false otherwise. Also if dependencies are not satisfied, the plugin is marked as "broken". -
getRequiredJars
Returns the required jars of this plugin.- Returns:
- the required jars of this plugin
- Since:
- jEdit 4.3pre12
-
getDependencies
@Nonnull public static Set<String> getDependencies(String classname) throws IllegalArgumentException Returns a list of dependencies by searching the plugin properties.- Parameters:
classname
- The classname of a plugin- Returns:
- A list of classnames of plugins the plugin depends on.
- Throws:
IllegalArgumentException
-
getOptionalDependencies
Returns a list of optional dependencies by searching the plugin properties.- Parameters:
classname
- The classname of a plugin- Returns:
- A list of classnames of plugins the plugin optionally depends on.
- Throws:
IllegalArgumentException
-
transitiveClosure
If plugin A is needed by B, and B is needed by C, we want to tell the user that A is needed by B and C when they try to unload A.- Parameters:
dependents
- a set of plugins which we wish to disablelistModel
- a set of plugins which will be affected, and will need to be disabled also.
-
getDependentPlugins
- Returns:
- an array of plugin names that have a hard dependency on this plugin
-
getOptionallyDependentPlugins
- Returns:
- an array of plugin names that have an optional dependency on this plugin
-
getAllDependentPlugins
- Returns:
- an array of plugin names that have a dependency or an optional dependency on this plugin,
this returns a combination of
getDependentPlugins
andgetOptionallyDependentPlugins
.
-
getPlugin
Returns the plugin core class for this JAR file. Note that if the plugin has not been activated, this will return an instance ofEditPlugin.Deferred
. If you need the actual plugin core class instance, callactivatePlugin()
first. If the plugin is not yet loaded, returns null- Since:
- jEdit 4.2pre1
-
activatePlugin
public void activatePlugin()Loads the plugin core class. Does nothing if the plugin core class has already been loaded. This method might be called on startup, depending on what properties are set. SeeEditPlugin.start()
. This method is thread-safe.- Since:
- jEdit 4.2pre1
-
activatePluginIfNecessary
public void activatePluginIfNecessary()Should be called after a new plugin is installed.- Since:
- jEdit 4.2pre2
-
deactivatePlugin
public void deactivatePlugin(boolean exit) Unloads the plugin core class. Does nothing if the plugin core class has not been loaded. This method can only be called from the AWT event dispatch thread!- Since:
- jEdit 4.2pre3
- See Also:
-
getDockablesURI
Returns the location of the plugin'sdockables.xml
file.- Since:
- jEdit 4.2pre1
-
getServicesURI
Returns the location of the plugin'sservices.xml
file.- Since:
- jEdit 4.2pre1
-
toString
-
getPluginCache
-
getPluginCacheEntry
Returns the cache entry for an installed but not loaded plugin. There is no need to use this method if the plugin is loaded.- Parameters:
path
- path to the the plugin jar- Returns:
- cache entry or null
- Throws:
IOException
- if jEdit cannot generate cache- Since:
- jEdit 5.3pre1
-
init
public boolean init() -
uninit
public void uninit(boolean exit) -
getResources
-
generateCache
- Throws:
IOException
-