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

Reply via email to