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

scala.tools.nsc.io.ClassAndJarInfo.scala Maven / Gradle / Ivy

There is a newer version: 2.10.2_1
Show newest version
/* NSC -- new Scala compiler
 * Copyright 2005-2011 LAMP/EPFL
 * @author  Paul Phillips
 */

package scala.tools.nsc
package io

import java.net.URL
import collection.JavaConverters._

/** A convenience class for finding the jar with the bytecode for
 *  a given Class object and similar common tasks.
 */
class ClassAndJarInfo[T: ClassManifest] {
  val man   = classManifest[T]
  def clazz = man.erasure

  def baseOfPath(path: String) = path indexOf '!' match {
    case -1   => path stripSuffix internalClassName
    case idx  => path take idx
  }

  def classUrl             = clazz getResource simpleClassName + ".class"
  def codeSource           = protectionDomain.getCodeSource()
  def internalClassName    = internalName + ".class"
  def internalName         = clazz.getName.replace('.', '/')
  def jarManifest          = new JManifest(jarManifestUrl.openStream())
  def jarManifestMainAttrs = jarManifest.getMainAttributes().asScala
  def jarManifestUrl       = new URL(baseOfPath("" + classUrl) + "!/META-INF/MANIFEST.MF")
  def locationFile         = File(locationUrl.toURI.getPath())
  def locationUrl          = if (codeSource == null) new URL("file:///") else codeSource.getLocation()
  def protectionDomain     = clazz.getProtectionDomain()
  def rootClasspath        = rootPossibles find (_.exists)
  def rootFromLocation     = Path(locationUrl.toURI.getPath())
  def rootFromResource     = Path(baseOfPath(classUrl.getPath) stripPrefix "file:")
  def rootPossibles        = Iterator(rootFromResource, rootFromLocation)
  def simpleClassName      = clazz.getName split """[$.]""" last
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy