Skip to content

Commit 61ae04a

Browse files
committed
fix: defensive emission for static-field
1 parent 74cc50b commit 61ae04a

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

src/main/clojure/clojure/tools/analyzer/passes/jvm/emit_form.clj

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,10 @@
122122
`(new ~(-emit-form* class opts) ~@(mapv #(-emit-form* % opts) args))))
123123

124124
(defmethod -emit-form :static-field
125-
[{:keys [class field]} opts]
126-
`(~(symbol (class->str class) (name field))))
125+
[{:keys [class field overloaded-field?]} opts]
126+
(if overloaded-field?
127+
`(. ~(class->sym class) ~(symbol (str "-" (name field))))
128+
(list (symbol (class->str class) (name field)))))
127129

128130
(defmethod -emit-form :static-call
129131
[{:keys [class method args param-tags]} opts]

src/main/clojure/clojure/tools/analyzer/passes/jvm/validate.clj

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,15 @@
175175
(validate-call (assoc ast :class (u/maybe-class (:class ast))))))
176176

177177
(defmethod -validate :static-field
178-
[ast]
179-
(if (:validated? ast)
178+
[{:keys [class validated? field] :as ast}]
179+
(if validated?
180180
ast
181-
(assoc ast :class (u/maybe-class (:class ast)))))
181+
(let [class (u/maybe-class class)
182+
overloaded-field? (boolean (some :return-type (u/static-members class field)))]
183+
(assoc ast
184+
:overloaded-field? overloaded-field?
185+
:class class
186+
:validated? true))))
182187

183188
(defmethod -validate :instance-call
184189
[{:keys [class validated? instance] :as ast}]

0 commit comments

Comments
 (0)