From ca392540e36bf1fc52350901b3faf5bc08f4175c Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Mon, 7 Mar 2011 11:22:44 +0000 Subject: More signature work arising from actually looki... More signature work arising from actually looking at the signatures. Slightly improved the coverage of the tests. No review. --- src/compiler/scala/tools/nsc/transform/Erasure.scala | 10 +++++++--- src/partest/scala/tools/partest/ReplTest.scala | 10 ++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/compiler/scala/tools/nsc/transform/Erasure.scala b/src/compiler/scala/tools/nsc/transform/Erasure.scala index a2ab678e36..7030b70082 100644 --- a/src/compiler/scala/tools/nsc/transform/Erasure.scala +++ b/src/compiler/scala/tools/nsc/transform/Erasure.scala @@ -203,12 +203,16 @@ abstract class Erasure extends AddInterfaces // only refer to type params that will actually make it into the sig, this excludes: // * higher-order type parameters - // * parameters of methods + // * type parameters appearing in method parameters // * type members not visible in an enclosing template private def isTypeParameterInSig(sym: Symbol, initialSymbol: Symbol) = ( !sym.isHigherOrderTypeParameter && - sym.isTypeParameterOrSkolem && - initialSymbol.enclClassChain.exists(sym isNestedIn _) + sym.isTypeParameterOrSkolem && ( + (initialSymbol.enclClassChain.exists(sym isNestedIn _)) || + traceSig.seq("isMethod", Seq(initialSymbol, initialSymbol.typeParams)) { + (initialSymbol.isMethod && initialSymbol.typeParams.contains(sym)) + } + ) ) // Ensure every '.' in the generated signature immediately follows diff --git a/src/partest/scala/tools/partest/ReplTest.scala b/src/partest/scala/tools/partest/ReplTest.scala index 232d605bb0..b7bd8efcf4 100644 --- a/src/partest/scala/tools/partest/ReplTest.scala +++ b/src/partest/scala/tools/partest/ReplTest.scala @@ -17,3 +17,13 @@ abstract class ReplTest extends App { show() } + +trait SigTest { + def returnType[T: Manifest](methodName: String) = ( + classManifest[T].erasure.getMethods + . filter (x => !x.isBridge && x.getName == methodName) + . map (_.getGenericReturnType.toString) + ) + def show[T: Manifest](methodName: String) = + println(manifest[T].erasure.getName +: returnType[T](methodName).distinct mkString " ") +} -- cgit v1.2.3