[usocket-devel] [usocket-cvs] r553 - in usocket/trunk: . backend vendor
Chun Tian (binghe)
binghe.lisp at gmail.com
Tue Jul 20 11:48:44 UTC 2010
Ah ... I saw a sample from http://common-lisp.net/project/armedbear/doc/abcl-user.html
OK, will try to use the new interface.
--binghe
在 2010-7-20,19:44, Chun Tian (binghe) 写道:
> 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