@@ -16,18 +16,22 @@ object ClassPathEntries {
16
16
17
17
trait BinaryFileEntry extends ClassRepresentation {
18
18
def file : AbstractFile
19
+ def binary : Option [AbstractFile ] = Some (file)
19
20
}
20
21
object BinaryFileEntry {
21
22
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)
23
26
24
27
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)
27
30
28
31
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 (_))
31
35
}
32
36
33
37
trait SourceFileEntry extends ClassRepresentation {
@@ -60,38 +64,40 @@ trait PackageEntry {
60
64
def name : String
61
65
}
62
66
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 {
70
68
final def fileName : String = file.name
71
69
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
+ }
72
74
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)
73
79
def source : Option [AbstractFile ] = None
74
80
}
75
81
76
82
private [dotty] case class SourceFileEntryImpl (file : AbstractFile ) extends SourceFileEntry {
77
83
final def fileName : String = file.name
78
84
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
81
87
def tasty : Option [AbstractFile ] = None
82
88
def source : Option [AbstractFile ] = Some (file)
83
89
}
84
90
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 )
88
94
assert(tasty.map(_.`extension` == " tasty" ).getOrElse(true ), tasty)
89
95
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)
94
97
98
+ final def fileName : String = classFile.name
99
+ def name : String = FileUtils .stripClassExtension(classFile.name)
100
+ def binary : Option [AbstractFile ] = tasty.orElse(classfile)
95
101
def source : Option [AbstractFile ] = Some (srcFile)
96
102
}
97
103
@@ -108,5 +114,5 @@ private[dotty] trait NoClassPaths {
108
114
}
109
115
private [dotty] object ClassAndSourceFilesEntry {
110
116
def apply (binary : ClassRepresentation , source : AbstractFile ): ClassRepresentation =
111
- ClassAndSourceFilesEntry (binary.classFile , binary.tasty, source)
117
+ ClassAndSourceFilesEntry (binary.classfile , binary.tasty, source)
112
118
}
0 commit comments