Skip to content

Commit

Permalink
Merge pull request #473 from wiwa/f/rsccompat-perf
Browse files Browse the repository at this point in the history
Cache member lookup in RscCompat Scopes
  • Loading branch information
wiwa committed Aug 14, 2019
2 parents ac39067 + f50b26e commit 8df1e01
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 1 deletion.
13 changes: 12 additions & 1 deletion scalafix/rules/src/main/scala/rsc/rules/semantics/Scopes.scala
Expand Up @@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0 (see LICENSE.md).
package rsc.rules.semantics

import rsc.rules.util.memoize
import scala.collection.mutable
import scala.meta._
import scala.meta.internal.{semanticdb => s}
Expand All @@ -10,11 +11,18 @@ import scala.meta.internal.semanticdb.Scala.{Descriptor => d}
import scala.meta.internal.semanticdb.Scala.{Names => n}

sealed trait Scope {
import Scope.MemberKey

def lookup(name: n.Name): String

def getRename(name: n.Name): String = ""

protected def member(symtab: Symtab, sym: String, name: n.Name): String = {
protected def member(symtab: Symtab, sym: String, name: n.Name): String =
_member(MemberKey(symtab, sym, name))

private val _member: MemberKey => String = memoize { key: MemberKey =>
val MemberKey(symtab, sym, name) = key

def getInfo(desc: Descriptor): Option[s.SymbolInformation] =
symtab
.info(Symbols.Global(sym, desc))
Expand All @@ -27,6 +35,9 @@ sealed trait Scope {
info.map(_.symbol).getOrElse(Symbols.None)
}
}
object Scope {
private[Scope] final case class MemberKey(symtab: Symtab, sym: String, name: n.Name)
}

final class AddedImportsScope extends Scope {

Expand Down
14 changes: 14 additions & 0 deletions scalafix/rules/src/main/scala/rsc/rules/util/MemoizeUtil.scala
@@ -0,0 +1,14 @@
package rsc.rules.util

trait MemoizeUtil {

/**
* Memoize the results of a function call to prevent repeated calls
*/
def memoize[I, O](f: I => O): I => O = {
val _cache = new java.util.HashMap[I, O]

key =>
_cache.computeIfAbsent(key, _ => f(key))
}
}
3 changes: 3 additions & 0 deletions scalafix/rules/src/main/scala/rsc/rules/util/package.scala
@@ -0,0 +1,3 @@
package rsc.rules

package object util extends MemoizeUtil

0 comments on commit 8df1e01

Please sign in to comment.