Uploaded image for project: 'Clojure'
  1. CLJ-1491

External type hint inconsistency between regular functions and primitive functions

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Minor
    • Resolution: Duplicate
    • Affects versions: Release 1.6
    • Fix versions: None
    • Approval:
      Triaged
    • Patch:
      Code

      Description

      Consider the following example.

      (set! *warn-on-reflection* true)
      
      (defn f [n] (java.util.ArrayList. (int n)))
      
      (let [al ^java.util.ArrayList (f 10)]
        (.add al 23))
      

      As expected this does not warn about reflection. The following example shows the same scenario for a primitive function.

      (set! *warn-on-reflection* true)
      
      (defn g [^long n] (java.util.ArrayList. n))
      
      (let [al ^java.util.ArrayList (g 10)]
        (.add al 23))
      ; Reflection warning, NO_SOURCE_PATH:2:3 - call to method add on java.lang.Object can't be resolved (no such method). 
      

      So the behavior of external type hints is inconsistent for regular functions and primitive functions.
      Most likely, the external type hint information is somehow ignored for primitive functions since the case where they return no primitive value is not treated separately.

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              alex+import import
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: