diff options
author | Paul Phillips <paulp@improving.org> | 2012-02-28 08:08:30 -0800 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-02-28 08:25:01 -0800 |
commit | f3711b634ccfa6ef4ab14ffc8d12d244de6917c2 (patch) | |
tree | e7ba70b582b23f787ab3d8f6fc2d5b146f8c58ab /src | |
parent | 0bcc8f8f92bbee772924813d00512f3765d4beee (diff) | |
download | scala-f3711b634ccfa6ef4ab14ffc8d12d244de6917c2.tar.gz scala-f3711b634ccfa6ef4ab14ffc8d12d244de6917c2.tar.bz2 scala-f3711b634ccfa6ef4ab14ffc8d12d244de6917c2.zip |
Improving error message.
Hacked filename into message to alleviate meaningless
"_$1 defined twice" error condition. References SI-4893.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/ContextErrors.scala | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/ContextErrors.scala b/src/compiler/scala/tools/nsc/typechecker/ContextErrors.scala index ea5223e32f..140df53816 100644 --- a/src/compiler/scala/tools/nsc/typechecker/ContextErrors.scala +++ b/src/compiler/scala/tools/nsc/typechecker/ContextErrors.scala @@ -624,11 +624,21 @@ trait ContextErrors { setError(tree) } - // checkNoDoubleDefs... - def DefDefinedTwiceError(sym0: Symbol, sym1: Symbol) = - issueSymbolTypeError(sym0, sym1+" is defined twice"+ - {if(!settings.debug.value) "" else " in "+context0.unit}+ - {if (sym0.isMacro && sym1.isMacro) " \n(note that macros cannot be overloaded)" else ""}) + // checkNoDoubleDefs... + // @PP: I hacked the filename in (context0.unit) to work around SI-4893. It would be + // much better if every symbol could offer some idea of where it came from, else + // the obviously untrue claim that something has been defined twice can only frustrate. + // There's no direct test because partest doesn't work, but to reproduce, separately + // compile the next two lines: + // package object foo { val x: Class[_] = null } + // package foo + def DefDefinedTwiceError(sym0: Symbol, sym1: Symbol) = { + val isBug = sym0.isAbstractType && sym1.isAbstractType && (sym0.name startsWith "_$") + issueSymbolTypeError(sym0, sym1+" is defined twice in " + context0.unit + + ( if (sym0.isMacro && sym1.isMacro) "\n(note that macros cannot be overloaded)" else "" ) + + ( if (isBug) "\n(this error is likely due to a bug in the scala compiler involving wildcards in package objects)" else "" ) + ) + } // cyclic errors def CyclicAliasingOrSubtypingError(errPos: Position, sym0: Symbol) = |