Changeset 15065


Ignore:
Timestamp:
06/09/17 08:50:52 (6 years ago)
Author:
Mark Evenson
Message:

Refactor JAVAPARSER dependencies out of JSS

JAVAPARSER needs ABCL-ASDF to load its Maven artifact, but ABCL-ASDF
needs JSS. Therefore we refactor these dependencies into the ASDF
infrastructure rather than dealing with CL:REQUIRE, which isn't going
to work anyways unless there is another mechanism to load Maven
artifacts.

The JAVAPARSER system is not working due to dependency on the missing
symbols CL-USER::REPLACE-ALL and CL-USER::TREE-REPLACE, but that was
the case before this patch as Alan mistakenly didn't include it in his
submitted patch series.

Location:
trunk/abcl/contrib/jss
Files:
3 added
4 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/abcl/contrib/jss/invoke.lisp

    r15064 r15065  
    206206(eval-when (:compile-toplevel :load-toplevel :execute)
    207207  (defun read-invoke (stream char arg)
    208     (if (eql arg 1)
    209   (progn (require 'javaparser)
    210          (read-sharp-java-expression stream))
    211   (progn
    212     (unread-char char stream)
    213     (let ((name (read stream)))
    214       (if (or (find #\. name) (find #\{ name))
    215     (jss-transform-to-field name)
    216     (let ((object-var (gensym))
    217           (args-var (gensym)))
    218       `(lambda (,object-var &rest ,args-var)
    219          (invoke-restargs ,name  ,object-var ,args-var ,(eql arg 0)))))))))
     208    (unread-char char stream)
     209    (let ((name (read stream)))
     210      (if (or (find #\. name) (find #\{ name))
     211          (jss-transform-to-field name)
     212          (let ((object-var (gensym))
     213                (args-var (gensym)))
     214            `(lambda (,object-var &rest ,args-var)
     215               (invoke-restargs ,name  ,object-var ,args-var ,(eql arg 0)))))))
    220216  (set-dispatch-macro-character #\# #\" 'read-invoke))
    221217
  • trunk/abcl/contrib/jss/javaparser.asd

    r15062 r15065  
    1 (asdf:defsystem :javaparser
     1(defsystem javaparser
    22  :description "https://github.com/javaparser/javaparser"
    3   :serial t
    4   :components ((:mvn "com.github.javaparser/javaparser-core/3.0.1")
    5          (:file "javaparser")
    6          (:file "read-sharp-quote-expression")))
     3  :defsystem-depends-on (abcl-asdf)
     4  :components
     5  ((:module jar
     6            :components ((:mvn "com.github.javaparser/javaparser-core/3.0.1")))
     7   (:module source :depends-on (jar)
     8            :pathname ""
     9            :serial t
     10            :components ((:file "javaparser")
     11                         (:file "read-sharp-quote-expression"))))
     12  :perform (asdf:test-op (op c)
     13                         (asdf:test-system :javaparser-tests)))
     14
     15
  • trunk/abcl/contrib/jss/javaparser.lisp

    r15062 r15065  
    6363    symbol))
    6464
     65(eval-when (:compile-toplevel :load-toplevel :execute)
     66  (defun read-invoke/javaparser (stream char arg)
     67    (if (eql arg 1)
     68        (if (ignore-errors (jclass "com.github.javaparser.ParseStart")) ;; chosen randomly, TODO memoize
     69            (read-sharp-java-expression stream)
     70            ;; Deal with possiblity of not loading jar
     71            (error "Cannot load javaparser code needed for the #1 macro"))
     72  (progn
     73    (unread-char char stream)
     74    (let ((name (read stream)))
     75      (if (or (find #\. name) (find #\{ name))
     76    (jss-transform-to-field name)
     77    (let ((object-var (gensym))
     78          (args-var (gensym)))
     79      `(lambda (,object-var &rest ,args-var)
     80         (invoke-restargs ,name  ,object-var ,args-var ,(eql arg 0)))))))))
     81  (set-dispatch-macro-character #\# #\" 'read-invoke/javaparser))
    6582
    6683
  • trunk/abcl/contrib/jss/jss-tests.asd

    r15008 r15065  
    66               prove)
    77  :components ((:module tests
    8                         :pathname ""
     8                        :pathname "t"
    99                        :components ((:test-file "jss-tests"))))
    1010  :perform (asdf:test-op (op c)
  • trunk/abcl/contrib/jss/t/jss-tests.lisp

    r15064 r15065  
    6060(finalize)
    6161
    62 (plan 1)
    63 
    64 (in-package :jss)
    65 (defparameter expanded '(let ((jss::this jss::*object-for-this*))
    66       (jcall "getLoaded"
    67        (jcall "load"
    68         (jcall "make"
    69          (jcall "intercept"
    70           (jcall "method"
    71            (jcall "subclass"
    72             (new '|ByteBuddy|)
    73             (find-java-class '|Object|)
    74             t)
    75            (jstatic "named"
    76               '|ElementMatchers|
    77               "toString"))
    78           (jstatic "value"
    79              '|FixedValue|
    80              "Hello World!")))
    81         (jcall "getClassLoader"
    82          (jcall "getClass" jss::this))))))
    83 
    84 (defparameter source '#1"new ByteBuddy().subclass(Object.class,t)
    85    .method(ElementMatchers.named("toString"))
    86    .intercept(FixedValue.value("Hello World!"))
    87    .make()
    88    .load(getClass().getClassLoader())
    89    .getLoaded()" )
    90 
    91 (in-package :jss-test)
    92 
    93 (is jss::source
    94     jss::expanded)
    95 
    96 (finalize)
Note: See TracChangeset for help on using the changeset viewer.