Skip to content

Commit 8c8e4f6

Browse files
foguspuredanger
authored andcommitted
CLJ-2867: Convey tag on QME whenever it's present.
1 parent ee28f7f commit 8c8e4f6

2 files changed

Lines changed: 11 additions & 1 deletion

File tree

src/jvm/clojure/lang/Compiler.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1164,6 +1164,7 @@ static class QualifiedMethodExpr implements Expr {
11641164
private final Symbol methodSymbol;
11651165
private final String methodName;
11661166
private final MethodKind kind;
1167+
private final Class tagClass;
11671168

11681169
private enum MethodKind {
11691170
CTOR, INSTANCE, STATIC
@@ -1172,6 +1173,7 @@ private enum MethodKind {
11721173
public QualifiedMethodExpr(Class methodClass, Symbol sym){
11731174
c = methodClass;
11741175
methodSymbol = sym;
1176+
tagClass = tagOf(sym) != null ? HostExpr.tagToClass(tagOf(sym)) : AFn.class;
11751177
hintedSig = tagsToClasses(paramTagsOf(sym));
11761178
if(sym.name.startsWith(".")) {
11771179
kind = MethodKind.INSTANCE;
@@ -1208,7 +1210,7 @@ public boolean hasJavaClass() {
12081210

12091211
@Override
12101212
public Class getJavaClass() {
1211-
return AFn.class;
1213+
return tagClass;
12121214
}
12131215

12141216
// TBD: caching/reuse of thunks

test/clojure/test_clojure/method_thunks.clj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99

1010
(ns clojure.test-clojure.method-thunks
1111
(:use clojure.test)
12+
(:require [clojure.java.io :as jio])
1213
(:import (clojure.lang Compiler Tuple)
1314
(java.util Arrays UUID Locale)
15+
(java.io File FileFilter)
1416
clojure.lang.IFn$LL))
1517

1618
(set! *warn-on-reflection* true)
@@ -52,3 +54,9 @@
5254
((:fromString mts) "00000000-0000-0001-0000-000000000002")))
5355
(is (= [1] (mt 1)))
5456
(is (= 97 (first (seq (gbs "a"))))))
57+
58+
(deftest hinted-method-values
59+
(is (thrown? Exception (eval '(.listFiles (jio/file ".") #(File/.isDirectory %)))))
60+
(is (seq (.listFiles (jio/file ".") ^FileFilter File/.isDirectory)))
61+
(is (seq (File/.listFiles (jio/file ".") ^FileFilter File/.isDirectory)))
62+
(is (seq (^[FileFilter] File/.listFiles (jio/file ".") ^FileFilter File/.isDirectory))))

0 commit comments

Comments
 (0)