Skip to content

Commit 127ad4c

Browse files
authored
Merge pull request #8 from adpi2/fix-metals-7115
Cache decoding failure + update dependencies
2 parents 379361e + 87bbab2 commit 127ad4c

File tree

13 files changed

+32
-17
lines changed

13 files changed

+32
-17
lines changed

.scalafmt.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version = "3.8.1"
1+
version = "3.8.4"
22
project.git = true
33
align.preset = none
44
align.stripMargin = true

project/Dependencies.scala

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
import sbt._
22

33
object Dependencies {
4-
val scala3Next = "3.4.2"
5-
val asmVersion = "9.7"
6-
val coursierVersion = "2.1.10"
4+
val scala3Next = "3.6.2"
5+
val asmVersion = "9.7.1"
6+
val coursierVersion = "2.1.24"
77

8-
val tastyQuery = "ch.epfl.scala" %% "tasty-query" % "1.3.0"
8+
val tastyQuery = "ch.epfl.scala" %% "tasty-query" % "1.4.0"
99
val asm = "org.ow2.asm" % "asm" % asmVersion
1010
val asmUtil = "org.ow2.asm" % "asm-util" % asmVersion
1111

1212
// test dependencies
13-
val munit = "org.scalameta" %% "munit" % "1.0.0"
13+
val munit = "org.scalameta" %% "munit" % "1.0.4"
1414
val coursier = ("io.get-coursier" %% "coursier" % coursierVersion).cross(CrossVersion.for3Use2_13)
1515
val coursierJvm = ("io.get-coursier" %% "coursier-jvm" % coursierVersion).cross(CrossVersion.for3Use2_13)
1616
}

project/build.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
sbt.version=1.10.0
1+
sbt.version=1.10.7

project/plugins.sbt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.5.12")
2-
addSbtPlugin("org.scala-debugger" % "sbt-jdi-tools" % "1.1.1")
1+
addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.9.2")
2+
addSbtPlugin("com.github.sbt" % "sbt-jdi-tools" % "1.2.0")

src/main/scala/ch/epfl/scala/decoder/binary/Symbol.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,4 @@ trait Symbol:
55
def sourceLines: Option[SourceLines]
66
def sourceName: Option[String] = sourceLines.map(_.sourceName)
77

8-
def showSpan: String =
9-
sourceLines.map(_.showSpan).getOrElse("")
8+
def showSpan: String = sourceLines.map(_.showSpan).getOrElse("")

src/main/scala/ch/epfl/scala/decoder/internal/CachedBinaryDecoder.scala

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,19 @@ import tastyquery.Symbols.*
66
import ch.epfl.scala.decoder.*
77

88
import scala.collection.concurrent.TrieMap
9+
import scala.util.Try
910

1011
class CachedBinaryDecoder(using Context, ThrowOrWarn) extends BinaryDecoder:
11-
private val classCache: TrieMap[String, DecodedClass] = TrieMap.empty
12-
private val methodCache: TrieMap[(String, binary.SignedName), DecodedMethod] = TrieMap.empty
13-
private val liftedTreesCache: TrieMap[Symbol, Seq[LiftedTree[?]]] = TrieMap.empty
12+
// even failures can be quite expensive, so we cache them
13+
private val classCache: TrieMap[String, Try[DecodedClass]] = TrieMap.empty
14+
private val methodCache: TrieMap[(String, binary.SignedName), Try[DecodedMethod]] = TrieMap.empty
15+
private val liftedTreesCache: TrieMap[Symbol, Try[Seq[LiftedTree[?]]]] = TrieMap.empty
1416

1517
override def decode(cls: binary.ClassType): DecodedClass =
16-
classCache.getOrElseUpdate(cls.name, super.decode(cls))
18+
classCache.getOrElseUpdate(cls.name, Try(super.decode(cls))).get
1719

1820
override def decode(method: binary.Method): DecodedMethod =
19-
methodCache.getOrElseUpdate((method.declaringClass.name, method.signedName), super.decode(method))
21+
methodCache.getOrElseUpdate((method.declaringClass.name, method.signedName), Try(super.decode(method))).get
2022

2123
override protected def collectAllLiftedTrees(owner: Symbol): Seq[LiftedTree[?]] =
22-
liftedTreesCache.getOrElseUpdate(owner, super.collectAllLiftedTrees(owner))
24+
liftedTreesCache.getOrElseUpdate(owner, Try(super.collectAllLiftedTrees(owner))).get

src/main/scala/ch/epfl/scala/decoder/jdi/JdiClass.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,5 @@ class JdiClass(ref: com.sun.jdi.ReferenceType) extends JdiType(ref) with ClassTy
4343
override def sourceName: Option[String] = Option(ref.sourceName)
4444

4545
private def visibleMethods: Seq[JdiMethod] = ref.visibleMethods.asScala.map(JdiMethod(_)).toSeq
46+
47+
override def toString: String = ref.toString

src/main/scala/ch/epfl/scala/decoder/jdi/JdiClassLoader.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,5 @@ import ch.epfl.scala.decoder.binary.BinaryClassLoader
77
class JdiClassLoader(classLoader: com.sun.jdi.ClassLoaderReference) extends BinaryClassLoader:
88
override def loadClass(name: String): JdiClass =
99
JdiClass(classLoader.visibleClasses.asScala.find(_.name == name).get)
10+
11+
override def toString = classLoader.toString

src/main/scala/ch/epfl/scala/decoder/jdi/JdiField.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,5 @@ class JdiField(field: com.sun.jdi.Field) extends Field:
1111
override def name: String = field.name
1212
override def sourceLines: Option[SourceLines] = None
1313
override def `type`: Type = JdiType(field.`type`)
14+
15+
override def toString: String = field.toString

src/main/scala/ch/epfl/scala/decoder/jdi/JdiLocalVariable.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@ class JdiLocalVariable(localVariable: com.sun.jdi.LocalVariable) extends Paramet
66
override def name: String = localVariable.name
77
override def sourceLines: Option[SourceLines] = None
88
override def `type`: Type = JdiType(localVariable.`type`)
9+
10+
override def toString: String = localVariable.toString

0 commit comments

Comments
 (0)