summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jakob@odersky.com>2016-06-22 14:38:42 -0700
committerJakob Odersky <jakob@odersky.com>2016-06-22 14:38:42 -0700
commiteece2d3730f62b0f9cb20f4c97a004c3bb2c3323 (patch)
tree257ef112aa62576cc96edbd796076b255273a369
parentda1774df8d2921073304481e93278ddfd997aae4 (diff)
downloadscala-eece2d3730f62b0f9cb20f4c97a004c3bb2c3323.tar.gz
scala-eece2d3730f62b0f9cb20f4c97a004c3bb2c3323.tar.bz2
scala-eece2d3730f62b0f9cb20f4c97a004c3bb2c3323.zip
Fix javadoc position parsing
-rw-r--r--src/compiler/scala/tools/nsc/javac/JavaParsers.scala4
-rw-r--r--src/scaladoc/scala/tools/nsc/doc/ScaladocAnalyzer.scala33
2 files changed, 16 insertions, 21 deletions
diff --git a/src/compiler/scala/tools/nsc/javac/JavaParsers.scala b/src/compiler/scala/tools/nsc/javac/JavaParsers.scala
index 13ffe631f4..b23b23d54c 100644
--- a/src/compiler/scala/tools/nsc/javac/JavaParsers.scala
+++ b/src/compiler/scala/tools/nsc/javac/JavaParsers.scala
@@ -726,7 +726,7 @@ trait JavaParsers extends ast.parser.ParsersCommon with JavaScanners {
in.nextToken()
} else {
if (in.token == ENUM || definesInterface(in.token)) mods |= Flags.STATIC
- val decls = memberDecl(mods, parentToken)
+ val decls = joinComment(memberDecl(mods, parentToken))
(if (mods.hasStaticFlag || inInterface && !(decls exists (_.isInstanceOf[DefDef])))
statics
else
@@ -744,7 +744,7 @@ trait JavaParsers extends ast.parser.ParsersCommon with JavaScanners {
}
val sdefs = statics.toList
val idefs = members.toList ::: (sdefs flatMap forwarders)
- (sdefs, joinComment(idefs))
+ (sdefs, idefs)
}
def annotationParents = List(
gen.scalaAnnotationDot(tpnme.Annotation),
diff --git a/src/scaladoc/scala/tools/nsc/doc/ScaladocAnalyzer.scala b/src/scaladoc/scala/tools/nsc/doc/ScaladocAnalyzer.scala
index a16b306322..b048d96405 100644
--- a/src/scaladoc/scala/tools/nsc/doc/ScaladocAnalyzer.scala
+++ b/src/scaladoc/scala/tools/nsc/doc/ScaladocAnalyzer.scala
@@ -115,7 +115,6 @@ abstract class ScaladocSyntaxAnalyzer[G <: Global](val global: G) extends Syntax
DocDef(doc, t) setPos {
if (t.pos.isDefined) {
val pos = doc.pos.withEnd(t.pos.end)
- // always make the position transparent
pos.makeTransparent
} else {
t.pos
@@ -139,21 +138,15 @@ abstract class ScaladocSyntaxAnalyzer[G <: Global](val global: G) extends Syntax
class ScaladocJavaUnitScanner(unit: CompilationUnit) extends JavaUnitScanner(unit) {
- //is the scanner currently in a doc comment
- var inDocComment = false
- var docStart: Int = 0
-
- /** buffer for the documentation comment
- */
- val docBuffer: StringBuilder = new StringBuilder
-
- var lastDoc: DocComment = null
- def flushDoc() = try lastDoc finally lastDoc = null
+ private val docBuffer: StringBuilder = new StringBuilder
+ private var inDocComment = false //is the scanner currently in a doc comment
+ private var docStart: Int = 0
+ private var lastDoc: DocComment = null
+ def flushDoc(): DocComment = try lastDoc finally lastDoc = null
- /** add the given character to the documentation buffer
- */
- override protected def putCommentChar(): Unit = {
+ /** add the current character to the documentation buffer */
+ override protected def putCommentChar(): Unit = {
if (inDocComment) docBuffer append in.ch
in.next
}
@@ -161,7 +154,7 @@ abstract class ScaladocSyntaxAnalyzer[G <: Global](val global: G) extends Syntax
override protected def skipBlockComment(isDoc: Boolean): Unit = {
if (!inDocComment && isDoc) {
docBuffer append "/*" // at this point, in.ch == * and will be appended next
- docStart = in.cpos
+ docStart = currentPos.start
inDocComment = true
}
super.skipBlockComment(isDoc)
@@ -170,11 +163,13 @@ abstract class ScaladocSyntaxAnalyzer[G <: Global](val global: G) extends Syntax
override protected def skipComment(): Boolean = {
val skipped = super.skipComment()
if (skipped && inDocComment) {
- val str = docBuffer.toString
+ val raw = docBuffer.toString
+ val position = Position.range(unit.source, docStart, docStart, in.cpos - 1)
+ println(Position.formatMessage(position, "Start of java doc comment: ", true))
+ println(Position.formatMessage(position.focusEnd, "End of java doc comment: ", true))
+ lastDoc = DocComment(raw, position)
+ signalParsedDocComment(raw, position)
docBuffer.setLength(0) //clear buffer
- val p = Position.range(unit.source, docStart - 2, docStart - 2, in.cpos)
- signalParsedDocComment(str, p)
- lastDoc = DocComment(str, p)
inDocComment = false
true
} else {