Skip to content

Commit

Permalink
Add memoize utility function
Browse files Browse the repository at this point in the history
  • Loading branch information
Win Wang committed Aug 14, 2019
1 parent 44d2356 commit e8d9e0e
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 4 deletions.
Expand Up @@ -3,6 +3,7 @@
package rsc.rules.semantics

import rsc.rules.semantics.Scope.MemberKey
import rsc.rules.util.memoize
import scala.collection.mutable
import scala.meta._
import scala.meta.internal.{semanticdb => s}
Expand All @@ -15,12 +16,10 @@ sealed trait Scope {

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

private val _cache = new java.util.HashMap[MemberKey, String]

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

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

def getInfo(desc: Descriptor): Option[s.SymbolInformation] =
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 e8d9e0e

Please sign in to comment.