summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jakob@odersky.com>2016-06-22 18:25:46 -0700
committerJakob Odersky <jakob@odersky.com>2016-06-22 18:25:46 -0700
commitd17aeef7ac428479f53a3bc72eca0716bf30ecfd (patch)
treee0a298f7ceb4421af876a4884bb567e414dee128
parenteece2d3730f62b0f9cb20f4c97a004c3bb2c3323 (diff)
downloadscala-wip-javadoc.tar.gz
scala-wip-javadoc.tar.bz2
scala-wip-javadoc.zip
Add dummy javadoc typer and instrumentationwip-javadoc
-rw-r--r--build.sbt2
-rw-r--r--src/compiler/scala/tools/nsc/ast/DocComments.scala11
-rw-r--r--src/scaladoc/scala/tools/nsc/doc/ScaladocAnalyzer.scala90
-rw-r--r--src/scaladoc/scala/tools/nsc/doc/ScaladocGlobal.scala3
4 files changed, 88 insertions, 18 deletions
diff --git a/build.sbt b/build.sbt
index a25685fee1..fa66d4947d 100644
--- a/build.sbt
+++ b/build.sbt
@@ -115,6 +115,8 @@ baseVersion in Global := "2.12.0"
baseVersionSuffix in Global := "SNAPSHOT"
lazy val commonSettings = clearSourceAndResourceDirectories ++ publishSettings ++ Seq[Setting[_]](
+ publishArtifact in (Compile, packageDoc) := false,
+ publishArtifact in (Compile, packageSrc) := false,
organization := "org.scala-lang",
scalaVersion := bootstrapScalaVersion,
// we don't cross build Scala itself
diff --git a/src/compiler/scala/tools/nsc/ast/DocComments.scala b/src/compiler/scala/tools/nsc/ast/DocComments.scala
index c70690e697..15dee81e77 100644
--- a/src/compiler/scala/tools/nsc/ast/DocComments.scala
+++ b/src/compiler/scala/tools/nsc/ast/DocComments.scala
@@ -74,7 +74,7 @@ trait DocComments { self: Global =>
else DocComment(docStr).template
ownComment = replaceInheritDocToInheritdoc(ownComment)
- superComment(sym) match {
+ val c = superComment(sym) match {
case None =>
// SI-8210 - The warning would be false negative when this symbol is a setter
if (ownComment.indexOf("@inheritdoc") != -1 && ! sym.isSetter)
@@ -84,6 +84,15 @@ trait DocComments { self: Global =>
if (ownComment == "") sc
else expandInheritdoc(sc, merge(sc, ownComment, sym), sym)
}
+ if (sym.toString.contains("magic")) {
+ println("all cooked comments: ")
+ docComments.foreach{d =>
+ println(d)
+ }
+ println("cooked comment for " + sym + ": " + c)
+ }
+
+ c
})
/** The cooked doc comment of symbol `sym` after variable expansion, or "" if missing.
diff --git a/src/scaladoc/scala/tools/nsc/doc/ScaladocAnalyzer.scala b/src/scaladoc/scala/tools/nsc/doc/ScaladocAnalyzer.scala
index b048d96405..530a20fc3a 100644
--- a/src/scaladoc/scala/tools/nsc/doc/ScaladocAnalyzer.scala
+++ b/src/scaladoc/scala/tools/nsc/doc/ScaladocAnalyzer.scala
@@ -16,7 +16,66 @@ trait ScaladocAnalyzer extends Analyzer {
val global : Global // generally, a ScaladocGlobal
import global._
- override def newTyper(context: Context): ScaladocTyper = new Typer(context) with ScaladocTyper
+ override def newTyper(context: Context): Typer = if (context.unit.isJava) {
+ new Typer(context) with ScaladocJavaTyper //super hack
+ } else {
+ new Typer(context) with ScaladocTyper
+ }
+
+ //super hack
+ trait ScaladocJavaTyper extends Typer {
+ private def unit = context.unit
+
+ val docCollector = new Traverser {
+ override def traverse(tree: Tree): Unit = tree match {
+ case dd: DocDef if dd.symbol != null && dd.symbol != NoSymbol =>
+ println("got a docdef: " + dd.comment)
+ docComments(dd.symbol) = dd.comment
+ dd.comment.defineVariables(dd.symbol)
+ case dd: DocDef =>
+ println("Argh!!! No sym in doc comment")
+ case t =>
+ println("Unknown tree: " + t.getClass.getSimpleName)
+ super.traverse(t)
+ }
+ }
+
+
+ override def typed(tree: Tree): Tree = {
+ println("The java typer says hi! From source file: " + unit.source.file.name)
+ docCollector.traverse(tree)
+ tree
+ }
+
+ override protected def macroImplementationNotFoundMessage(name: Name): String = (
+ super.macroImplementationNotFoundMessage(name)
+ + "\nWhen generating scaladocs for multiple projects at once, consider using -Ymacro-no-expand to disable macro expansions altogether."
+ )
+
+ override def typedDocDef(docDef: DocDef, mode: Mode, pt: Type): Tree = {
+ val sym = docDef.symbol
+
+ if ((sym ne null) && (sym ne NoSymbol)) {
+ val comment = docDef.comment
+ docComments(sym) = comment
+ comment.defineVariables(sym)
+ val typer1 = newTyper(context.makeNewScope(docDef, context.owner))
+ for (useCase <- comment.useCases) {
+ typer1.silent(_.asInstanceOf[ScaladocTyper].defineUseCases(useCase)) match {
+ case SilentTypeError(err) =>
+ reporter.warning(useCase.pos, err.errMsg)
+ case _ =>
+ }
+ for (useCaseSym <- useCase.defined) {
+ if (sym.name != useCaseSym.name)
+ reporter.warning(useCase.pos, "@usecase " + useCaseSym.name.decode + " does not match commented symbol: " + sym.name.decode)
+ }
+ }
+ }
+
+ super.typedDocDef(docDef, mode, pt)
+ }
+ }
trait ScaladocTyper extends Typer {
private def unit = context.unit
@@ -110,27 +169,24 @@ abstract class ScaladocSyntaxAnalyzer[G <: Global](val global: G) extends Syntax
if ((doc ne null) && doc.raw.length > 0) {
log(s"joinComment(doc=$doc)")
- val joined = trees map {
- t =>
- DocDef(doc, t) setPos {
- if (t.pos.isDefined) {
- val pos = doc.pos.withEnd(t.pos.end)
- pos.makeTransparent
- } else {
- t.pos
- }
+ val joined = trees map { t =>
+ DocDef(doc, t) setPos {
+ if (t.pos.isDefined) {
+ val pos = doc.pos.withEnd(t.pos.end)
+ pos.makeTransparent
+ } else {
+ t.pos
}
+ }
}
- joined.find(_.pos.isOpaqueRange) foreach {
- main =>
- val mains = List(main)
- joined foreach { t => if (t ne main) ensureNonOverlapping(t, mains) }
+ joined.find(_.pos.isOpaqueRange) foreach { main =>
+ val mains = List(main)
+ joined foreach { t => if (t ne main) ensureNonOverlapping(t, mains) }
}
joined
+ } else {
+ trees
}
- else trees
-
- // trees
}
diff --git a/src/scaladoc/scala/tools/nsc/doc/ScaladocGlobal.scala b/src/scaladoc/scala/tools/nsc/doc/ScaladocGlobal.scala
index 107d81f78a..bdce34f7ca 100644
--- a/src/scaladoc/scala/tools/nsc/doc/ScaladocGlobal.scala
+++ b/src/scaladoc/scala/tools/nsc/doc/ScaladocGlobal.scala
@@ -31,6 +31,9 @@ trait ScaladocGlobalTrait extends Global {
log(s"Suppressing error involving $root: $ex")
}
}
+
+ override def createJavadoc = true
+
}
class ScaladocGlobal(settings: doc.Settings, reporter: Reporter) extends Global(settings, reporter) with ScaladocGlobalTrait {