branch: scratch/javaimp-wip commit 71be533317e07b0fa42729225d3eab41f6576fe4 Author: Filipp Gunbin <fgun...@fastmail.fm> Commit: Filipp Gunbin <fgun...@fastmail.fm>
wip --- javaimp-tests.el | 135 ++++++++++++++++++++------------------- javaimp-util.el | 22 ++++--- javaimp.el | 39 ++++++----- testdata/test1-misc-classes.java | 9 ++- 4 files changed, 107 insertions(+), 98 deletions(-) diff --git a/javaimp-tests.el b/javaimp-tests.el index b4788e2..d84a131 100644 --- a/javaimp-tests.el +++ b/javaimp-tests.el @@ -224,61 +224,63 @@ throws E1 {" (expected '(((class "Top")) ((class "CInner1") (class "Top")) - ((method "foo") (class "CInner1") (class "Top")) + ((method "foo()") (class "CInner1") (class "Top")) ((local-class "CInner1_CLocal1") - (method "foo") (class "CInner1") (class "Top")) - ((method "foo") + (method "foo()") (class "CInner1") (class "Top")) + ((method "foo()") (local-class "CInner1_CLocal1") - (method "foo") (class "CInner1") (class "Top")) + (method "foo()") (class "CInner1") (class "Top")) ((local-class "CInner1_CLocal1_CLocal1") - (method "foo") + (method "foo()") (local-class "CInner1_CLocal1") - (method "foo") (class "CInner1") (class "Top")) - ((method "foo") + (method "foo()") (class "CInner1") (class "Top")) + ((method "foo()") (local-class "CInner1_CLocal1_CLocal1") - (method "foo") + (method "foo()") (local-class "CInner1_CLocal1") - (method "foo") (class "CInner1") (class "Top")) + (method "foo()") (class "CInner1") (class "Top")) ((local-class "CInner1_CLocal2") - (method "foo") (class "CInner1") (class "Top")) - ((method "foo") + (method "foo()") (class "CInner1") (class "Top")) + ((method "foo()") (local-class "CInner1_CLocal2") - (method "foo") (class "CInner1") (class "Top")) + (method "foo()") (class "CInner1") (class "Top")) ((class "CInner1_CInner") (class "CInner1") (class "Top")) - ((method "foo") + ((method "foo()") (class "CInner1_CInner") (class "CInner1") (class "Top")) - ((method "bar") + ((method "bar()") (class "CInner1_CInner") (class "CInner1") (class "Top")) ((interface "IInner1") (class "Top")) - ((method "foo") (interface "IInner1") (class "Top")) + ((method "foo()") (interface "IInner1") (class "Top")) ((class "IInner1_CInner1") (interface "IInner1") (class "Top")) - ((method "foo") + ((method "foo()") (class "IInner1_CInner1") (interface "IInner1") (class "Top")) - ((method "defaultMethod") (interface "IInner1") (class "Top")) + ((method "defaultMethod(String, String)") + (interface "IInner1") (class "Top")) ((interface "IInner1_IInner1") (interface "IInner1") (class "Top")) - ((method "defaultMethod") + ((method "defaultMethod(String, String)") (interface "IInner1_IInner1") (interface "IInner1") (class "Top")) ((enum "EnumInner1") (class "Top")) ((method "EnumInner1") (enum "EnumInner1") (class "Top")) - ((method "foo") (enum "EnumInner1") (class "Top")) + ((method "foo()") (enum "EnumInner1") (class "Top")) ((enum "EnumInner1_EInner1") (enum "EnumInner1") (class "Top")) ((class "ColocatedTop")) - ((method "foo") (class "ColocatedTop"))))) + ((method "foo()") (class "ColocatedTop")) + ((method "bar(String, String)") (class "ColocatedTop"))))) (should (= (length expected) (length actual))) (dotimes (i (length expected)) (should (equal (nth i expected) (nth i actual))))) ;; (let ((data `((,(nth 0 scopes) "Top" 26 36) - (,(nth 15 scopes) "Top.IInner1.IInner1_CInner1.foo" 1810 1816) - (,(nth 22 scopes) "Top.EnumInner1_EInner1" 2452 2476) - (,(nth 24 scopes) "ColocatedTop.foo" 2544 2550)))) + (,(nth 15 scopes) "Top.IInner1.IInner1_CInner1.foo" 1798 1804) + (,(nth 22 scopes) "Top.EnumInner1_EInner1" 24574 2498) + (,(nth 24 scopes) "ColocatedTop.foo" 2566 2572)))) (dolist (elt data) (let ((scope (nth 0 elt))) (should (equal (nth 1 elt) (javaimp-scope-name scope))) @@ -297,24 +299,25 @@ throws E1 {" actual '(("Top" ("CInner1" - ("foo" . 98) + ("foo()" . 98) ("CInner1_CInner1" - ("foo" . 1099) - ("bar" . 1192))) + ("foo()" . 1099) + ("bar()" . 1192))) ("IInner1" - ("foo" . 1603) + ("foo()" . 1603) ("IInner1_CInner1" - ("foo" . 1810)) - ("defaultMethod" . 1975) + ("foo()" . 1810)) + ("defaultMethod(String)" . 1975) ("IInner1_IInner1" - ("defaultMethod" . 2158))) + ("defaultMethod(String)" . 2169))) ("EnumInner1" - ("EnumInner1" . 2343) - ("foo" . 2389) - ;; "EnumInner1_EInner1" empty - omitted + ("EnumInner1()" . 2365) + ("foo()" . 2411) + ;; "EnumInner1_EInner1" omitted because no methods inside )) ("ColocatedTop" - ("foo" . 2544))))))) + ("foo()" . 2566) + ("bar(String, String)" . 2578))))))) (ert-deftest javaimp-test--imenu-simple () (let* ((javaimp-imenu-group-methods nil) @@ -322,46 +325,50 @@ throws E1 {" (should (equal actual - '(("foo (Top.CInner1)" . 98) - ("foo (Top.CInner1.CInner1_CInner1)" . 1099) - ("bar" . 1192) - ("foo (Top.IInner1)" . 1603) - ("foo (Top.IInner1.IInner1_CInner1)" . 1810) - ("defaultMethod (Top.IInner1)" . 1975) - ("defaultMethod (Top.IInner1.IInner1_IInner1)" . 2158) - ("EnumInner1" . 2343) - ("foo (Top.EnumInner1)" . 2389) - ("foo (ColocatedTop)" . 2544)))))) + '(("foo() [Top.CInner1]" . 98) + ("foo() [Top.CInner1.CInner1_CInner1]" . 1099) + ("bar()" . 1192) + ("foo() [Top.IInner1]" . 1603) + ("foo() [Top.IInner1.IInner1_CInner1]" . 1810) + ("defaultMethod(String) [Top.IInner1]" . 1975) + ("defaultMethod(String) [Top.IInner1.IInner1_IInner1]" . 2169) + ("EnumInner1()" . 2365) + ("foo() [Top.EnumInner1]" . 2411) + ("foo() [ColocatedTop]" . 2566) + ("bar(String, String)" . 2578)))))) (ert-deftest javaimp-test--imenu-qualified () (let* ((javaimp-imenu-group-methods 'qualified) - (actual - (mapcar (lambda (entry) - - (javaimp-test--imenu-get-index))) + (actual (javaimp-test--imenu-get-index))) (should (equal - - (lambda (s) - (cons (javaimp-scope-name entry) (javaimp-scope-start entry))) - - actual - '(("Top.CInner1.foo" . 98) - ("Top.CInner1.CInner1_CInner1.foo" . 1099) - ("Top.CInner1.CInner1_CInner1.bar" . 1192) - ("Top.IInner1.foo" . 1603) - ("Top.IInner1.IInner1_CInner1.foo" . 1810) - ("Top.IInner1.defaultMethod" . 1975) - ("Top.IInner1.IInner1_IInner1.defaultMethod" . 2158) - ("Top.EnumInner1.EnumInner1" . 2343) - ("Top.EnumInner1.foo" . 2389) - ("ColocatedTop.foo" . 2544)))))) + '(("Top.CInner1.foo()" . 98) + ("Top.CInner1.CInner1_CInner1.foo()" . 1099) + ("Top.CInner1.CInner1_CInner1.bar()" . 1192) + ("Top.IInner1.foo()" . 1603) + ("Top.IInner1.IInner1_CInner1.foo()" . 1810) + ("Top.IInner1.defaultMethod(String)" . 1975) + ("Top.IInner1.IInner1_IInner1.defaultMethod(String)" . 2169) + ("Top.EnumInner1.EnumInner1()" . 2365) + ("Top.EnumInner1.foo()" . 2411) + ("ColocatedTop.foo()" . 2566) + ("ColocatedTop.bar(String, String)" . 2578)))))) (defun javaimp-test--imenu-get-index () (with-temp-buffer (insert-file-contents (concat javaimp--basedir "testdata/test1-misc-classes.java")) - (javaimp-imenu-create-index))) + (let* ((javaimp-parse-format-method-name + javaimp--parse-format-method-name-types) + (alist (javaimp-imenu-create-index))) + (javaimp-test--imenu-simplify-entries alist)))) + +(defun javaimp-test--imenu-simplify-entries (alist) + (dolist (elt alist) + (if (and (= (length elt) 4) + (functionp (nth 2 elt))) + (setcdr elt (nth 1 elt)) + (javaimp-test--imenu-simplify-entries (cdr elt))))) (provide 'javaimp-tests) diff --git a/javaimp-util.el b/javaimp-util.el index 1bf2a79..25dd12d 100644 --- a/javaimp-util.el +++ b/javaimp-util.el @@ -160,9 +160,9 @@ PARENT-NODE is indented for recursive calls." (defun javaimp--find-node (pred forest &optional unwrap) (catch 'found (dolist (tree forest) - (javaimp--find-node-in-tree-1 tree pred unwrap)))) + (javaimp--find-node-in-tree tree pred unwrap)))) -(defun javaimp--find-node-in-tree-1 (tree pred unwrap) +(defun javaimp--find-node-in-tree (tree pred unwrap) (when tree (if (funcall pred (javaimp-node-contents tree)) (throw 'found @@ -170,23 +170,25 @@ PARENT-NODE is indented for recursive calls." (javaimp-node-contents tree) tree))) (dolist (child (javaimp-node-children tree)) - (javaimp--find-node-in-tree-1 child pred unwrap)))) + (javaimp--find-node-in-tree child pred unwrap)))) (defun javaimp--collect-nodes (pred forest) (apply #'seq-concatenate 'list (mapcar (lambda (tree) - (javaimp--collect-nodes-from-tree tree pred)) + (delq nil + (javaimp--collect-nodes-from-tree tree pred))) forest))) (defun javaimp--collect-nodes-from-tree (tree pred) (when tree - (append (when (funcall pred (javaimp-node-contents tree)) - (list (javaimp-node-contents tree))) - (apply #'seq-concatenate 'list - (mapcar (lambda (child) - (javaimp--collect-nodes-from-tree child pred)) - (javaimp-node-children tree)))))) + (cons (and (funcall pred (javaimp-node-contents tree)) + (javaimp-node-contents tree)) + (apply #'seq-concatenate 'list + (mapcar (lambda (child) + (delq nil + (javaimp--collect-nodes-from-tree child pred))) + (javaimp-node-children tree)))))) (defun javaimp--map-nodes (mapper pred forest) diff --git a/javaimp.el b/javaimp.el index 86b16cd..3585e32 100644 --- a/javaimp.el +++ b/javaimp.el @@ -578,10 +578,10 @@ is `ordinary' or `static'. Interactively, NEW-IMPORTS is nil." (javaimp--collect-nodes #'javaimp-imenu--included-method forest)))) (mapcar (lambda (entry) - ;; disambiguate similar method names + ;; disambiguate same method names (when (assoc (car entry) entries) (setcar entry - (format "%s (%s)" + (format "%s [%s]" (car entry) (javaimp-imenu--concat-parent-names (nth 3 entry)))))) @@ -620,31 +620,16 @@ is `ordinary' or `static'. Interactively, NEW-IMPORTS is nil." #'javaimp-imenu--go scope)) +(defun javaimp-imenu--go (scope) + (goto-char (javaimp-scope-start scope)) + (back-to-indentation)) + (defun javaimp-imenu--concat-parent-names (scope) (let (parents) (while (setq scope (javaimp-scope-parent scope)) (push scope parents)) (mapconcat #'javaimp-scope-name parents "."))) - -(defun javaimp-imenu--go (scope) - (goto-char (javaimp-scope-start scope)) - (back-to-indentation)) - - - -;; Misc - -(defun javaimp-reset (arg) - "Forget loaded trees state. With prefix arg, also reset jars -cache." - (interactive "P") - (setq javaimp-project-forest nil - javaimp--jdk-classes 'need-init) - (when arg - (setq javaimp-cached-jars nil))) - - ;; Help @@ -713,6 +698,18 @@ scopes cache." (setq buffer-read-only t)) (display-buffer buf))) + +;; Misc + +(defun javaimp-reset (arg) + "Forget loaded trees state. With prefix arg, also reset jars +cache." + (interactive "P") + (setq javaimp-project-forest nil + javaimp--jdk-classes 'need-init) + (when arg + (setq javaimp-cached-jars nil))) + (provide 'javaimp) ;;; javaimp.el ends here diff --git a/testdata/test1-misc-classes.java b/testdata/test1-misc-classes.java index d916221..c010604 100644 --- a/testdata/test1-misc-classes.java +++ b/testdata/test1-misc-classes.java @@ -72,7 +72,7 @@ public class Top { } } - String bar(String arg1, String arg2); + String abstract_method(); static class IInner1_CInner1 { public void foo() { @@ -84,14 +84,14 @@ public class Top { void baz(); - default void defaultMethod() { + default void defaultMethod(String arg1) { System.out.println(""); } interface IInner1_IInner1 extends A<B, C>, Serializable { void foo(); - default String defaultMethod() { + default String defaultMethod(String arg2) { System.out.println(""); } @@ -119,4 +119,7 @@ public class Top { class ColocatedTop { void foo() { } + + void bar(String arg1, String arg2) { + } }