From b0f84de40b0c83b253e2d56ea21fa0fdd8ad9a29 Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Fri, 12 Aug 2016 12:08:11 -0700 Subject: Javadoc: make parsing of java comments optional --- .../scala/tools/nsc/doc/ScaladocGlobal.scala | 8 ++++++-- src/scaladoc/scala/tools/nsc/doc/Settings.scala | 7 ++++++- .../scala/tools/partest/ScaladocJavaModelTest.scala | 15 +++++++++++++++ test/scaladoc/run/SI-4826-no-comments.check | 1 + test/scaladoc/run/SI-4826-no-comments.scala | 20 ++++++++++++++++++++ test/scaladoc/run/SI-4826.scala | 13 ++----------- 6 files changed, 50 insertions(+), 14 deletions(-) create mode 100644 src/scaladoc/scala/tools/partest/ScaladocJavaModelTest.scala create mode 100644 test/scaladoc/run/SI-4826-no-comments.check create mode 100644 test/scaladoc/run/SI-4826-no-comments.scala diff --git a/src/scaladoc/scala/tools/nsc/doc/ScaladocGlobal.scala b/src/scaladoc/scala/tools/nsc/doc/ScaladocGlobal.scala index 625d074df5..10d8286528 100644 --- a/src/scaladoc/scala/tools/nsc/doc/ScaladocGlobal.scala +++ b/src/scaladoc/scala/tools/nsc/doc/ScaladocGlobal.scala @@ -13,7 +13,11 @@ trait ScaladocGlobalTrait extends Global { override val useOffsetPositions = false override def newUnitParser(unit: CompilationUnit) = new syntaxAnalyzer.ScaladocUnitParser(unit, Nil) - override def newJavaUnitParser(unit: CompilationUnit) = new syntaxAnalyzer.ScaladocJavaUnitParser(unit) + override def newJavaUnitParser(unit: CompilationUnit) = if (createJavadoc) { + new syntaxAnalyzer.ScaladocJavaUnitParser(unit) + } else { + super.newJavaUnitParser(unit) + } override lazy val syntaxAnalyzer = new ScaladocSyntaxAnalyzer[outer.type](outer) { val runsAfter = List[String]() @@ -41,7 +45,7 @@ class ScaladocGlobal(settings: doc.Settings, reporter: Reporter) extends Global( phasesSet += analyzer.typerFactory } override def forScaladoc = true - override def createJavadoc = true + override def createJavadoc = if (settings.docNoJavaComments.value) false else true override lazy val analyzer = new { val global: ScaladocGlobal.this.type = ScaladocGlobal.this diff --git a/src/scaladoc/scala/tools/nsc/doc/Settings.scala b/src/scaladoc/scala/tools/nsc/doc/Settings.scala index 59380dd782..063a949323 100644 --- a/src/scaladoc/scala/tools/nsc/doc/Settings.scala +++ b/src/scaladoc/scala/tools/nsc/doc/Settings.scala @@ -213,6 +213,11 @@ class Settings(error: String => Unit, val printMsg: String => Unit = println(_)) "Group similar functions together (based on the @group annotation)" ) + val docNoJavaComments = BooleanSetting ( + "-no-java-comments", + "Prevents parsing and inclusion of comments from java sources." + ) + // For improved help output. def scaladocSpecific = Set[Settings#Setting]( docformat, doctitle, docfooter, docversion, docUncompilable, docsourceurl, docgenerator, docRootContent, useStupidTypes, @@ -222,7 +227,7 @@ class Settings(error: String => Unit, val printMsg: String => Unit = println(_)) docImplicits, docImplicitsDebug, docImplicitsShowAll, docImplicitsHide, docImplicitsSoundShadowing, docDiagramsMaxNormalClasses, docDiagramsMaxImplicitClasses, docNoPrefixes, docNoLinkWarnings, docRawOutput, docSkipPackages, - docExpandAllTypes, docGroups + docExpandAllTypes, docGroups, docNoJavaComments ) val isScaladocSpecific: String => Boolean = scaladocSpecific map (_.name) diff --git a/src/scaladoc/scala/tools/partest/ScaladocJavaModelTest.scala b/src/scaladoc/scala/tools/partest/ScaladocJavaModelTest.scala new file mode 100644 index 0000000000..1008be5b87 --- /dev/null +++ b/src/scaladoc/scala/tools/partest/ScaladocJavaModelTest.scala @@ -0,0 +1,15 @@ +package scala.tools.partest + +import scala.tools.nsc.doc.Universe + +/** A class for testing scaladoc model generation on java sources. */ +abstract class ScaladocJavaModelTest extends ScaladocModelTest { + + // overridden to pass explicit files to newDocFactory.makeUniverse (rather than code strings) + // since the .java file extension is required + override def model: Option[Universe] = { + val path = resourcePath + "/" + resourceFile + newDocFactory.makeUniverse(Left(List(path))) + } + +} diff --git a/test/scaladoc/run/SI-4826-no-comments.check b/test/scaladoc/run/SI-4826-no-comments.check new file mode 100644 index 0000000000..3925a0d464 --- /dev/null +++ b/test/scaladoc/run/SI-4826-no-comments.check @@ -0,0 +1 @@ +Done. \ No newline at end of file diff --git a/test/scaladoc/run/SI-4826-no-comments.scala b/test/scaladoc/run/SI-4826-no-comments.scala new file mode 100644 index 0000000000..217fc29d81 --- /dev/null +++ b/test/scaladoc/run/SI-4826-no-comments.scala @@ -0,0 +1,20 @@ +import scala.tools.nsc.doc.Universe +import scala.tools.nsc.doc.model._ +import scala.tools.partest.ScaladocJavaModelTest + +object Test extends ScaladocJavaModelTest { + + override def resourceFile = "SI-4826.java" + override def scaladocSettings = "-no-java-comments" + + def testModel(rootPackage: Package) = { + import access._ + + val base = rootPackage._package("test")._package("scaladoc") + val clazz = base._class("JavaComments") + val method = clazz._method("answer") + + assert(clazz.comment == None) + assert(method.comment == None) + } +} diff --git a/test/scaladoc/run/SI-4826.scala b/test/scaladoc/run/SI-4826.scala index 277ff37692..6d4b3a6da7 100644 --- a/test/scaladoc/run/SI-4826.scala +++ b/test/scaladoc/run/SI-4826.scala @@ -1,19 +1,10 @@ import scala.tools.nsc.doc.Universe import scala.tools.nsc.doc.model._ -import scala.tools.partest.ScaladocModelTest +import scala.tools.partest.ScaladocJavaModelTest -object Test extends ScaladocModelTest { +object Test extends ScaladocJavaModelTest { override def resourceFile = "SI-4826.java" - - // overridden to pass explicit files to newDocFactory.makeUniverse (rather than code strings) - // since the .java file extension is required - override def model: Option[Universe] = { - val path = resourcePath + "/" + resourceFile - newDocFactory.makeUniverse(Left(List(path))) - } - - // no need for special settings override def scaladocSettings = "" def testModel(rootPackage: Package) = { -- cgit v1.2.3