[usocket-devel] [usocket-cvs] r553 - in usocket/trunk: . backend vendor

Chun Tian (binghe) binghe.lisp at gmail.com
Tue Jul 20 11:44:59 UTC 2010


Hi, Erik

If I remove JDI stuff, where can I find those JDI functions (do-jmethod-call, ...)? ABCL supply them now?

Regards,

Chun Tian (binghe)

在 2010-7-20,18:49, Erik Huelsmann 写道:

> Hi Chun,
> 
> I think the JDI stuff I added way back when, isn't needed anymore. You
> could try removing it. Before, it wasn't always possible to
> dynamically determine retrieve a method from a JavaObject. Now, since
> it has an IntendedClass slot, the information that JDI was trying to
> capture, has been added to the base JavaObject class.
> 
> If you want, I can help to phase out JDI.
> 
> With kind regards,
> 
> 
> Erik.
> 
> On Tue, Jul 20, 2010 at 7:48 AM, Chun Tian <ctian at common-lisp.net> wrote:
>> Author: ctian
>> Date: Tue Jul 20 01:48:39 2010
>> New Revision: 553
>> 
>> Log:
>> ABCL: move JDI into vendor directory.
>> 
>> Added:
>>   usocket/trunk/vendor/abcl-jdi.lisp   (contents, props changed)
>> Modified:
>>   usocket/trunk/backend/armedbear.lisp
>>   usocket/trunk/usocket.asd
>> 
>> Modified: usocket/trunk/backend/armedbear.lisp
>> ==============================================================================
>> --- usocket/trunk/backend/armedbear.lisp        (original)
>> +++ usocket/trunk/backend/armedbear.lisp        Tue Jul 20 01:48:39 2010
>> @@ -5,178 +5,6 @@
>> 
>>  (in-package :usocket)
>> 
>> -
>> -;;; Proposed contribution to the JAVA package
>> -
>> -(defpackage :jdi
>> -  (:use :cl)
>> -  (:export #:jcoerce
>> -           #:jop-deref
>> -           #:do-jmethod-call
>> -           #:do-jmethod
>> -           #:do-jstatic-call
>> -           #:do-jstatic
>> -           #:do-jnew-call
>> -           #:do-jfield
>> -           #:jequals))
>> -;; but still requires the :java package.
>> -
>> -(in-package :jdi)
>> -
>> -(defstruct (java-object-proxy (:conc-name :jop-)
>> -                              :copier)
>> -  value
>> -  class)
>> -
>> -(defvar *jm-get-return-type*
>> -  (java:jmethod "java.lang.reflect.Method" "getReturnType"))
>> -
>> -(defvar *jf-get-type*
>> -  (java:jmethod "java.lang.reflect.Field" "getType"))
>> -
>> -(defvar *jc-get-declaring-class*
>> -  (java:jmethod "java.lang.reflect.Constructor" "getDeclaringClass"))
>> -
>> -(declaim (inline make-return-type-proxy))
>> -(defun make-return-type-proxy (jmethod jreturned-value)
>> -  (if (java:java-object-p jreturned-value)
>> -      (let ((rt (java:jcall *jm-get-return-type* jmethod)))
>> -        (make-java-object-proxy :value jreturned-value
>> -                                :class rt))
>> -    jreturned-value))
>> -
>> -(defun make-field-type-proxy (jfield jreturned-value)
>> -  (if (java:java-object-p jreturned-value)
>> -      (let ((rt (java:jcall *jf-get-type* jfield)))
>> -        (make-java-object-proxy :value jreturned-value
>> -                                :class rt))
>> -    jreturned-value))
>> -
>> -(defun make-constructor-type-proxy (jconstructor jreturned-value)
>> -  (if (java:java-object-p jreturned-value)
>> -      (let ((rt (java:jcall *jc-get-declaring-class* jconstructor)))
>> -        (make-java-object-proxy :value jreturned-value
>> -                                :class rt))
>> -    jreturned-value))
>> -
>> -(defun jcoerce (instance &optional output-type-spec)
>> -  (cond
>> -   ((java-object-proxy-p instance)
>> -    (let ((new-instance (copy-structure (the java-object-proxy instance))))
>> -      (setf (jop-class new-instance)
>> -            (java:jclass output-type-spec))
>> -      new-instance))
>> -   ((java:java-object-p instance)
>> -    (make-java-object-proxy :class (java:jclass output-type-spec)
>> -                            :value instance))
>> -   ((stringp instance)
>> -    (make-java-object-proxy :class "java.lang.String"
>> -                            :value instance))
>> -   ((keywordp output-type-spec)
>> -    ;; all that remains is creating an immediate type...
>> -    (let ((jval (java:make-immediate-object instance output-type-spec)))
>> -      (make-java-object-proxy :class output-type-spec
>> -                              :value jval)))
>> -   ))
>> -
>> -(defun jtype-of (instance) ;;instance must be a jop
>> -  (cond
>> -   ((stringp instance)
>> -    "java.lang.String")
>> -   ((keywordp (jop-class instance))
>> -    (string-downcase (symbol-name (jop-class instance))))
>> -   (t
>> -    (java:jclass-name (jop-class instance)))))
>> -
>> -(declaim (inline jop-deref))
>> -(defun jop-deref (instance)
>> -  (if (java-object-proxy-p instance)
>> -      (jop-value instance)
>> -    instance))
>> -
>> -(defun java-value-and-class (object)
>> -  (values (jop-deref object)
>> -          (jtype-of object)))
>> -
>> -(defun do-jmethod-call (object method-name &rest arguments)
>> -  (multiple-value-bind
>> -      (instance class-name)
>> -      (java-value-and-class object)
>> -    (let* ((argument-types (mapcar #'jtype-of arguments))
>> -           (jm (apply #'java:jmethod class-name method-name argument-types))
>> -           (rv (apply #'java:jcall jm instance
>> -                      (mapcar #'jop-deref arguments))))
>> -      (make-return-type-proxy jm rv))))
>> -
>> -(defun do-jstatic-call (class-name method-name &rest arguments)
>> -  (let* ((argument-types (mapcar #'jtype-of arguments))
>> -         (jm (apply #'java:jmethod class-name method-name argument-types))
>> -         (rv (apply #'java:jstatic jm (java:jclass class-name)
>> -                    (mapcar #'jop-deref arguments))))
>> -    (make-return-type-proxy jm rv)))
>> -
>> -(defun do-jnew-call (class-name &rest arguments)
>> -  (let* ((argument-types (mapcar #'jtype-of arguments))
>> -         (jm (apply #'java:jconstructor class-name argument-types))
>> -         (rv (apply #'java:jnew jm (mapcar #'jop-deref arguments))))
>> -    (make-constructor-type-proxy jm rv)))
>> -
>> -(defun do-jfield (class-or-instance-or-name field-name)
>> -  (let* ((class (cond
>> -                 ((stringp class-or-instance-or-name)
>> -                  (java:jclass class-or-instance-or-name))
>> -                 ((java:java-object-p class-or-instance-or-name)
>> -                  (java:jclass-of class-or-instance-or-name))
>> -                 ((java-object-proxy-p class-or-instance-or-name)
>> -                  (java:jclass (jtype-of class-or-instance-or-name)))))
>> -         (jf (java:jcall (java:jmethod "java.lang.Class" "getField"
>> -                                       "java.lang.String")
>> -                         class field-name)))
>> -    (make-field-type-proxy jf
>> -                           (java:jfield class field-name)))) ;;class))))
>> -
>> -(defmacro do-jstatic (&rest arguments)
>> -  `(do-jstatic-call , at arguments))
>> -
>> -(defmacro do-jmethod (&rest arguments)
>> -  `(do-jmethod-call , at arguments))
>> -
>> -;;
>> -
>> -(defmacro jstatic-call (class-name (method-name &rest arg-spec)
>> -                                   &rest args)
>> -  (let ((class-sym (gensym)))
>> -    `(let ((,class-sym ,class-name))
>> -       (java:jstatic
>> -        (java:jmethod ,class-sym ,method-name , at arg-spec)
>> -        (java:jclass ,class-sym) , at args))))
>> -
>> -(defmacro jmethod-call (instance-and-class (method &rest arg-spec) &rest args)
>> -  (let ((isym (gensym)))
>> -    (multiple-value-bind
>> -        (instance class-name)
>> -        (if (listp instance-and-class)
>> -            (values (first instance-and-class)
>> -                    (second instance-and-class))
>> -          (values instance-and-class))
>> -      (when (null class-name)
>> -        (setf class-name `(java:jclass-name (java:jclass-of ,isym))))
>> -      `(let* ((,isym ,instance))
>> -         (java:jcall (java:jmethod ,class-name ,method , at arg-spec)
>> -                     ,isym , at args)))))
>> -
>> -(defun jequals (x y)
>> -  (do-jmethod-call (jcoerce x "java.lang.Object") "equals"
>> -                   (jcoerce y "java.lang.Object")))
>> -
>> -(defmacro jnew-call ((class &rest arg-spec) &rest args)
>> -  `(java:jnew (java:jconstructor ,class , at arg-spec)
>> -         , at args))
>> -
>> -
>> -
>> -(in-package :usocket)
>> -
>>  (defun get-host-name ()
>>   (jdi:do-jmethod-call (jdi:do-jstatic-call "java.net.InetAddress"
>>                                             "getLocalHost")
>> 
>> Modified: usocket/trunk/usocket.asd
>> ==============================================================================
>> --- usocket/trunk/usocket.asd   (original)
>> +++ usocket/trunk/usocket.asd   Tue Jul 20 01:48:39 2010
>> @@ -23,6 +23,7 @@
>>                  :components ((:file "split-sequence")
>>                               #+mcl (:file "kqueue")
>>                               #+openmcl (:file "ccl-send")
>> +                              #+armedbear (:file "abcl-jdi")
>>                                (:file "spawn-thread")))
>>                  (:file "usocket" :depends-on ("vendor"))
>>                  (:file "condition" :depends-on ("usocket"))
>> 
>> Added: usocket/trunk/vendor/abcl-jdi.lisp
>> ==============================================================================
>> --- (empty file)
>> +++ usocket/trunk/vendor/abcl-jdi.lisp  Tue Jul 20 01:48:39 2010
>> @@ -0,0 +1,170 @@
>> +;;;; $Id$
>> +;;;; $URL$
>> +
>> +;;;; Proposed contribution to the JAVA package, by Erik Huelsmann
>> +
>> +(defpackage :jdi
>> +  (:use :cl)
>> +  (:export #:jcoerce
>> +           #:jop-deref
>> +           #:do-jmethod-call
>> +           #:do-jmethod
>> +           #:do-jstatic-call
>> +           #:do-jstatic
>> +           #:do-jnew-call
>> +           #:do-jfield
>> +           #:jequals))
>> +
>> +;; but still requires the :java package.
>> +
>> +(in-package :jdi)
>> +
>> +(defstruct (java-object-proxy (:conc-name :jop-)
>> +                              :copier)
>> +  value
>> +  class)
>> +
>> +(defvar *jm-get-return-type*
>> +  (java:jmethod "java.lang.reflect.Method" "getReturnType"))
>> +
>> +(defvar *jf-get-type*
>> +  (java:jmethod "java.lang.reflect.Field" "getType"))
>> +
>> +(defvar *jc-get-declaring-class*
>> +  (java:jmethod "java.lang.reflect.Constructor" "getDeclaringClass"))
>> +
>> +(declaim (inline make-return-type-proxy))
>> +(defun make-return-type-proxy (jmethod jreturned-value)
>> +  (if (java:java-object-p jreturned-value)
>> +      (let ((rt (java:jcall *jm-get-return-type* jmethod)))
>> +        (make-java-object-proxy :value jreturned-value
>> +                                :class rt))
>> +    jreturned-value))
>> +
>> +(defun make-field-type-proxy (jfield jreturned-value)
>> +  (if (java:java-object-p jreturned-value)
>> +      (let ((rt (java:jcall *jf-get-type* jfield)))
>> +        (make-java-object-proxy :value jreturned-value
>> +                                :class rt))
>> +    jreturned-value))
>> +
>> +(defun make-constructor-type-proxy (jconstructor jreturned-value)
>> +  (if (java:java-object-p jreturned-value)
>> +      (let ((rt (java:jcall *jc-get-declaring-class* jconstructor)))
>> +        (make-java-object-proxy :value jreturned-value
>> +                                :class rt))
>> +    jreturned-value))
>> +
>> +(defun jcoerce (instance &optional output-type-spec)
>> +  (cond
>> +   ((java-object-proxy-p instance)
>> +    (let ((new-instance (copy-structure (the java-object-proxy instance))))
>> +      (setf (jop-class new-instance)
>> +            (java:jclass output-type-spec))
>> +      new-instance))
>> +   ((java:java-object-p instance)
>> +    (make-java-object-proxy :class (java:jclass output-type-spec)
>> +                            :value instance))
>> +   ((stringp instance)
>> +    (make-java-object-proxy :class "java.lang.String"
>> +                            :value instance))
>> +   ((keywordp output-type-spec)
>> +    ;; all that remains is creating an immediate type...
>> +    (let ((jval (java:make-immediate-object instance output-type-spec)))
>> +      (make-java-object-proxy :class output-type-spec
>> +                              :value jval)))
>> +   ))
>> +
>> +(defun jtype-of (instance) ;;instance must be a jop
>> +  (cond
>> +   ((stringp instance)
>> +    "java.lang.String")
>> +   ((keywordp (jop-class instance))
>> +    (string-downcase (symbol-name (jop-class instance))))
>> +   (t
>> +    (java:jclass-name (jop-class instance)))))
>> +
>> +(declaim (inline jop-deref))
>> +(defun jop-deref (instance)
>> +  (if (java-object-proxy-p instance)
>> +      (jop-value instance)
>> +    instance))
>> +
>> +(defun java-value-and-class (object)
>> +  (values (jop-deref object)
>> +          (jtype-of object)))
>> +
>> +(defun do-jmethod-call (object method-name &rest arguments)
>> +  (multiple-value-bind
>> +      (instance class-name)
>> +      (java-value-and-class object)
>> +    (let* ((argument-types (mapcar #'jtype-of arguments))
>> +           (jm (apply #'java:jmethod class-name method-name argument-types))
>> +           (rv (apply #'java:jcall jm instance
>> +                      (mapcar #'jop-deref arguments))))
>> +      (make-return-type-proxy jm rv))))
>> +
>> +(defun do-jstatic-call (class-name method-name &rest arguments)
>> +  (let* ((argument-types (mapcar #'jtype-of arguments))
>> +         (jm (apply #'java:jmethod class-name method-name argument-types))
>> +         (rv (apply #'java:jstatic jm (java:jclass class-name)
>> +                    (mapcar #'jop-deref arguments))))
>> +    (make-return-type-proxy jm rv)))
>> +
>> +(defun do-jnew-call (class-name &rest arguments)
>> +  (let* ((argument-types (mapcar #'jtype-of arguments))
>> +         (jm (apply #'java:jconstructor class-name argument-types))
>> +         (rv (apply #'java:jnew jm (mapcar #'jop-deref arguments))))
>> +    (make-constructor-type-proxy jm rv)))
>> +
>> +(defun do-jfield (class-or-instance-or-name field-name)
>> +  (let* ((class (cond
>> +                 ((stringp class-or-instance-or-name)
>> +                  (java:jclass class-or-instance-or-name))
>> +                 ((java:java-object-p class-or-instance-or-name)
>> +                  (java:jclass-of class-or-instance-or-name))
>> +                 ((java-object-proxy-p class-or-instance-or-name)
>> +                  (java:jclass (jtype-of class-or-instance-or-name)))))
>> +         (jf (java:jcall (java:jmethod "java.lang.Class" "getField"
>> +                                       "java.lang.String")
>> +                         class field-name)))
>> +    (make-field-type-proxy jf
>> +                           (java:jfield class field-name)))) ;;class))))
>> +
>> +(defmacro do-jstatic (&rest arguments)
>> +  `(do-jstatic-call , at arguments))
>> +
>> +(defmacro do-jmethod (&rest arguments)
>> +  `(do-jmethod-call , at arguments))
>> +
>> +;;
>> +
>> +(defmacro jstatic-call (class-name (method-name &rest arg-spec)
>> +                                   &rest args)
>> +  (let ((class-sym (gensym)))
>> +    `(let ((,class-sym ,class-name))
>> +       (java:jstatic
>> +        (java:jmethod ,class-sym ,method-name , at arg-spec)
>> +        (java:jclass ,class-sym) , at args))))
>> +
>> +(defmacro jmethod-call (instance-and-class (method &rest arg-spec) &rest args)
>> +  (let ((isym (gensym)))
>> +    (multiple-value-bind
>> +        (instance class-name)
>> +        (if (listp instance-and-class)
>> +            (values (first instance-and-class)
>> +                    (second instance-and-class))
>> +          (values instance-and-class))
>> +      (when (null class-name)
>> +        (setf class-name `(java:jclass-name (java:jclass-of ,isym))))
>> +      `(let* ((,isym ,instance))
>> +         (java:jcall (java:jmethod ,class-name ,method , at arg-spec)
>> +                     ,isym , at args)))))
>> +
>> +(defun jequals (x y)
>> +  (do-jmethod-call (jcoerce x "java.lang.Object") "equals"
>> +                   (jcoerce y "java.lang.Object")))
>> +
>> +(defmacro jnew-call ((class &rest arg-spec) &rest args)
>> +  `(java:jnew (java:jconstructor ,class , at arg-spec)
>> +         , at args))
>> 
>> _______________________________________________
>> usocket-cvs mailing list
>> usocket-cvs at common-lisp.net
>> http://common-lisp.net/cgi-bin/mailman/listinfo/usocket-cvs
>> 





More information about the usocket-devel mailing list