From 458d3d10cfcd7dd44cb1d6b02de7ea0fdbe6b955 Mon Sep 17 00:00:00 2001 From: michelou Date: Thu, 19 Oct 2006 17:55:05 +0000 Subject: added experimental support for primitive types ... added experimental support for primitive types in DocGenerator.scala --- .../scala/tools/nsc/doc/DocGenerator.scala | 129 +++++++++++++++++++-- src/compiler/scala/tools/nsc/doc/script.js | 20 ++++ 2 files changed, 141 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/compiler/scala/tools/nsc/doc/DocGenerator.scala b/src/compiler/scala/tools/nsc/doc/DocGenerator.scala index c8508bf90e..1c6c6b5fef 100644 --- a/src/compiler/scala/tools/nsc/doc/DocGenerator.scala +++ b/src/compiler/scala/tools/nsc/doc/DocGenerator.scala @@ -75,9 +75,11 @@ abstract class DocGenerator extends Models { def urlFor(tree: Tree, target: String): NodeSeq = try { val sym = tree.symbol if (sym == NoSymbol) - Text(tree.asInstanceOf[ValOrDefDef].name.toString()); - else if (sym.sourceFile == null) Text(sym.fullNameString('.')) - else aref(urlFor(sym), target, sym.nameString) + Text(tree.asInstanceOf[ValOrDefDef].name.toString()) + else if (sym.sourceFile == null) + Text(sym.fullNameString('.')) + else + aref(urlFor(sym), target, sym.nameString) } catch { case e: Error => //System.err.println("SYM=" + sym) @@ -90,13 +92,26 @@ abstract class DocGenerator extends Models { * @return ... */ def urlFor(tpe: Type, target: String): NodeSeq = try { - if (tpe.symbol hasFlag Flags.JAVA) + if (tpe.symbol.hasFlag(Flags.JAVA) || tpe.symbol.sourceFile == null) {tpe.toString()} + target={target}>{tpe.toString()} + /* else if (tpe.symbol.sourceFile == null) Text(tpe.toString()) - else - aref(urlFor(tpe.symbol), target, tpe.toString()) + */ + else { + val n = tpe.typeArgs.length + if (n > 0) + aref(urlFor(tpe.symbol), target, tpe.symbol.fullNameString) + .concat(Text("[") + .concat(urlFor(tpe.typeArgs.head, target)) + .concat( + for (val t <- tpe.typeArgs.tail) + yield Group(Text(", ").concat(urlFor(t, target)))) + .concat(Text("]"))) + else + aref(urlFor(tpe.symbol), target, tpe.toString()) + } } catch { case e: Error => //System.err.println("SYM=" + sym) @@ -303,7 +318,7 @@ abstract class DocGenerator extends Models { else
- Direct known subclasses: + Direct Known Subclasses:
{ { val links = @@ -561,6 +576,59 @@ abstract class DocGenerator extends Models { ; } + private abstract class PrimitiveContentFrame extends ContentFrame0 { + def sym: Symbol + def path = urlFor0(sym, sym) + private def kind = CLASS // todo + def title = + labelFor(kind) + " " + sym.nameString + " in " + + codeFor(kind) + " " + sym.owner.fullNameString('.') + def body = NodeSeq.fromSeq( + + + + + + +
+
in {aref(urlFor(sym.owner), "_self", sym.owner.fullNameString('.'))}
+
+ {Text(codeFor(kind))} + {Text(sym.nameString)} +
+
+ + + + + { { + for (val m <- sym.tpe.decls.toList; m hasFlag Flags.METHOD) yield + + + + + } } +
Def Summary
+ def + { Text(m.nameString + " ").concat(m.tpe match { + case MethodType(params, result) => + (if (params.length > 0) + Text("(").concat(params.map(p => forType(p))).concat(")") + else + NodeSeq.Empty + ).concat(": ").concat(forType(result)) + case _ => + Text(": ").concat(forType(m.tpe)) + }) + } +
) + } + private val loader = getClass().getClassLoader() import scala.collection.mutable.{Map, HashMap} @@ -667,6 +735,51 @@ abstract class DocGenerator extends Models { def path = "index" override def hasBody = false } + new PrimitiveContentFrame { + def sym = definitions.AnyClass + } + new PrimitiveContentFrame { + def sym = definitions.AnyRefClass + } + new PrimitiveContentFrame { + def sym = definitions.BooleanClass + } + new PrimitiveContentFrame { + def sym = definitions.ByteClass + } + new PrimitiveContentFrame { + def sym = definitions.CharClass + } + new PrimitiveContentFrame { + def sym = definitions.DoubleClass + } + new PrimitiveContentFrame { + def sym = definitions.FloatClass + } + new PrimitiveContentFrame { + def sym = definitions.IntClass + } + new PrimitiveContentFrame { + def sym = definitions.LongClass + } + new PrimitiveContentFrame { + def sym = definitions.ShortClass + } + new PrimitiveContentFrame { + def sym = definitions.UnitClass + } + new PrimitiveContentFrame { + def sym = definitions.getClass("scala.runtime.BoxedFloat") + } + new PrimitiveContentFrame { + def sym = definitions.getClass("scala.runtime.BoxedInt") + } + new PrimitiveContentFrame { + def sym = definitions.getClass("scala.runtime.BoxedLong") + } + new PrimitiveContentFrame { + def sym = definitions.BoxedNumberClass + } val rsrcdir = "scala/tools/nsc/doc/".replace('/', File.separatorChar) for (val base <- List("style.css", "script.js")) { try { diff --git a/src/compiler/scala/tools/nsc/doc/script.js b/src/compiler/scala/tools/nsc/doc/script.js index 480e415221..ee462b2139 100644 --- a/src/compiler/scala/tools/nsc/doc/script.js +++ b/src/compiler/scala/tools/nsc/doc/script.js @@ -6,6 +6,9 @@ function setWindowTitle(title) { var java_api_root = 'http://java.sun.com/j2se/1.5.0/docs/api/'; //var java_api_root = 'http://lamp.epfl.ch/~linuxsoft/java/jdk1.5/docs/api/'; +var scala_doc_url = parent.document.URL; +var scala_api_root = scala_doc_url.substring(0, scala_doc_url.lastIndexOf("/")+1); + var ant_api_root = 'http://lamp.epfl.ch/~linuxsoft/ant/manual/api/'; //var ant_api_root = 'http://www.net-freaks.org/doc/ant-1.6.5/manual/api/'; @@ -57,6 +60,23 @@ function init() { table['java_util_Set'] = java_api_root; table['java_util_WeakHashMap'] = java_api_root; + // initialize Scala primitive classes + table['scala_Any'] = scala_api_root; + table['scala_Boolean'] = scala_api_root; + table['scala_Byte'] = scala_api_root; + table['scala_Char'] = scala_api_root; + table['scala_Double'] = scala_api_root; + table['scala_Float'] = scala_api_root; + table['scala_Int'] = scala_api_root; + table['scala_Null'] = scala_api_root; + table['scala_Long'] = scala_api_root; + table['scala_Null'] = scala_api_root; + table['scala_Short'] = scala_api_root; + table['scala_Unit'] = scala_api_root; + table['scala_runtime_BoxedInt'] = scala_api_root; + table['scala_runtime_BoxeFloat'] = scala_api_root; + table['scala_runtime_BoxedNumber'] = scala_api_root; + // initialize Ant classes table['org_apache_tools_ant_BuildEvent'] = ant_api_root; table['org_apache_tools_ant_DirectoryScanner'] = ant_api_root; -- cgit v1.2.3