summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormichelou <michelou@epfl.ch>2007-10-17 13:53:37 +0000
committermichelou <michelou@epfl.ch>2007-10-17 13:53:37 +0000
commitc3f4ef6104761bd04c59aee70c0bace32aae05ec (patch)
tree071923e825a6776d983a90ff5907ca0eb4b215f3
parent363a042442955607c69e2b25b5a848c67a2b05a8 (diff)
downloadscala-c3f4ef6104761bd04c59aee70c0bace32aae05ec.tar.gz
scala-c3f4ef6104761bd04c59aee70c0bace32aae05ec.tar.bz2
scala-c3f4ef6104761bd04c59aee70c0bace32aae05ec.zip
fixed #185 and #187
-rw-r--r--src/compiler/scala/tools/nsc/Settings.scala4
-rw-r--r--src/compiler/scala/tools/nsc/doc/DocDriver.scala47
-rw-r--r--src/compiler/scala/tools/nsc/doc/ModelExtractor.scala35
-rw-r--r--src/compiler/scala/tools/nsc/reporters/ConsoleReporter.scala27
4 files changed, 66 insertions, 47 deletions
diff --git a/src/compiler/scala/tools/nsc/Settings.scala b/src/compiler/scala/tools/nsc/Settings.scala
index 91fcaa87f2..68df5f5ade 100644
--- a/src/compiler/scala/tools/nsc/Settings.scala
+++ b/src/compiler/scala/tools/nsc/Settings.scala
@@ -144,7 +144,7 @@ class Settings(error: String => Unit) {
val logAll = BooleanSetting ("-Ylog-all", "Log all operations").hideToIDE
val noimports = BooleanSetting ("-Yno-imports", "Compile without any implicit imports")
val nopredefs = BooleanSetting ("-Yno-predefs", "Compile without any implicit predefined values")
- val script = StringSetting ("-Xscript", "object", "compile as a script, wrapping the code into object.main()", "").hideToIDE
+ val script = StringSetting ("-Xscript", "object", "Compile as a script, wrapping the code into object.main()", "").hideToIDE
val Xshowtrees = BooleanSetting ("-Yshow-trees", "Show detailed trees when used in connection with -print:phase").hideToIDE
val skip = PhasesSetting ("-Yskip", "Skip")
val Xsqueeze = ChoiceSetting ("-Ysqueeze", "if on, creates compact code in matching", List("on","on","off"), "on")
@@ -156,6 +156,8 @@ class Settings(error: String => Unit) {
/*default*/"off")
/** scaladoc specific options */
+ val memberaccess = ChoiceSetting ("-access", "Show only public, protected/public (default) or all classes and members",
+ List("public", "protected", "private"), "protected").dependsOn(doc)
val pagebottom = StringSetting ("-bottom", "pagebottom", "Include bottom text for each page", "").dependsOn(doc)
val doccharset = StringSetting ("-charset", "doccharset", "Charset for cross-platform viewing of generated documentation.", "").dependsOn(doc)
val doctitle = StringSetting ("-doctitle", "doctitle", "Include title for the overview page", "Scala 2<br/>API Specification").dependsOn(doc)
diff --git a/src/compiler/scala/tools/nsc/doc/DocDriver.scala b/src/compiler/scala/tools/nsc/doc/DocDriver.scala
index e4ee365c5d..21a91a4f50 100644
--- a/src/compiler/scala/tools/nsc/doc/DocDriver.scala
+++ b/src/compiler/scala/tools/nsc/doc/DocDriver.scala
@@ -32,26 +32,33 @@ abstract class DocDriver extends ModelFrames with ModelToXML {
}
def process(units: Iterator[CompilationUnit]) {
- assert(global.definitions != null);
+ assert(global.definitions != null)
def g(pkg: Package, clazz: ClassOrObject) {
- allClasses(pkg) += clazz;
- clazz.decls.map(_._2).foreach {
- case clazz : ClassOrObject => g(pkg, clazz)
- case _ =>
+ if (isAccessible(clazz.sym)) {
+ allClasses(pkg) += clazz
+ clazz.decls.map(_._2).foreach {
+ case clazz : ClassOrObject => g(pkg, clazz)
+ case _ =>
+ }
}
}
- def f(pkg: Package, tree: Tree): Unit = if (tree != EmptyTree && !tree.symbol.hasFlag(symtab.Flags.PRIVATE)) tree match {
- case tree : PackageDef =>
- val pkg1 = new Package(tree.symbol.asInstanceOf[ModuleSymbol]);
- tree.stats.foreach(stat => f(pkg1, stat))
- case tree : ClassDef =>
- assert(pkg != null);
- g(pkg, new TopLevelClass(tree.symbol.asInstanceOf[ClassSymbol]))
- case tree : ModuleDef =>
- assert(pkg != null);
- g(pkg, new TopLevelObject(tree.symbol.asInstanceOf[ModuleSymbol]))
- case _ =>
+ def f(pkg: Package, tree: Tree) {
+ if (tree != EmptyTree && tree.hasSymbol) {
+ val sym = tree.symbol
+ if (sym != NoSymbol && !sym.hasFlag(symtab.Flags.PRIVATE)) tree match {
+ case tree : PackageDef =>
+ val pkg1 = new Package(sym.asInstanceOf[ModuleSymbol])
+ tree.stats.foreach(stat => f(pkg1, stat))
+ case tree : ClassDef =>
+ assert(pkg != null)
+ g(pkg, new TopLevelClass(sym.asInstanceOf[ClassSymbol]))
+ case tree : ModuleDef =>
+ assert(pkg != null)
+ g(pkg, new TopLevelObject(sym.asInstanceOf[ModuleSymbol]))
+ case _ =>
+ }
+ }
}
units.foreach(unit => f(null, unit.body))
@@ -94,7 +101,7 @@ abstract class DocDriver extends ModelFrames with ModelToXML {
}
}
- for ((pkg0,classes0) <- allClasses) {
+ for ((pkg0, classes0) <- allClasses) {
new ListClassFrame with Frame {
def title =
"List of classes and objects in package " + pkg0.fullName('.')
@@ -115,21 +122,21 @@ abstract class DocDriver extends ModelFrames with ModelToXML {
}
}
for (sym <- additions) sym match {
- case sym : ClassSymbol =>
+ case sym: ClassSymbol =>
val add = new TopLevelClass(sym)
new ClassContentFrame with Frame {
def clazz = add
def title =
add.kind + " " + add.name + " in package " + add.sym.owner.fullNameString('.')
}
- case sym :TypeSymbol =>
+ case sym: TypeSymbol =>
val add = new TopLevelClass(sym)
new ClassContentFrame with Frame {
def clazz = add
def title =
add.kind + " " + add.name + " in package " + add.sym.owner.fullNameString('.')
}
- case sym :ModuleSymbol =>
+ case sym: ModuleSymbol =>
val add = new TopLevelObject(sym)
new ClassContentFrame with Frame {
def clazz = add
diff --git a/src/compiler/scala/tools/nsc/doc/ModelExtractor.scala b/src/compiler/scala/tools/nsc/doc/ModelExtractor.scala
index 62fbd4a065..b7d00ec9c3 100644
--- a/src/compiler/scala/tools/nsc/doc/ModelExtractor.scala
+++ b/src/compiler/scala/tools/nsc/doc/ModelExtractor.scala
@@ -206,6 +206,16 @@ trait ModelExtractor {
0
}
+ def isAccessible(sym: Symbol): Boolean = {
+ import symtab.Flags._
+ settings.memberaccess.value match {
+ case "private" => sym.isPublic || (sym hasFlag PROTECTED) || (sym hasFlag PRIVATE)
+ case "protected" => sym.isPublic || (sym hasFlag PROTECTED)
+ case "public" => sym.isPublic
+ case _ => false
+ }
+ }
+
trait ClassOrObject extends Entity {
def path : List[ClassOrObject] = this :: Nil;
override def listName = path.map(_.name).mkString("",".","");
@@ -230,11 +240,11 @@ trait ModelExtractor {
else this(arg) = new ConstructorParam(arg);
});
}
- object decls extends jcl.LinkedHashMap[Symbol,Member] {
+ object decls extends jcl.LinkedHashMap[Symbol, Member] {
sym.tpe.decls.elements.foreach(e => {
if (!constructorArgs.contains(e)) {
- val m = Member(e);
- if (!m.isEmpty && !this.contains(e)) this.put(e, m.get);
+ val m = Member(e)
+ if (!m.isEmpty && !this.contains(e)) this.put(e, m.get)
}
});
}
@@ -300,9 +310,9 @@ trait ModelExtractor {
override def kind = "def"
}
case class Val(override val sym: TermSymbol) extends ValDef(sym) {
- def resultType0 : Type = sym.tpe;
+ def resultType0: Type = sym.tpe
override def kind = {
- import symtab.Flags._;
+ import symtab.Flags._
if (sym.hasFlag(ACCESSOR)) {
val setterName = nme.getterToSetter(sym.name);
val setter = sym.owner.info.decl(setterName);
@@ -313,22 +323,22 @@ trait ModelExtractor {
}
}
}
- case class AbstractType(override val sym : Symbol) extends Member(sym) {
- override def kind = "type";
+ case class AbstractType(override val sym: Symbol) extends Member(sym) {
+ override def kind = "type"
}
- abstract class NestedClassOrObject(override val sym : Symbol) extends Member(sym) with ClassOrObject {
- override def path : List[ClassOrObject] = ClassOrObject.this.path ::: (super.path);
+ abstract class NestedClassOrObject(override val sym: Symbol) extends Member(sym) with ClassOrObject {
+ override def path: List[ClassOrObject] = ClassOrObject.this.path ::: (super.path);
}
case class NestedClass(override val sym : ClassSymbol) extends NestedClassOrObject(sym) with Clazz;
case class NestedObject(override val sym : ModuleSymbol) extends NestedClassOrObject(sym) with Object;
- def isVisible(sym : Symbol) : Boolean = {
- import symtab.Flags._;
+ def isVisible(sym : Symbol): Boolean = {
+ import symtab.Flags._
if (sym.isLocalClass) return false
if (sym.isLocal) return false
if (sym.isPrivateLocal) return false
- if (sym.hasFlag(PRIVATE)) return false
+ if (sym.hasFlag(PRIVATE)) return !inIDE //false
if (sym.hasFlag(SYNTHETIC)) return false
if (sym.hasFlag(BRIDGE)) return false
if (sym.nameString.indexOf("$") != -1) return false
@@ -339,6 +349,7 @@ trait ModelExtractor {
import global._
import symtab.Flags
if (!isVisible(sym)) return None;
+ if (!isAccessible(sym)) return None;
if (sym.hasFlag(Flags.ACCESSOR)) {
if (sym.isSetter) return None;
assert(sym.isGetter);
diff --git a/src/compiler/scala/tools/nsc/reporters/ConsoleReporter.scala b/src/compiler/scala/tools/nsc/reporters/ConsoleReporter.scala
index 519ae106f7..6960280986 100644
--- a/src/compiler/scala/tools/nsc/reporters/ConsoleReporter.scala
+++ b/src/compiler/scala/tools/nsc/reporters/ConsoleReporter.scala
@@ -9,8 +9,6 @@ package scala.tools.nsc.reporters
import java.io.{BufferedReader, InputStreamReader, IOException, PrintWriter}
import util._
-import compat.StringBuilder
-
/**
* This class implements a Reporter that displays messages on a text
* console.
@@ -25,7 +23,7 @@ class ConsoleReporter(val settings: Settings, reader: BufferedReader, writer: Pr
case INFO => null
}
- private def clabel(severity : Severity) = {
+ private def clabel(severity: Severity): String = {
val label0 = label(severity)
if (label0 eq null) "" else label0 + ": "
}
@@ -41,12 +39,11 @@ class ConsoleReporter(val settings: Settings, reader: BufferedReader, writer: Pr
private def getCountString(severity: Severity): String =
countElementsAsString((severity).count, label(severity))
-
/** Prints the message. */
def printMessage(msg: String) = writer.println(msg)
/** Prints the message with the given position indication. */
- def printMessage(posIn: Position, msg: String): Unit =
+ def printMessage(posIn: Position, msg: String) {
if (posIn ne null) {
val pos = posIn.inUltimateSource(posIn.source.getOrElse(null))
val buf = new StringBuilder(msg)
@@ -57,7 +54,7 @@ class ConsoleReporter(val settings: Settings, reader: BufferedReader, writer: Pr
//println(getSource.file)
pos match {
case FakePos(msg) =>
- buf.insert(0, msg)
+ buf.insert(0, msg + " ")
case _ if !pos.source.isEmpty =>
val file = pos.source.get.file
buf.insert(0, if (shortname) file.name else file.path)
@@ -68,14 +65,16 @@ class ConsoleReporter(val settings: Settings, reader: BufferedReader, writer: Pr
printSourceLine(pos)
} else
printMessage(msg)
+ }
- def print(pos: Position, msg: String, severity: Severity) =
+ def print(pos: Position, msg: String, severity: Severity) {
printMessage(pos, clabel(severity) + msg)
+ }
/**
* @param pos ...
*/
- def printSourceLine(pos: Position) = {
+ def printSourceLine(pos: Position) {
printMessage(pos.lineContent.stripLineEnd)
printColumnMarker(pos)
}
@@ -89,20 +88,20 @@ class ConsoleReporter(val settings: Settings, reader: BufferedReader, writer: Pr
var i = 1
while (i < pos.column.get) {
buffer.append(' ')
- i = i + 1
+ i += 1
}
if (pos.column.get > 0) buffer.append('^')
printMessage(buffer.toString())
}
/** Prints the number of errors and warnings if their are non-zero. */
- def printSummary() = {
+ def printSummary() {
if (WARNING.count > 0) printMessage(getCountString(WARNING) + " found")
if ( ERROR.count > 0) printMessage(getCountString(ERROR ) + " found")
}
- def display(pos: Position, msg: String, severity: Severity): Unit = {
- severity.count = severity.count + 1
+ def display(pos: Position, msg: String, severity: Severity) {
+ severity.count += 1
print(pos, msg, severity)
}
@@ -114,9 +113,9 @@ class ConsoleReporter(val settings: Settings, reader: BufferedReader, writer: Pr
var line = reader.readLine()
if (line ne null) {
line = line.toLowerCase()
- if ("abort".startsWith(line))
+ if ("abort" startsWith line)
throw new Error("user abort")
- if ("resume".startsWith(line)) continue = false
+ if ("resume" startsWith line) continue = false
}
}
} catch {