Skip to content

Commit d2f579a

Browse files
committed
Refactor BinaryFileEntry
1 parent 88784ec commit d2f579a

File tree

4 files changed

+33
-27
lines changed

4 files changed

+33
-27
lines changed

compiler/src/dotty/tools/dotc/classpath/AggregateClassPath.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,8 @@ case class AggregateClassPath(aggregates: Seq[ClassPath]) extends ClassPath {
130130
if !existing.binary.isDefined && entry.binary.isDefined then
131131
mergedEntries(index) = ClassAndSourceFilesEntry(entry, existing.source.get)
132132
else if
133-
existing.classFile.isDefined && !existing.tasty.isDefined
134-
&& !entry.classFile.isDefined && entry.tasty.isDefined
133+
existing.classfile.isDefined && !existing.tasty.isDefined
134+
&& !entry.classfile.isDefined && entry.tasty.isDefined
135135
then
136136
mergedEntries(index) = existing.source match
137137
case Some(source) => ClassAndSourceFilesEntry(entry, source)

compiler/src/dotty/tools/dotc/classpath/ClassPath.scala

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,22 @@ object ClassPathEntries {
1616

1717
trait BinaryFileEntry extends ClassRepresentation {
1818
def file: AbstractFile
19+
def binary: Option[AbstractFile] = Some(file)
1920
}
2021
object BinaryFileEntry {
2122
def apply(classFile: Option[AbstractFile], tasty: Option[AbstractFile]): BinaryFileEntry =
22-
BinaryFileEntryImpl(classFile, tasty)
23+
tasty match
24+
case Some(tasty) => TastyFileEntry(tasty, classFile)
25+
case None => ClassFileEntry(classFile.get)
2326

2427
def apply(file: AbstractFile): BinaryFileEntry =
25-
if file.extension == "tasty" then BinaryFileEntryImpl(classFile = None, tasty = Some(file))
26-
else BinaryFileEntryImpl(classFile = Some(file), tasty = None)
28+
if file.extension == "tasty" then TastyFileEntry(file, None)
29+
else ClassFileEntry(file)
2730

2831
def from(classFile: Option[AbstractFile], tasty: Option[AbstractFile]): Option[BinaryFileEntry] =
29-
if classFile.isDefined || tasty.isDefined then Some(BinaryFileEntryImpl(classFile, tasty))
30-
else None
32+
tasty match
33+
case Some(file) => Some(TastyFileEntry(file, classFile))
34+
case None => classFile.map(ClassFileEntry(_))
3135
}
3236

3337
trait SourceFileEntry extends ClassRepresentation {
@@ -60,38 +64,40 @@ trait PackageEntry {
6064
def name: String
6165
}
6266

63-
private[dotty] case class BinaryFileEntryImpl(classFile: Option[AbstractFile], tasty: Option[AbstractFile]) extends BinaryFileEntry {
64-
// TODO remove assertions once all tests pass
65-
assert(classFile.isDefined || tasty.isDefined)
66-
assert(classFile.map(file => file.`extension` == "class" || file.`extension` == "sig").getOrElse(true), classFile)
67-
assert(tasty.map(_.`extension` == "tasty").getOrElse(true), tasty)
68-
def file = tasty.getOrElse(classFile.get)
69-
67+
private[dotty] case class ClassFileEntry(file: AbstractFile) extends BinaryFileEntry {
7068
final def fileName: String = file.name
7169
def name: String = FileUtils.stripClassExtension(file.name) // class name
70+
def classfile: Option[AbstractFile] = Some(file)
71+
def tasty: Option[AbstractFile] = None
72+
def source: Option[AbstractFile] = None
73+
}
7274

75+
private[dotty] case class TastyFileEntry(file: AbstractFile, classfile: Option[AbstractFile]) extends BinaryFileEntry {
76+
final def fileName: String = file.name
77+
def name: String = FileUtils.stripClassExtension(file.name) // class name
78+
def tasty: Option[AbstractFile] = Some(file)
7379
def source: Option[AbstractFile] = None
7480
}
7581

7682
private[dotty] case class SourceFileEntryImpl(file: AbstractFile) extends SourceFileEntry {
7783
final def fileName: String = file.name
7884
def name: String = FileUtils.stripSourceExtension(file.name)
79-
80-
def classFile: Option[AbstractFile] = None
85+
def binary: Option[AbstractFile] = None
86+
def classfile: Option[AbstractFile] = None
8187
def tasty: Option[AbstractFile] = None
8288
def source: Option[AbstractFile] = Some(file)
8389
}
8490

85-
private[dotty] case class ClassAndSourceFilesEntry(classFile: Option[AbstractFile], tasty: Option[AbstractFile], srcFile: AbstractFile) extends ClassRepresentation {
86-
assert(classFile.isDefined || tasty.isDefined)
87-
assert(classFile.map(_.`extension` == "class").getOrElse(true), classFile)
91+
private[dotty] case class ClassAndSourceFilesEntry(classfile: Option[AbstractFile], tasty: Option[AbstractFile], srcFile: AbstractFile) extends ClassRepresentation {
92+
assert(classfile.isDefined || tasty.isDefined)
93+
assert(classfile.map(_.`extension` == "class").getOrElse(true), classfile)
8894
assert(tasty.map(_.`extension` == "tasty").getOrElse(true), tasty)
8995

90-
private def classfile = tasty.getOrElse(classFile.get)
91-
92-
final def fileName: String = classfile.name
93-
def name: String = FileUtils.stripClassExtension(classfile.name)
96+
private def classFile = tasty.getOrElse(classfile.get)
9497

98+
final def fileName: String = classFile.name
99+
def name: String = FileUtils.stripClassExtension(classFile.name)
100+
def binary: Option[AbstractFile] = tasty.orElse(classfile)
95101
def source: Option[AbstractFile] = Some(srcFile)
96102
}
97103

@@ -108,5 +114,5 @@ private[dotty] trait NoClassPaths {
108114
}
109115
private[dotty] object ClassAndSourceFilesEntry {
110116
def apply(binary: ClassRepresentation, source: AbstractFile): ClassRepresentation =
111-
ClassAndSourceFilesEntry(binary.classFile, binary.tasty, source)
117+
ClassAndSourceFilesEntry(binary.classfile, binary.tasty, source)
112118
}

compiler/src/dotty/tools/dotc/classpath/ZipAndJarFileLookupFactory.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ object ZipAndJarClassPathFactory extends ZipAndJarFileLookupFactory {
5252
val (pkg, simpleClassName) = PackageNameUtils.separatePkgAndClassNames(className)
5353
val binaries = files(PackageName(pkg), simpleClassName + ".tasty", simpleClassName + ".class")
5454
BinaryFileEntry.from(
55-
binaries.find(_.classFile.isDefined).flatMap(_.classFile),
55+
binaries.find(_.classfile.isDefined).flatMap(_.classfile),
5656
binaries.find(_.tasty.isDefined).flatMap(_.tasty),
5757
)
5858
}

compiler/src/dotty/tools/io/ClassPath.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@ object ClassPath {
200200
trait ClassRepresentation {
201201
def fileName: String
202202
def name: String
203-
def binary: Option[AbstractFile] = tasty.orElse(classFile)
204-
def classFile: Option[AbstractFile]
203+
def binary: Option[AbstractFile]
204+
def classfile: Option[AbstractFile]
205205
def tasty: Option[AbstractFile]
206206
def source: Option[AbstractFile]
207207

0 commit comments

Comments
 (0)