Changeset 15086
- Timestamp:
- 06/17/17 06:52:37 (6 years ago)
- Location:
- trunk/abcl/contrib/jss
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/contrib/jss/invoke.lisp
r15065 r15086 246 246 ,@body))))))) 247 247 248 (defvar *class-lookup-overrides*) 249 250 (defmacro with-class-lookup-disambiguated (overrides &body body) 251 "Suppose you have code that references class using the symbol 'object, and this is ambiguous. E.g. in my system java.lang.Object, org.omg.CORBA.Object. Use (with-class-lookup-disambiguated (lang.object) ...). Within dynamic scope, find-java-class first sees if any of these match, and if so uses them to lookup the class." 252 `(let ((*class-lookup-overrides* ',overrides)) 253 ,@body)) 254 255 (defun maybe-found-in-overridden (name) 256 (when (boundp '*class-lookup-overrides*) 257 (let ((found (find-if (lambda(el) (#"matches" (string el) (concatenate 'string "(?i).*" (string name) "$"))) 258 *class-lookup-overrides*))) 259 (if found 260 (let ((*class-lookup-overrides* nil)) 261 (lookup-class-name found)))))) 262 263 248 264 (defun lookup-class-name (name &key 249 265 (table *class-name-to-full-case-insensitive*) 250 266 (muffle-warning nil) 251 267 (return-ambiguous nil)) 268 (let ((overridden (maybe-found-in-overridden name))) 269 (when overridden (return-from lookup-class-name overridden))) 252 270 (setq name (string name)) 253 271 (let* (;; cant (last-name-pattern (#"compile" '|java.util.regex.Pattern| ".*?([^.]*)$")) -
trunk/abcl/contrib/jss/t/jss-tests.lisp
r15066 r15086 1 1 (in-package :cl-user) 2 2 3 (prove:plan 6)3 (prove:plan 8) 4 4 5 5 (prove:is … … 23 23 (find "size" (#"getMethods" (find-java-class "java.util.Collections$UnmodifiableMap")) 24 24 :test 'string-equal :key #"getName")) 25 (#"toString" (java::jmethod "java.util.Collections$UnmodifiableMap" "size" ))) 25 (#"toString" (java::jmethod "java.util.Collections$UnmodifiableMap" "size" ))) 26 27 (prove:is 28 (jss::with-class-lookup-disambiguated (lang.object) (find-java-class 'object)) 29 (find-java-class 'java.lang.object)) 30 31 ;; Object is ambiguous in default java 32 (prove:is-error 33 (find-java-class 'object) 34 'simple-error) 26 35 27 36 ;; test that optimized jss is much faster than unoptimized
Note: See TracChangeset
for help on using the changeset viewer.