Skip to content

Commit f3f622d

Browse files
committed
support Scala 2.13.0-RC1
avoid early initializers, adapt to post-2.13.0-M5 changes to TypeCollector (namely scala/scala#7321), and so on
1 parent 6d3e244 commit f3f622d

File tree

9 files changed

+312
-161
lines changed

9 files changed

+312
-161
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ env:
1515
- SCALA_VERSION=2.12.6
1616
- SCALA_VERSION=2.12.7
1717
- SCALA_VERSION=2.12.8
18-
- SCALA_VERSION=2.13.0-M5
18+
- SCALA_VERSION=2.13.0-RC1
1919

2020
# 2.11.12 was the first Scala 2.11.x version to work on jdk11
2121
matrix:

build.sbt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ lazy val `genjavadoc-plugin` = (project in file("plugin"))
4040
val default = (unmanagedSourceDirectories in Compile).value
4141
def r(from: String, to: String) = default.map(f => new java.io.File(f.getPath.replaceAll(from, to)))
4242
if (scalaVersion.value == "2.12.0") r("""/scala-2\.12$""", "/scala-2.11")
43-
else if (scalaMajorVersion.value == 13) r("""/scala-2\.13[^/]*$""", "/scala-2.12")
43+
else if (scalaMajorVersion.value == 13) r("""/scala-2\.13[^/]*$""", "/scala-2.13")
4444
else default
4545
},
4646
crossVersion := CrossVersion.full,
@@ -58,7 +58,7 @@ lazy val defaults = Seq(
5858
val earliest211 = 6
5959
val latest211 = 12
6060
val latest212 = 8
61-
val pre213 = List("M5")
61+
val pre213 = List("RC1")
6262
val skipVersions = Set("2.11.9", "2.11.10")
6363
val scala211Versions =
6464
(earliest211 to latest211)
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.typesafe.genjavadoc
2+
3+
trait NeedsJavaSig { this: TransformCake =>
4+
5+
import global._
6+
import definitions._
7+
8+
def needsJavaSig(tp: Type): Boolean =
9+
!settings.Ynogenericsig.value && NeedsSigCollector.collect(tp)
10+
11+
private object NeedsSigCollector extends TypeCollector(false) {
12+
private def rebindInnerClass(pre: Type, cls: Symbol): Type =
13+
if (cls.owner.isClass) cls.owner.tpe else pre // why not cls.isNestedClass?
14+
override def traverse(tp: Type): Unit = {
15+
if (!result) {
16+
tp match {
17+
case st: SubType =>
18+
traverse(st.supertype)
19+
case TypeRef(pre, sym, args) =>
20+
if (sym == ArrayClass) args foreach traverse
21+
else if (sym.isTypeParameterOrSkolem || sym.isExistentiallyBound || !args.isEmpty) result = true
22+
else if (sym.isClass) traverse(rebindInnerClass(pre, sym)) // #2585
23+
else if (!sym.owner.isPackageClass) traverse(pre)
24+
case PolyType(_, _) | ExistentialType(_, _) =>
25+
result = true
26+
case RefinedType(parents, _) =>
27+
parents foreach traverse
28+
case ClassInfoType(parents, _, _) =>
29+
parents foreach traverse
30+
case at: AnnotatedType =>
31+
traverse(at.underlying)
32+
case _ =>
33+
mapOver(tp)
34+
}
35+
}
36+
}
37+
}
38+
39+
}
40+
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.typesafe.genjavadoc
2+
3+
trait NeedsJavaSig { this: TransformCake =>
4+
5+
import global._
6+
import definitions._
7+
8+
def needsJavaSig(tp: Type): Boolean =
9+
!settings.Ynogenericsig.value && NeedsSigCollector.collect(tp)
10+
11+
private object NeedsSigCollector extends TypeCollector(false) {
12+
private def rebindInnerClass(pre: Type, cls: Symbol): Type =
13+
if (cls.owner.isClass) cls.owner.tpe else pre // why not cls.isNestedClass?
14+
override def traverse(tp: Type): Unit = {
15+
if (!result) {
16+
tp match {
17+
case st: SubType =>
18+
traverse(st.supertype)
19+
case TypeRef(pre, sym, args) =>
20+
if (sym == ArrayClass) args foreach traverse
21+
else if (sym.isTypeParameterOrSkolem || sym.isExistentiallyBound || !args.isEmpty) result = true
22+
else if (sym.isClass) traverse(rebindInnerClass(pre, sym)) // #2585
23+
else if (!sym.owner.isPackageClass) traverse(pre)
24+
case PolyType(_, _) | ExistentialType(_, _) =>
25+
result = true
26+
case RefinedType(parents, _) =>
27+
parents foreach traverse
28+
case ClassInfoType(parents, _, _) =>
29+
parents foreach traverse
30+
case at: AnnotatedType =>
31+
traverse(at.underlying)
32+
case _ =>
33+
mapOver(tp)
34+
}
35+
}
36+
}
37+
}
38+
39+
}
40+
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.typesafe.genjavadoc
2+
3+
import scala.reflect.internal.util.Position
4+
import scala.tools.nsc.doc.ScaladocSyntaxAnalyzer
5+
6+
trait Comments extends BaseComments { this: TransformCake =>
7+
lazy val parser = new ScaladocSyntaxAnalyzer[global.type](global) {
8+
val runsAfter = List[String]()
9+
val runsRightAfter = None
10+
}
11+
override def parseComments(): Unit =
12+
new parser.ScaladocUnitParser(unit, Nil) {
13+
override def newScanner = new parser.ScaladocUnitScanner(unit, Nil) {
14+
override def registerDocComment(str: String, pos: Position) = {
15+
super.registerDocComment(str, pos)
16+
comments += pos -> Comment(pos, str)
17+
}
18+
}
19+
}.parse()
20+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.typesafe.genjavadoc
2+
3+
trait NeedsJavaSig { this: TransformCake =>
4+
5+
import global._
6+
import definitions._
7+
8+
def needsJavaSig(tp: Type): Boolean =
9+
!settings.Ynogenericsig.value && NeedsSigCollector.collect(tp)
10+
11+
private object NeedsSigCollector extends TypeCollector(false) {
12+
private def rebindInnerClass(pre: Type, cls: Symbol): Type =
13+
if (cls.owner.isClass) cls.owner.tpe else pre // why not cls.isNestedClass?
14+
// the rest is mostly copy and paste from NeedsSigCollector in nsc/transform/Erasure.scala
15+
@annotation.tailrec
16+
private[this] def untilApply(ts: List[Type]): Unit =
17+
if (! ts.isEmpty && ! result) { apply(ts.head) ; untilApply(ts.tail) }
18+
override def apply(tp: Type): Unit = {
19+
if (!result) {
20+
tp match {
21+
case st: SubType =>
22+
apply(st.supertype)
23+
case TypeRef(pre, sym, args) =>
24+
if (sym == ArrayClass) untilApply(args)
25+
else if (sym.isTypeParameterOrSkolem || sym.isExistentiallyBound || !args.isEmpty) result = true
26+
else if (sym.isClass) apply(rebindInnerClass(pre, sym)) // #2585
27+
else if (!sym.owner.isPackageClass) apply(pre)
28+
case PolyType(_, _) | ExistentialType(_, _) =>
29+
result = true
30+
case RefinedType(parents, _) =>
31+
untilApply(parents)
32+
case ClassInfoType(parents, _, _) =>
33+
untilApply(parents)
34+
case at: AnnotatedType =>
35+
apply(at.underlying)
36+
case _ =>
37+
tp.foldOver(this)
38+
}
39+
}
40+
}
41+
}
42+
43+
}
44+

plugin/src/main/scala/com/typesafe/genjavadoc/JavaSig.scala

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.typesafe.genjavadoc
22

33
import scala.reflect.internal.ClassfileConstants
44

5-
trait JavaSig { this: TransformCake =>
5+
trait JavaSig extends NeedsJavaSig { this: TransformCake =>
66
import global._
77
import definitions._
88

@@ -181,36 +181,6 @@ trait JavaSig { this: TransformCake =>
181181
else result
182182
}
183183

184-
private object NeedsSigCollector extends TypeCollector(false) {
185-
def traverse(tp: Type): Unit = {
186-
if (!result) {
187-
tp match {
188-
case st: SubType =>
189-
traverse(st.supertype)
190-
case TypeRef(pre, sym, args) =>
191-
if (sym == ArrayClass) args foreach traverse
192-
else if (sym.isTypeParameterOrSkolem || sym.isExistentiallyBound || !args.isEmpty) result = true
193-
else if (sym.isClass) traverse(rebindInnerClass(pre, sym)) // #2585
194-
else if (!sym.owner.isPackageClass) traverse(pre)
195-
case PolyType(_, _) | ExistentialType(_, _) =>
196-
result = true
197-
case RefinedType(parents, _) =>
198-
parents foreach traverse
199-
case ClassInfoType(parents, _, _) =>
200-
parents foreach traverse
201-
case at: AnnotatedType =>
202-
traverse(at.underlying)
203-
case _ =>
204-
mapOver(tp)
205-
}
206-
}
207-
}
208-
}
209-
210-
private def rebindInnerClass(pre: Type, cls: Symbol): Type = {
211-
if (cls.owner.isClass) cls.owner.tpe else pre // why not cls.isNestedClass?
212-
}
213-
214184
private def hiBounds(bounds: TypeBounds): List[Type] = bounds.hi.normalize match {
215185
case RefinedType(parents, _) => parents map (_.normalize)
216186
case tp => tp :: Nil
@@ -229,8 +199,6 @@ trait JavaSig { this: TransformCake =>
229199
(initialSymbol.enclClassChain.exists(sym isNestedIn _)) ||
230200
(initialSymbol.isMethod && initialSymbol.typeParams.contains(sym))))
231201

232-
private def needsJavaSig(tp: Type) = !settings.Ynogenericsig.value && NeedsSigCollector.collect(tp)
233-
234202
class UnknownSig extends Exception
235203

236204
}

0 commit comments

Comments
 (0)