Dotty Documentation

0.5.0-bin-SNAPSHOT

case class AggregateClassPath
extends Object with ClassPath with Product

A classpath unifying multiple class- and sourcepath entries. The Classpath can obtain entries for classes and sources independently so it tries to do operations quite optimally - iterating only these collections which are needed in the given moment and only as far as it's necessary.

[-] Constructors

AggregateClassPath ( aggregates: Seq [ ClassPath ] )

[-] Members

[+] val aggregates : Seq [ ClassPath ]
[+] private val packageIndex : Map [ String, Seq [ ClassPath ] ]
[+] private def aggregatesForPackage ( pkg: String ) : Seq [ ClassPath ]
[+] override def asClassPathStrings : Seq [ String ]
[+] override def asSourcePathString : String

The whole sourcepath in the form of one String.

[+] override def asURLs : Seq [ URL ]
[+] override def classes ( inPackage: String ) : Seq [ ClassFileEntry ]
[+] override def findClass ( className: String ) : Option [ ClassRepresentation ]

Returns the class file and / or source file for a given external name, e.g., "java.lang.String". If there is both a class file and source file, the compiler can decide whether to read the class file or compile the source file.

Internally this seems to be used only by ScriptRunner, but only to call .isDefined. That could probably be implemented differently.

Externally, it is used by sbt's compiler interface: https://github.com/sbt/sbt/blob/v0.13.15/compile/interface/src/main/scala/xsbt/CompilerInterface.scala#L249 Jason has some improvements for that in the works (https://github.com/scala/bug/issues/10289#issuecomment-310022699)

[+] override def findClassFile ( className: String ) : Option [ AbstractFile ]

Returns the classfile for an external name, e.g., "java.lang.String". This method does not return source files.

This method is used by the classfile parser. When parsing a Java class, its own inner classes are entered with a ClassfileLoader that parses the classfile returned by this method. It is also used in the backend, by the inliner, to obtain the bytecode when inlining from the classpath. It's also used by scalap.

[+] private def getDistinctEntries ( getEntries: ClassPath => Seq [ EntryType ] ) : Seq [ EntryType ]
[+] override def hasPackage ( pkg: String ) : Boolean
[+] override def list ( inPackage: String ) : ClassPathEntries

Returns packages and classes (source or classfile) that are members of inPackage (not recursively). The inPackage string is a full package name, e.g., "scala.collection".

This is the main method uses to find classes, see class PackageLoader. The rootMirror.rootLoader is created with inPackage = "".

[+] private def mergeClassesAndSources ( entries: [ Seq [ ClassRepresentation ] ] ) : Seq [ ClassRepresentation ]

Returns only one entry for each name. If there's both a source and a class entry, it creates an entry containing both of them. If there would be more than one class or source entries for the same class it always would use the first entry of each type found on a classpath.

[+] override def packages ( inPackage: String ) : Seq [ PackageEntry ]
[+] override def sources ( inPackage: String ) : Seq [ SourceFileEntry ]