@@ -277,14 +277,14 @@ class ModelFactory(val global: Global, val settings: doc.Settings) {
277
277
override def linkTarget : DocTemplateImpl = this
278
278
override def toRoot : List [DocTemplateImpl ] = this :: inTpl.toRoot
279
279
280
- protected def inSourceFromSymbol (symbol : Symbol ) =
281
- if (symbol.sourceFile != null && ! symbol.isSynthetic)
282
- Some ((symbol.sourceFile, symbol.pos.line))
280
+ protected def reprSymbol : Symbol = sym
281
+
282
+ def inSource =
283
+ if (reprSymbol.sourceFile != null && ! reprSymbol.isSynthetic)
284
+ Some ((reprSymbol.sourceFile, reprSymbol.pos.line))
283
285
else
284
286
None
285
287
286
- def inSource = inSourceFromSymbol(sym)
287
-
288
288
def sourceUrl = {
289
289
def fixPath (s : String ) = s.replaceAll(" \\ " + java.io.File .separator, " /" )
290
290
val assumedSourceRoot = fixPath(settings.sourcepath.value) stripSuffix " /"
@@ -306,20 +306,10 @@ class ModelFactory(val global: Global, val settings: doc.Settings) {
306
306
else None
307
307
}
308
308
309
- protected def linearizationFromSymbol (symbol : Symbol ): List [(TemplateEntity , TypeEntity )] = {
310
- symbol.ancestors map { ancestor =>
311
- val typeEntity = makeType(symbol.info.baseType(ancestor), this )
312
- val tmplEntity = makeTemplate(ancestor) match {
313
- case tmpl : DocTemplateImpl => tmpl registerSubClass this ; tmpl
314
- case tmpl => tmpl
315
- }
316
- (tmplEntity, typeEntity)
317
- }
318
- }
319
-
320
- lazy val linearization = linearizationFromSymbol(sym)
321
- def linearizationTemplates = linearization map { _._1 }
322
- def linearizationTypes = linearization map { _._2 }
309
+ lazy val (linearizationTemplates, linearizationTypes) =
310
+ reprSymbol.ancestors map { ancestor =>
311
+ (makeTemplate(ancestor), makeType(reprSymbol.info.baseType(ancestor), this ))
312
+ } unzip
323
313
324
314
/* Subclass cache */
325
315
private lazy val subClassesCache = (
@@ -330,8 +320,7 @@ class ModelFactory(val global: Global, val settings: doc.Settings) {
330
320
if (subClassesCache != null )
331
321
subClassesCache += sc
332
322
}
333
- def allSubClasses = if (subClassesCache == null ) Nil else subClassesCache.toList
334
- def directSubClasses = allSubClasses.filter(_.parentTypes.map(_._1).contains(this ))
323
+ def directSubClasses = if (subClassesCache == null ) Nil else subClassesCache.toList
335
324
336
325
/* Implcitly convertible class cache */
337
326
private var implicitlyConvertibleClassesCache : mutable.ListBuffer [(DocTemplateImpl , ImplicitConversionImpl )] = null
@@ -387,10 +376,10 @@ class ModelFactory(val global: Global, val settings: doc.Settings) {
387
376
388
377
members :::= memberSymsLazy.map(modelCreation.createLazyTemplateMember(_, this ))
389
378
390
- // compute linearization to register subclasses
391
- linearization
392
379
outgoingImplicitlyConvertedClasses
393
380
381
+ for (pt <- sym.info.parents; parentTemplate <- findTemplateMaybe(pt.typeSymbol)) parentTemplate registerSubClass this
382
+
394
383
// the members generated by the symbols in memberSymsEager PLUS the members from the usecases
395
384
val allMembers = ownMembers ::: ownMembers.flatMap(_.useCaseOf).distinct
396
385
implicitsShadowing = makeShadowingTable(allMembers, conversions, this )
@@ -472,12 +461,8 @@ class ModelFactory(val global: Global, val settings: doc.Settings) {
472
461
abstract class PackageImpl (sym : Symbol , inTpl : PackageImpl ) extends DocTemplateImpl (sym, inTpl) with Package {
473
462
override def inTemplate = inTpl
474
463
override def toRoot : List [PackageImpl ] = this :: inTpl.toRoot
475
- override lazy val (inSource, linearization) = {
476
- val representive = sym.info.members.find {
477
- s => s.isPackageObject
478
- } getOrElse sym
479
- (inSourceFromSymbol(representive), linearizationFromSymbol(representive))
480
- }
464
+ override def reprSymbol = sym.info.members.find (_.isPackageObject) getOrElse sym
465
+
481
466
def packages = members collect { case p : PackageImpl if ! (droppedPackages contains p) => p }
482
467
}
483
468
0 commit comments