/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.lang.xpath;
import net.sourceforge.pmd.lang.Language;
import net.sourceforge.pmd.lang.LanguageRegistry;
import net.sourceforge.pmd.lang.LanguageVersion;
import net.sourceforge.pmd.lang.LanguageVersionHandler;
import net.sf.saxon.sxpath.IndependentContext;
/**
* This class serves as the means to perform XPath related static
* initialization. For example, initializing custom Jaxen Functions.
* Initialization should be performed before any XPath related operations are
* performed.
*/
public class Initializer {
private Initializer() { }
/**
* Perform all initialization.
*/
public static void initialize() {
// noop as initialization is done in static block below
}
/**
* Perform all initialization.
*/
public static void initialize(IndependentContext context) {
context.declareNamespace("pmd", "java:" + PMDFunctions.class.getName());
for (Language language : LanguageRegistry.getLanguages()) {
for (LanguageVersion languageVersion : language.getVersions()) {
LanguageVersionHandler languageVersionHandler = languageVersion.getLanguageVersionHandler();
if (languageVersionHandler != null) {
languageVersionHandler.getXPathHandler().initialize(context);
}
}
}
}
static {
initializeGlobal();
initializeLanguages();
}
private static void initializeGlobal() {
MatchesFunction.registerSelfInSimpleContext();
}
private static void initializeLanguages() {
for (Language language : LanguageRegistry.getLanguages()) {
for (LanguageVersion languageVersion : language.getVersions()) {
LanguageVersionHandler languageVersionHandler = languageVersion.getLanguageVersionHandler();
if (languageVersionHandler != null) {
languageVersionHandler.getXPathHandler().initialize();
}
}
}
}
}