[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/javaimp 80d4a95: Add interface abstract methods to imen
From: |
Filipp Gunbin |
Subject: |
[elpa] externals/javaimp 80d4a95: Add interface abstract methods to imenu support |
Date: |
Fri, 27 Aug 2021 15:28:22 -0400 (EDT) |
branch: externals/javaimp
commit 80d4a95f7244904ff6eb7a9ec024c91abfe68579
Author: Filipp Gunbin <fgunbin@fastmail.fm>
Commit: Filipp Gunbin <fgunbin@fastmail.fm>
Add interface abstract methods to imenu support
---
javaimp-parse.el | 55 +++++++++++++++++++++++++++++++++++--------------------
javaimp-tests.el | 18 +++++++++++++++---
javaimp.el | 17 ++++++++++-------
3 files changed, 60 insertions(+), 30 deletions(-)
diff --git a/javaimp-parse.el b/javaimp-parse.el
index 130edff..21bda4b 100644
--- a/javaimp-parse.el
+++ b/javaimp-parse.el
@@ -390,26 +390,40 @@ non-nil. Resets this variable after parsing is done."
(let (res)
(while (javaimp--parse-rsb-keyword "\\_<abstract\\_>" nil t)
(save-excursion
- (save-match-data
- (let ((enclosing (nth 1 (syntax-ppss))))
- (when (and enclosing
- (javaimp--parse-rsb-keyword ";" nil t -1)
- ;; we're in the same nest
- (= (nth 1 (syntax-ppss)) enclosing))
- (backward-char) ;skip semicolon
- ;; now parse as normal method scope
- (when-let ((scope (javaimp--parse-scope-method-or-stmt (point)))
- ;; note that an abstract method with no
- ;; parents will be ignored
- (parent (javaimp--parse-scopes nil)))
- (setf (javaimp-scope-parent scope) (javaimp--copy-scope
parent))
- (push scope res)))))))
+ (let ((enclosing (nth 1 (syntax-ppss))))
+ (when (and enclosing
+ (javaimp--parse-rsb-keyword ";" nil t -1)
+ ;; are we in the same nest?
+ (= (nth 1 (syntax-ppss)) enclosing))
+ (backward-char) ;skip semicolon
+ ;; now parse as normal method scope
+ (when-let ((scope (javaimp--parse-scope-method-or-stmt (point)))
+ ;; note that an abstract method with no
+ ;; parents will be ignored
+ (parent (javaimp--parse-scopes nil)))
+ (setf (javaimp-scope-parent scope) (javaimp--copy-scope parent))
+ (push scope res))))))
res))
-(defun javaimp--parse-abstract-interface-methods ()
- ;; TODO
- )
-
+(defun javaimp--parse-abstract-interface-methods (int-scope)
+ (let ((start (1+ (javaimp-scope-open-brace int-scope)))
+ (end (ignore-errors
+ (1- (scan-lists (javaimp-scope-open-brace int-scope) 1 0))))
+ res)
+ (when (and start end)
+ (goto-char end)
+ (while (and (> (point) start)
+ (javaimp--parse-rsb-keyword ";" start t))
+ ;; are we in the same nest?
+ (if (= (nth 1 (syntax-ppss)) (javaimp-scope-open-brace int-scope))
+ (save-excursion
+ ;; now parse as normal method scope
+ (when-let ((scope (javaimp--parse-scope-method-or-stmt (point))))
+ (setf (javaimp-scope-parent scope) int-scope)
+ (push scope res)))
+ ;; we've entered another nest, go back to its start
+ (goto-char (nth 1 (syntax-ppss))))))
+ res))
;; Functions intended to be called from other parts of javaimp.
@@ -445,12 +459,13 @@ them should move point."
(push scope res)))
res))))
-(defun javaimp--parse-abstract-methods ()
+(defun javaimp--parse-abstract-methods (interfaces)
(save-excursion
(save-restriction
(widen)
(append (javaimp--parse-abstract-class-methods)
- (javaimp--parse-abstract-interface-methods)))))
+ (seq-mapcat #'javaimp--parse-abstract-interface-methods
+ interfaces)))))
(defun javaimp--parse-update-dirty-pos (beg _end _old-len)
"Function to add to `after-change-functions' hook."
diff --git a/javaimp-tests.el b/javaimp-tests.el
index 93dfcc4..0ad3fd8 100644
--- a/javaimp-tests.el
+++ b/javaimp-tests.el
@@ -314,11 +314,15 @@ package commented.block;
("baz()" . 1281)))
("IInner1"
("foo()" . 1603)
+ ("abstract_method()" . 1715)
("IInner1_CInner1"
("foo()" . 1798))
+ ("baz()" . 1934)
("defaultMethod(String)" . 1963)
("IInner1_IInner1"
- ("defaultMethod(String)" . 2157)))
+ ("foo()" . 2122)
+ ("defaultMethod(String)" . 2157)
+ ("baz()" . 2258)))
("EnumInner1"
("EnumInner1()" . 2353)
("foo()" . 2399)
@@ -342,13 +346,17 @@ package commented.block;
(javaimp-test--imenu-method-list
'("foo() [Top.CInner1]"
"foo() [Top.CInner1.CInner1_CInner1]"
- "abstract_method()"
+ "abstract_method() [Top.CInner1.CInner1_CInner1]"
"bar()"
- "baz()"
+ "baz() [Top.CInner1.CInner1_CInner1]"
"foo() [Top.IInner1]"
+ "abstract_method() [Top.IInner1]"
"foo() [Top.IInner1.IInner1_CInner1]"
+ "baz() [Top.IInner1]"
"defaultMethod(String) [Top.IInner1]"
+ "foo() [Top.IInner1.IInner1_IInner1]"
"defaultMethod(String) [Top.IInner1.IInner1_IInner1]"
+ "baz() [Top.IInner1.IInner1_IInner1]"
"EnumInner1()"
"foo() [Top.EnumInner1]"
"foo() [ColocatedTop]"
@@ -364,9 +372,13 @@ package commented.block;
"Top.CInner1.CInner1_CInner1.bar()"
"Top.CInner1.CInner1_CInner1.baz()"
"Top.IInner1.foo()"
+ "Top.IInner1.abstract_method()"
"Top.IInner1.IInner1_CInner1.foo()"
+ "Top.IInner1.baz()"
"Top.IInner1.defaultMethod(String)"
+ "Top.IInner1.IInner1_IInner1.foo()"
"Top.IInner1.IInner1_IInner1.defaultMethod(String)"
+ "Top.IInner1.IInner1_IInner1.baz()"
"Top.EnumInner1.EnumInner1()"
"Top.EnumInner1.foo()"
"ColocatedTop.foo()"
diff --git a/javaimp.el b/javaimp.el
index cf77216..f4a4693 100644
--- a/javaimp.el
+++ b/javaimp.el
@@ -679,12 +679,11 @@ done in mode functions automatically."
forest)))))
(defun javaimp-imenu--get-forest ()
- (let* ((scopes
- (javaimp--parse-get-all-scopes
- (lambda (scope)
- (javaimp-test-scope-type scope
- '(class interface enum method)
- javaimp--classlike-scope-types))))
+ (let* ((scopes (javaimp--parse-get-all-scopes
+ (lambda (scope)
+ (javaimp-test-scope-type scope
+ '(class interface enum method)
+ javaimp--classlike-scope-types))))
(methods (seq-filter
(lambda (scope)
(eq (javaimp-scope-type scope) 'method))
@@ -696,7 +695,11 @@ done in mode functions automatically."
(top-classes (seq-filter (lambda (s)
(null (javaimp-scope-parent s)))
classes))
- (abstract-methods (javaimp--parse-abstract-methods)))
+ (abstract-methods (javaimp--parse-abstract-methods
+ (seq-filter
+ (lambda (scope)
+ (eq (javaimp-scope-type scope) 'interface))
+ scopes))))
(mapcar
(lambda (top-class)
(message "Building tree for top-level class-like scope: %s"
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [elpa] externals/javaimp 80d4a95: Add interface abstract methods to imenu support,
Filipp Gunbin <=