This is an automated email from the git hooks/post-receive script. ben pushed a commit to branch master in repository autocomplete.
commit 99c13732b13be757bbd3161c757e10daa8d6508c Author: bobbylight <[email protected]> Date: Tue May 18 12:50:08 2010 +0000 Can now pass a different classloader for CompletionXMLParser to use for custom FunctionCompletions, etc., if necessary. Fixed Java completion bug - fields & methods sometimes didn't return correct containing type. Perl completion now only uses system perldoc if Perl home is set AND "use perldoc" option is also set. --- .../fife/ui/autocomplete/CompletionXMLParser.java | 67 ++++++++++++++++++-- .../ui/autocomplete/DefaultCompletionProvider.java | 18 +++++- 2 files changed, 80 insertions(+), 5 deletions(-) diff --git a/src/org/fife/ui/autocomplete/CompletionXMLParser.java b/src/org/fife/ui/autocomplete/CompletionXMLParser.java index 3451c1d..c7b5c09 100644 --- a/src/org/fife/ui/autocomplete/CompletionXMLParser.java +++ b/src/org/fife/ui/autocomplete/CompletionXMLParser.java @@ -51,6 +51,13 @@ public class CompletionXMLParser extends DefaultHandler { */ private CompletionProvider provider; + /** + * The completion provider to use when loading classes, such as custom + * {@link FunctionCompletion}s. + */ + private ClassLoader completionCL; + + private String name; private String type; private String returnType; @@ -80,6 +87,14 @@ public class CompletionXMLParser extends DefaultHandler { */ private String funcCompletionType; + /** + * The class loader to use to load custom completion classes, such as + * the one defined by {@link #funcCompletionType}. If this is + * <code>null</code>, then a default class loader is used. This field + * will usually be <code>null</code>. + */ + private static ClassLoader DEFAULT_COMPLETION_CLASS_LOADER; + /** * Constructor. @@ -88,7 +103,27 @@ public class CompletionXMLParser extends DefaultHandler { * @see #reset(CompletionProvider) */ public CompletionXMLParser(CompletionProvider provider) { + this(provider, null); + } + + + /** + * Constructor. + * + * @param provider The provider to get completions for. + * @param cl The class loader to use, if necessary, when loading classes + * from the XML (custom {@link FunctionCompletion}s, for example). + * This may be <code>null</code> if the default is to be used, or + * if the XML does not define specific classes for completion types. + * @see #reset(CompletionProvider) + */ + public CompletionXMLParser(CompletionProvider provider, ClassLoader cl) { this.provider = provider; + this.completionCL = cl; + if (completionCL==null) { + // May also be null, but that's okay. + completionCL = DEFAULT_COMPLETION_CLASS_LOADER; + } completions = new ArrayList(); params = new ArrayList(1); desc = new StringBuffer(); @@ -120,7 +155,14 @@ public class CompletionXMLParser extends DefaultHandler { FunctionCompletion fc = null; if (funcCompletionType!=null) { try { - Class clazz = Class.forName(funcCompletionType); + Class clazz = null; + if (completionCL!=null) { + clazz = Class.forName(funcCompletionType, true, + completionCL); + } + else { + clazz = Class.forName(funcCompletionType); + } Class[] paramTypes = { CompletionProvider.class, String.class, String.class }; Constructor c = clazz.getDeclaredConstructor(paramTypes); @@ -129,11 +171,11 @@ public class CompletionXMLParser extends DefaultHandler { } catch (RuntimeException re) { // FindBugs throw re; } catch (Exception e) { - throw new RuntimeException( - "Problem with custom FunctionCompletion: " + e.toString()); + e.printStackTrace(); } } - else { + + if (fc==null) { // Fallback if completion failed for some reason fc = new FunctionCompletion(provider, name, returnType); } @@ -147,7 +189,9 @@ public class CompletionXMLParser extends DefaultHandler { fc.setReturnValueDescription(returnValDesc.toString()); returnValDesc.setLength(0); } + return fc; + } @@ -319,6 +363,21 @@ public class CompletionXMLParser extends DefaultHandler { /** + * Sets the class loader to use when loading custom classes to use for + * various {@link Completion} types, such as {@link FunctionCompletion}s, + * from XML.<p> + * + * Users should very rarely have a need to use this method. + * + * @param cl The class loader to use. If this is <code>null</code>, then + * a default is used. + */ + public static void setDefaultCompletionClassLoader(ClassLoader cl) { + DEFAULT_COMPLETION_CLASS_LOADER = cl; + } + + + /** * Called when an element starts. */ public void startElement(String uri, String localName, String qName, diff --git a/src/org/fife/ui/autocomplete/DefaultCompletionProvider.java b/src/org/fife/ui/autocomplete/DefaultCompletionProvider.java index eaf6891..c0324be 100644 --- a/src/org/fife/ui/autocomplete/DefaultCompletionProvider.java +++ b/src/org/fife/ui/autocomplete/DefaultCompletionProvider.java @@ -307,11 +307,27 @@ public class DefaultCompletionProvider extends AbstractCompletionProvider { * @throws IOException If an IO error occurs. */ public void loadFromXML(InputStream in) throws IOException { + loadFromXML(in, null); + } + + + /** + * Loads completions from an XML input stream. The XML should validate + * against the completion XML schema. + * + * @param in The input stream to read from. + * @param cl The class loader to use when loading any extra classes defined + * in the XML, such as custom {@link FunctionCompletion}s. This + * may be <code>null</code> if the default is to be used, or if no + * custom completions are defined in the XML. + * @throws IOException If an IO error occurs. + */ + public void loadFromXML(InputStream in, ClassLoader cl) throws IOException { //long start = System.currentTimeMillis(); SAXParserFactory factory = SAXParserFactory.newInstance(); - CompletionXMLParser handler = new CompletionXMLParser(this); + CompletionXMLParser handler = new CompletionXMLParser(this, cl); BufferedInputStream bin = new BufferedInputStream(in); try { SAXParser saxParser = factory.newSAXParser(); -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/autocomplete.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

