Changeset 14239


Ignore:
Timestamp:
11/09/12 17:28:12 (8 years ago)
Author:
Mark Evenson
Message:

Fixes #229 so that JCALL works with static member classes.

Added non-working test to putative JSS test suite.

Location:
trunk/abcl
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/contrib/jss/jss.asd

    r14234 r14239  
    22(asdf:defsystem :jss
    33  :author "Alan Ruttenberg, Mark Evenson"
    4   :version "3.0.4"
    5   :components
    6   ((:module base
    7             :pathname "" :serial t
    8             :components ((:file "packages")
    9                          (:file "invoke")
    10                          (:file "classpath")
    11                          (:file "compat")))))
     4  :version "3.0.5"
     5  :components ((:module base
     6                        :pathname "" :serial t
     7                        :components ((:file "packages")
     8                                     (:file "invoke")
     9                                     (:file "classpath")
     10                                     (:file "compat")))))
     11
     12#+nil FIXME
     13(asdf:defsystem :jss-tests
     14  :depends-on (jss abcl abcl-test-lisp)
     15  :components ((:module tests
     16                        :pathname ""
     17                        :components ((:file "tests")))))
    1218
    1319
  • trunk/abcl/contrib/jss/tests.lisp

    r13940 r14239  
    1313  "234")
    1414
     15;;; http://trac.common-lisp.net/armedbear/ticket/229
     16(deftest jss.jcall.1
     17    (let* ((headers (#"getHeaderFields"
     18                    (#"openConnection"
     19                     (jss::new 'java.net.url "http://google.com"))))
    1520
     21           (second-header (#"get" *headers*
     22                                  (second (jss::set-to-list (#"keySet"
     23                                  *headers*))))))
     24      (#"size" *ural*))
     25-1)
     26
     27
  • trunk/abcl/src/org/armedbear/lisp/Java.java

    r14218 r14239  
    889889                    methodArgs[i-2] = arg.javaInstance(argTypes[i-2]);
    890890            }
     891            if (!method.isAccessible()) {
     892                 // Possible for static member classes: see #229
     893                 if (Modifier.isPublic(method.getModifiers())) {
     894                    method.setAccessible(true);
     895                 }
     896      }
    891897            return JavaObject.getInstance(method.invoke(instance, methodArgs),
    892898                                          translate,
     
    962968        if(method == null) {
    963969            actualClass = instance.getClass();
    964             if(intendedClass != actualClass &&
    965                Modifier.isPublic(actualClass.getModifiers())) {
     970            if(intendedClass != actualClass) {
    966971                method = findMethod(actualClass, methodName, methodArgs);
     972    if (method != null) {
     973       if (isMethodCallableOnInstance(actualClass, method)) {
     974          return method;
     975       }
     976    }
    967977            }
    968978        }
    969979        return method;
     980    }
     981   
     982    private static boolean isMethodCallableOnInstance(Class instance, Method method) {
     983       if (Modifier.isPublic(method.getModifiers())) {
     984    return true;
     985       }
     986       if (instance.isMemberClass()) {
     987    return isMethodCallableOnInstance(instance.getEnclosingClass(), method);
     988       }
     989       return false;
    970990    }
    971991
Note: See TracChangeset for help on using the changeset viewer.