branch: externals/phpinspect
commit 712268e4ec76a9ffbffe1b53abb6c815e5316063
Author: Hugo Thunnissen <de...@hugot.nl>
Commit: Hugo Thunnissen <de...@hugot.nl>

    Fix bug in autoloader that caused registration of only one FQN per type
---
 phpinspect-autoload.el |  5 ++++-
 phpinspect-imports.el  | 16 +++++++---------
 test/test-autoload.el  |  9 +++++++++
 3 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/phpinspect-autoload.el b/phpinspect-autoload.el
index 49f0d5b398..95043bf7d1 100644
--- a/phpinspect-autoload.el
+++ b/phpinspect-autoload.el
@@ -173,10 +173,13 @@ bareword typenames."))
                      (car (last (split-string (phpinspect-name-string 
type-fqn) "\\\\")))))
          (bag (gethash type-name (phpinspect-autoloader-type-name-fqn-bags 
al))))
     (if bag
-        (push type-fqn bag)
+        (setcdr bag (cons type-fqn (cdr bag)))
       (push type-fqn bag)
       (puthash type-name bag (phpinspect-autoloader-type-name-fqn-bags al)))))
 
+(cl-defmethod phpinspect-autoloader-get-type-bag ((al phpinspect-autoloader) 
(type-name (head phpinspect-name)))
+  (gethash type-name (phpinspect-autoloader-type-name-fqn-bags al)))
+
 (cl-defmethod phpinspect-iterate-composer-jsons
   ((al phpinspect-autoloader) file)
   (let* ((fs (phpinspect-autoloader-fs  al))
diff --git a/phpinspect-imports.el b/phpinspect-imports.el
index 943abdc292..03c23fe532 100644
--- a/phpinspect-imports.el
+++ b/phpinspect-imports.el
@@ -96,15 +96,13 @@ buffer position to insert the use statement at."
 
 (defun phpinspect-add-use-interactive (typename buffer project &optional 
namespace-token)
   (let* ((autoloader (phpinspect-project-autoload project))
-         (fqn-bags (phpinspect-autoloader-type-name-fqn-bags autoloader)))
-
-    (let ((fqns (gethash typename fqn-bags)))
-      (cond ((= 1 (length fqns))
-             (phpinspect-add-use (phpinspect-name-string (car fqns)) buffer 
namespace-token))
-            ((> (length fqns) 1)
-             (phpinspect-add-use (completing-read "Class: " fqns)
-                                 buffer namespace-token))
-            (t (phpinspect-message "No import found for type %s" typename))))))
+         (fqns (phpinspect-autoloader-get-type-bag autoloader typename)))
+    (cond ((= 1 (length fqns))
+           (phpinspect-add-use (phpinspect-name-string (car fqns)) buffer 
namespace-token))
+          ((> (length fqns) 1)
+           (phpinspect-add-use (completing-read "Class: " fqns)
+                               buffer namespace-token))
+          (t (phpinspect-message "No import found for type %s" typename)))))
 
 (defun phpinspect-namespace-part-of-typename (typename)
   (string-trim-right typename "\\\\?[^\\]+"))
diff --git a/test/test-autoload.el b/test/test-autoload.el
index c9737a52a3..e7f86632de 100644
--- a/test/test-autoload.el
+++ b/test/test-autoload.el
@@ -100,6 +100,15 @@
     (should (= 2 (length (seq-filter #'phpinspect-psr0-p result))))
     (should (= 2 (length (seq-filter #'phpinspect-psr4-p result))))))
 
+(ert-deftest phpinspect-al-put-type-bag ()
+  (let ((al (phpinspect-make-autoloader)))
+    (phpinspect-autoloader-put-type-bag al (phpinspect-intern-name 
"\\App\\Place\\Mountain"))
+    (phpinspect-autoloader-put-type-bag al (phpinspect-intern-name 
"\\App\\Earth\\Mountain"))
+
+    (should (equal `(,(phpinspect-intern-name "\\App\\Place\\Mountain")
+                     ,(phpinspect-intern-name "\\App\\Earth\\Mountain"))
+                   (phpinspect-autoloader-get-type-bag al 
(phpinspect-intern-name "Mountain"))))))
+
 (ert-deftest phpinspect-al-strategy-execute ()
   (let* ((fs (phpinspect-make-virtual-fs))
          (project (phpinspect--make-project :root "/project/root" :fs fs))

Reply via email to