diff options
author | Jakob Odersky <jakob@odersky.com> | 2016-06-22 14:38:42 -0700 |
---|---|---|
committer | Jakob Odersky <jakob@odersky.com> | 2016-06-22 14:38:42 -0700 |
commit | eece2d3730f62b0f9cb20f4c97a004c3bb2c3323 (patch) | |
tree | 257ef112aa62576cc96edbd796076b255273a369 | |
parent | da1774df8d2921073304481e93278ddfd997aae4 (diff) | |
download | scala-eece2d3730f62b0f9cb20f4c97a004c3bb2c3323.tar.gz scala-eece2d3730f62b0f9cb20f4c97a004c3bb2c3323.tar.bz2 scala-eece2d3730f62b0f9cb20f4c97a004c3bb2c3323.zip |
Fix javadoc position parsing
-rw-r--r-- | src/compiler/scala/tools/nsc/javac/JavaParsers.scala | 4 | ||||
-rw-r--r-- | src/scaladoc/scala/tools/nsc/doc/ScaladocAnalyzer.scala | 33 |
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 { |