/* sbt -- Simple Build Tool * Copyright 2010 Mark Harrah */ package sbt package inc import xsbti.api.Source import java.io.File import APIs.getAPI trait APIs { /** The API for the source file `src` at the time represented by this instance. * This method returns an empty API if the file had no API or is not known to this instance. */ def internalAPI(src: File): Source /** The API for the external class `ext` at the time represented by this instance. * This method returns an empty API if the file had no API or is not known to this instance. */ def externalAPI(ext: String): Source def allExternals: collection.Set[String] def allInternalSources: collection.Set[File] def ++ (o: APIs): APIs def markInternalSource(src: File, api: Source): APIs def markExternalAPI(ext: String, api: Source): APIs def removeInternal(remove: Iterable[File]): APIs def filterExt(keep: String => Boolean): APIs def internal: Map[File, Source] def external: Map[String, Source] } object APIs { def apply(internal: Map[File, Source], external: Map[String, Source]): APIs = new MAPIs(internal, external) def empty: APIs = apply(Map.empty, Map.empty) val emptyAPI = new xsbti.api.Source(Array(), Array()) def getAPI[T](map: Map[T, Source], src: T): Source = map.getOrElse(src, emptyAPI) } private class MAPIs(val internal: Map[File, Source], val external: Map[String, Source]) extends APIs { def allInternalSources: collection.Set[File] = internal.keySet def allExternals: collection.Set[String] = external.keySet def ++ (o: APIs): APIs = new MAPIs(internal ++ o.internal, external ++ o.external) def markInternalSource(src: File, api: Source): APIs = new MAPIs(internal.updated(src, api), external) def markExternalAPI(ext: String, api: Source): APIs = new MAPIs(internal, external.updated(ext, api)) def removeInternal(remove: Iterable[File]): APIs = new MAPIs(internal -- remove, external) def filterExt(keep: String => Boolean): APIs = new MAPIs(internal, external.filterKeys(keep)) def internalAPI(src: File) = getAPI(internal, src) def externalAPI(ext: String) = getAPI(external, ext) }