All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ch.epfl.scala.debugadapter.ClassPathEntry.scala Maven / Gradle / Ivy

package ch.epfl.scala.debugadapter

import java.nio.file.Path
import java.net.URL

sealed trait ClassPathEntry extends ClassEntry {
  def absolutePath: Path

  override def classSystems: Seq[ClassSystem] = Seq(classSystem)

  def readBytes(classFile: String): Array[Byte] = classSystem.readBytes(classFile)

  private def classSystem: ClassSystem = if (isJar) ClassJar(absolutePath) else ClassDirectory(absolutePath)
  private def isJar: Boolean = absolutePath.toString.endsWith(".jar")
  def toURL: URL = absolutePath.toUri.toURL
}

final case class UnmanagedEntry(absolutePath: Path) extends ClassPathEntry {
  override def name: String = absolutePath.toString
  override def sourceEntries: Seq[SourceEntry] = Seq.empty
}

sealed trait ManagedEntry extends ClassPathEntry {
  def scalaVersion: Option[ScalaVersion]
  def isScala2: Boolean = scalaVersion.exists(_.isScala2)
  def isScala3: Boolean = scalaVersion.exists(_.isScala3)
  def isJava: Boolean = scalaVersion.isEmpty
}

final case class Module(
    name: String,
    scalaVersion: Option[ScalaVersion],
    scalacOptions: Seq[String],
    absolutePath: Path,
    sourceEntries: Seq[SourceEntry]
) extends ManagedEntry

final case class Library(artifactId: String, version: String, absolutePath: Path, sourceEntries: Seq[SourceEntry])
    extends ManagedEntry {
  override def name: String = artifactId
  def scalaVersion: Option[ScalaVersion] = {
    if (artifactId == "scala-library") Some(ScalaVersion(version))
    else {
      artifactId
        .split('_')
        .lastOption
        .filter(bv => bv.startsWith("2.12") || bv.startsWith("2.13") || bv.startsWith("3"))
        .map(ScalaVersion.apply)
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy