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 <[email protected]> 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 ,@arguments)) >> - >> -(defmacro do-jmethod (&rest arguments) >> - `(do-jmethod-call ,@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 ,@arg-spec) >> - (java:jclass ,class-sym) ,@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 ,@arg-spec) >> - ,isym ,@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 ,@arg-spec) >> - ,@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 ,@arguments)) >> + >> +(defmacro do-jmethod (&rest arguments) >> + `(do-jmethod-call ,@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 ,@arg-spec) >> + (java:jclass ,class-sym) ,@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 ,@arg-spec) >> + ,isym ,@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 ,@arg-spec) >> + ,@args)) >> >> _______________________________________________ >> usocket-cvs mailing list >> [email protected] >> http://common-lisp.net/cgi-bin/mailman/listinfo/usocket-cvs >> _______________________________________________ usocket-devel mailing list [email protected] http://common-lisp.net/cgi-bin/mailman/listinfo/usocket-devel
