diff options
Diffstat (limited to 'src/compiler/scala/tools/nsc/javac/JavaScanners.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/javac/JavaScanners.scala | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/compiler/scala/tools/nsc/javac/JavaScanners.scala b/src/compiler/scala/tools/nsc/javac/JavaScanners.scala index e11ac94041..f77e53c54b 100644 --- a/src/compiler/scala/tools/nsc/javac/JavaScanners.scala +++ b/src/compiler/scala/tools/nsc/javac/JavaScanners.scala @@ -215,7 +215,7 @@ trait JavaScanners extends ast.parser.ScannersCommon { * * @author Martin Odersky */ - abstract class JavaScanner extends AbstractJavaScanner with JavaTokenData with Cloneable with ScannerCommon { + abstract class JavaScanner extends AbstractJavaScanner with JavaTokenData with Cloneable with ScannerCommon with DocScanner { override def intVal = super.intVal// todo: needed? override def floatVal = super.floatVal def currentPos: Position = g2p(pos - 1) @@ -577,27 +577,32 @@ trait JavaScanners extends ast.parser.ScannersCommon { } } - protected def putCommentChar(): Unit = in.next() + final protected def putCommentChar(): Unit = { processCommentChar(); in.next() } - protected def skipBlockComment(isDoc: Boolean): Unit = in.ch match { - case SU => incompleteInputError("unclosed comment") - case '*' => putCommentChar() ; if (in.ch == '/') putCommentChar() else skipBlockComment(isDoc) - case _ => putCommentChar() ; skipBlockComment(isDoc) + @tailrec final protected def skipBlockComment(isDoc: Boolean): Unit = { + if (isDoc) beginDocComment("/*") // the second '*' is the current character + + in.ch match { + case SU => incompleteInputError("unclosed comment") + case '*' => putCommentChar() ; if (in.ch == '/') putCommentChar() else skipBlockComment(isDoc) + case _ => putCommentChar() ; skipBlockComment(isDoc) + } } - protected def skipLineComment(): Unit = in.ch match { + @tailrec final protected def skipLineComment(): Unit = in.ch match { case CR | LF | SU => case _ => putCommentChar() ; skipLineComment() } - protected def skipComment(): Boolean = in.ch match { - case '/' => putCommentChar() ; skipLineComment() ; true + final protected def skipComment(): Boolean = in.ch match { + case '/' => putCommentChar() ; skipLineComment() ; finishDocComment() ; true case '*' => putCommentChar() in.ch match { case '*' => skipBlockComment(isDoc = true) case _ => skipBlockComment(isDoc = false) } + finishDocComment() true case _ => false } |