Skip to content

Commit

Permalink
Update to javaparser 3.24.2. Fix tests. Fix typo: ignoreable -> ignor…
Browse files Browse the repository at this point in the history
…able. Have invoke load javaparser first time #1 is used.
  • Loading branch information
alanruttenberg authored and easye committed Apr 6, 2022
1 parent 465ab5a commit 32cf16b
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 18 deletions.
12 changes: 8 additions & 4 deletions contrib/jss/README.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -106,14 +106,18 @@ lists the names of all methods for the CLASS-NAME.

Java static fields may be addressed via the SHARPSIGN-QUOTATION_MARK macro as

(#"{java.lang.System}.{fileSeparator}")
(#"java.lang.System.out")

Java fields can by dynamically accessed with

(let ((class 'java.lang.system)
(field "out"))
#"{class}.{field}")

### Javaparser

On the reference of the JAVAPARSER system, one may use a Java DSL to
specify invocation and chains:
Use #1"<java expression>" to use JAVAPARSER to parse an expression. JAVAPARSER will be loaded on first use.

(asdf:make :javaparser)
(#1"new ByteBuddy()
.subclass(Object.class,t)
.method(ElementMatchers.named("toString"))
Expand Down
20 changes: 12 additions & 8 deletions contrib/jss/invoke.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -206,14 +206,18 @@ NAME can either string or a symbol according to the usual JSS conventions."

(eval-when (:compile-toplevel :load-toplevel :execute)
(defun read-invoke (stream char arg)
(unread-char char stream)
(let ((name (read stream)))
(if (or (find #\. name) (find #\{ name))
(jss-transform-to-field name arg)
(let ((object-var (gensym))
(args-var (gensym)))
`(lambda (,object-var &rest ,args-var)
(invoke-restargs ,name ,object-var ,args-var ,(eql arg 0)))))))
(if (eql arg 1)
(progn (asdf:make 'javaparser)
(read-sharp-java-expression stream))
(progn
(unread-char char stream)
(let ((name (read stream)))
(if (or (find #\. name) (find #\{ name))
(jss-transform-to-field name arg)
(let ((object-var (gensym))
(args-var (gensym)))
`(lambda (,object-var &rest ,args-var)
(invoke-restargs ,name ,object-var ,args-var ,(eql arg 0)))))))))
(set-dispatch-macro-character #\# #\" 'read-invoke))

(defmacro with-constant-signature (fname-jname-pairs &body body)
Expand Down
1 change: 1 addition & 0 deletions contrib/jss/javaparser-tests.asd
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
(in-package :asdf)
(defsystem javaparser-tests
:defsystem-depends-on (prove-asdf)
:depends-on (javaparser
Expand Down
2 changes: 1 addition & 1 deletion contrib/jss/javaparser.asd
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
:defsystem-depends-on (abcl-asdf)
:components
((:module jar
:components ((:mvn "com.github.javaparser/javaparser-core/3.0.1")))
:components ((:mvn "com.github.javaparser/javaparser-core/3.24.2")))
(:module source :depends-on (jar)
:pathname ""
:serial t
Expand Down
10 changes: 7 additions & 3 deletions contrib/jss/javaparser.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@

(defvar *class-to-last-component* (make-hash-table :test 'equalp))

(defclass javaparser () ())
(defclass javaparser () ((parser :accessor parser)))

(defmethod initialize-instance ((p javaparser)&key)
(call-next-method)
(setf (parser p) (new 'javaparser)))

(defmacro def-java-read (ast-class class fields &body body)
(let ((jclass (find-java-class (concatenate 'string "com.github.javaparser.ast.expr." (string ast-class)))))
Expand All @@ -29,7 +33,8 @@

(defmethod read-java-expression ((r javaparser) expression)
`(let ((this *object-for-this*))
,(process-node r (#"parseExpression" 'javaparser expression))))
(declare (ignorable this))
,(process-node r (#"getResult" (#"parseExpression" (parser r) expression)))))

(def-java-read LongLiteralExpr javaparser ()
(read-from-string (#"replaceFirst" (#"getValue" node) "L" "")))
Expand Down Expand Up @@ -65,7 +70,6 @@
(eval-when (:compile-toplevel :load-toplevel :execute)
(defun read-invoke/javaparser (stream char arg)
(if (eql arg 1)

(if (ignore-errors
(jclass "com.github.javaparser.ParseStart")) ;; chosen randomly, TODO memoize
(read-sharp-java-expression stream)
Expand Down
1 change: 1 addition & 0 deletions contrib/jss/jss-tests.asd
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
;;;; -*- Mode: LISP -*-
(in-package :asdf)
(defsystem jss-tests
:defsystem-depends-on (quicklisp-abcl
prove-asdf)
Expand Down
3 changes: 1 addition & 2 deletions contrib/jss/t/javaparser.lisp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
(in-package :cl-user)

(defparameter expanded '(let ((jss::this jss::*object-for-this*))
(declare (ignorable jss::this))
(jcall "getLoaded"
(jcall "load"
(jcall "make"
Expand All @@ -26,8 +27,6 @@
.load(getClass().getClassLoader())
.getLoaded()" )

(in-package :jss-test)

(prove:plan 1)
(prove:is source expanded)

Expand Down

0 comments on commit 32cf16b

Please sign in to comment.