From cc57d03af8a97c4b9a6162acbc3a727384bb8a86 Mon Sep 17 00:00:00 2001 From: Antonio Cunei Date: Mon, 19 Jul 2010 15:55:31 +0000 Subject: Merged revisions 22594-22595 via svnmerge from https://lampsvn.epfl.ch/svn-repos/scala/scala/trunk ........ r22594 | dubochet | 2010-07-19 17:11:30 +0200 (Mon, 19 Jul 2010) | 1 line [scaladoc] Singleton types (`this.type`) are correctly printed. Closes #1445. Review by malayeri. ........ r22595 | odersky | 2010-07-19 17:19:45 +0200 (Mon, 19 Jul 2010) | 1 line added missing file. ........ --- .../scala/tools/nsc/doc/model/ModelFactory.scala | 11 ++++++++- .../scala/tools/nsc/util/InterruptReq.scala | 28 ++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 src/compiler/scala/tools/nsc/util/InterruptReq.scala (limited to 'src') diff --git a/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala b/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala index 2e4e4f83bc..87242eebf5 100644 --- a/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala +++ b/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala @@ -125,7 +125,14 @@ class ModelFactory(val global: Global, val settings: doc.Settings) { thisFactory def inheritedFrom = if (inTemplate.sym == this.sym.owner || inTemplate.sym.isPackage) Nil else makeTemplate(this.sym.owner) :: (sym.allOverriddenSymbols map { os => makeTemplate(os.owner) }) - def resultType = makeType(sym.tpe.finalResultType, inTemplate, sym) + def resultType = { + def resultTpe(tpe: Type): Type = tpe match { // similar to finalResultType, except that it leaves singleton types alone + case PolyType(_, res) => resultTpe(res) + case MethodType(_, res) => resultTpe(res) + case _ => tpe + } + makeType(resultTpe(sym.tpe), inTemplate, sym) + } def isDef = false def isVal = false def isLazyVal = false @@ -451,6 +458,8 @@ class ModelFactory(val global: Global, val settings: doc.Settings) { thisFactory if (sym.isClass || sym.isModule || sym == NoSymbol) sym else ownerTpl(sym.owner) val tpe = if (thisFactory.settings.useStupidTypes.value) aType else { + def ownerTpl(sym: Symbol): Symbol = + if (sym.isClass || sym.isModule || sym == NoSymbol) sym else ownerTpl(sym.owner) val fixedSym = if (inTpl.sym.isModule) inTpl.sym.moduleClass else inTpl.sym aType.asSeenFrom(fixedSym.thisType, ownerTpl(dclSym)) } diff --git a/src/compiler/scala/tools/nsc/util/InterruptReq.scala b/src/compiler/scala/tools/nsc/util/InterruptReq.scala new file mode 100644 index 0000000000..aa7804acbe --- /dev/null +++ b/src/compiler/scala/tools/nsc/util/InterruptReq.scala @@ -0,0 +1,28 @@ +package scala.tools.nsc +package util + +/** A class of work items to be used in interrupt requests. + */ +abstract class InterruptReq { + /** The result type of the operation + */ + type R + + /** The operation to be performed */ + protected val todo: () => R + + /** The result provided */ + private var result: Option[R] = None + + /** To be called from interrupted server to execute demanded task */ + def execute(): Unit = synchronized { + result = Some(todo()) + notify() + } + + /** To be called from interrupting client to get result fo interrupt */ + def getResult(): R = synchronized { + while (result.isEmpty) wait() + result.get + } +} -- cgit v1.2.3