Skip to content

Commit c47f0c2

Browse files
committed
Optimize hot method hasRedefinedMethod
This showed up while doing some CPU profiling,
1 parent 5f0ed19 commit c47f0c2

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

compiler/src/dotty/tools/dotc/transform/TreeTransform.scala

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -210,9 +210,16 @@ object TreeTransforms {
210210
*/
211211
class NXTransformations {
212212

213-
private def hasRedefinedMethod(cls: Class[_], name: String): Boolean =
214-
if (cls.getDeclaredMethods.exists(_.getName == name)) cls != classOf[TreeTransform]
215-
else hasRedefinedMethod(cls.getSuperclass, name)
213+
private def hasRedefinedMethod(cls: Class[_], name: String): Boolean = {
214+
val clsMethods = cls.getDeclaredMethods
215+
var i = clsMethods.length - 1
216+
while (i >= 0) {
217+
if (clsMethods(i).getName == name)
218+
return cls != classOf[TreeTransform]
219+
i -= 1
220+
}
221+
hasRedefinedMethod(cls.getSuperclass, name)
222+
}
216223

217224
/** Create an index array `next` of size one larger than the size of `transforms` such that
218225
* for each index i, `next(i)` is the smallest index j such that

0 commit comments

Comments
 (0)