Skip to content

Commit d54503b

Browse files
committed
reduce duplicate error by position to pass ErrorMessagesTests.anonymousFunctionMissingParamType
1 parent 607dd77 commit d54503b

File tree

6 files changed

+26
-43
lines changed

6 files changed

+26
-43
lines changed

compiler/src/dotty/tools/dotc/core/Contexts.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import Implicits.ContextualImplicits
2323
import config.Settings._
2424
import config.Config
2525
import reporting._
26-
import reporting.diagnostic.Message
26+
import reporting.diagnostic.messages.Error
2727
import collection.mutable
2828
import collection.immutable.BitSet
2929
import printing._
@@ -636,7 +636,7 @@ object Contexts {
636636
* instead of storing message computations directly in ErrorTypes in order
637637
* to avoid space leaks - the message computation usually captures a context.
638638
*/
639-
private[core] val errorTypeMsg = mutable.Map[ErrorType, () => Message]()
639+
private[core] val errorTypeError = mutable.Map[ErrorType, () => Error]()
640640

641641
// Phases state
642642

@@ -664,7 +664,7 @@ object Contexts {
664664

665665
def reset() = {
666666
for ((_, set) <- uniqueSets) set.clear()
667-
errorTypeMsg.clear()
667+
errorTypeError.clear()
668668
}
669669

670670
// Test that access is single threaded

compiler/src/dotty/tools/dotc/core/Symbols.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import ast.tpd
2525
import tpd.Tree
2626
import ast.TreeTypeMap
2727
import Constants.Constant
28-
import reporting.diagnostic.Message
28+
import reporting.diagnostic.messages.Error
2929
import Denotations.{ Denotation, SingleDenotation, MultiDenotation }
3030
import collection.mutable
3131
import io.AbstractFile
@@ -301,8 +301,8 @@ trait Symbols { this: Context =>
301301
*/
302302
def newSkolem(tp: Type) = newSymbol(defn.RootClass, nme.SKOLEM, SyntheticArtifact | Permanent, tp)
303303

304-
def newErrorSymbol(owner: Symbol, name: Name, msg: => Message) = {
305-
val errType = ErrorType(msg)
304+
def newErrorSymbol(owner: Symbol, name: Name, err: => Error) = {
305+
val errType = ErrorType(err)
306306
newSymbol(owner, name, SyntheticArtifact,
307307
if (name.isTypeName) TypeAlias(errType) else errType)
308308
}

compiler/src/dotty/tools/dotc/core/Types.scala

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import util.Positions.{Position, NoPosition}
2121
import util.Stats._
2222
import util.{DotClass, SimpleMap}
2323
import reporting.diagnostic.Message
24+
import reporting.diagnostic.messages.Error
2425
import reporting.diagnostic.messages.CyclicReferenceInvolving
2526
import ast.tpd._
2627
import ast.TreeTypeMap
@@ -453,7 +454,7 @@ object Types {
453454
case tp: TypeProxy =>
454455
tp.underlying.findDecl(name, excluded)
455456
case err: ErrorType =>
456-
ctx.newErrorSymbol(classSymbol orElse defn.RootClass, name, err.msg)
457+
ctx.newErrorSymbol(classSymbol orElse defn.RootClass, name, err.error)
457458
case _ =>
458459
NoDenotation
459460
}
@@ -519,7 +520,7 @@ object Types {
519520
case tp: JavaArrayType =>
520521
defn.ObjectType.findMember(name, pre, excluded)
521522
case err: ErrorType =>
522-
ctx.newErrorSymbol(pre.classSymbol orElse defn.RootClass, name, err.msg)
523+
ctx.newErrorSymbol(pre.classSymbol orElse defn.RootClass, name, err.error)
523524
case _ =>
524525
NoDenotation
525526
}
@@ -1762,7 +1763,7 @@ object Types {
17621763
else { // name has changed; try load in earlier phase and make current
17631764
val d = loadDenot(ctx.withPhase(ctx.phaseId - 1)).current
17641765
if (d.exists) d
1765-
else throw new Error(s"failure to reload $this of class $getClass")
1766+
else throw new scala.Error(s"failure to reload $this of class $getClass")
17661767
}
17671768
}
17681769

@@ -3633,22 +3634,24 @@ object Types {
36333634
abstract class FlexType extends UncachedGroundType with ValueType
36343635

36353636
class ErrorType private[Types] () extends FlexType {
3636-
def msg(implicit ctx: Context): Message =
3637-
ctx.errorTypeMsg.get(this) match {
3638-
case Some(msgFun) => msgFun()
3639-
case None => "error message from previous run no longer available"
3637+
def error(implicit ctx: Context): Error =
3638+
ctx.errorTypeError.get(this) match {
3639+
case Some(errFun) => errFun()
3640+
case None => new Error("error message from previous run no longer available", NoPosition)
36403641
}
36413642
}
36423643
object ErrorType {
3643-
def apply(msg: => Message)(implicit ctx: Context): ErrorType = {
3644+
def apply(msg: => Message)(implicit ctx: Context): ErrorType = apply(new Error(msg, NoPosition))
3645+
3646+
def apply(err: Error)(implicit ctx: Context): ErrorType = {
36443647
val et = new ErrorType
3645-
ctx.base.errorTypeMsg(et) = () => msg
3648+
ctx.base.errorTypeError(et) = () => err
36463649
et
36473650
}
36483651
}
36493652

36503653
object UnspecifiedErrorType extends ErrorType() {
3651-
override def msg(implicit ctx: Context): Message = "unspecified error"
3654+
override def error(implicit ctx: Context): Error = new Error("unspecified error", NoPosition)
36523655
}
36533656

36543657
/* Type used to track Select nodes that could not resolve a member and their qualifier is a scala.Dynamic. */

compiler/src/dotty/tools/dotc/typer/ErrorReporting.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ object ErrorReporting {
2323

2424
def errorType(msg: => Message, pos: Position)(implicit ctx: Context): ErrorType = {
2525
ctx.error(msg, pos)
26-
ErrorType(msg)
26+
ErrorType(new Error(msg, pos))
2727
}
2828

2929
def cyclicErrorMsg(ex: CyclicReference)(implicit ctx: Context) = {

compiler/src/dotty/tools/dotc/typer/Typer.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2251,7 +2251,10 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit
22512251
* tree that went unreported. A scenario where this happens is i1802.scala.
22522252
*/
22532253
def ensureReported(tp: Type) = tp match {
2254-
case err: ErrorType if !ctx.reporter.hasErrors => ctx.error(err.msg, tree.pos)
2254+
case err: ErrorType
2255+
if !ctx.reporter.hasErrors &&
2256+
(!err.error.pos.exists || err.error.pos == ctx.source.atPos(tree.pos)) =>
2257+
ctx.error(err.error.message, tree.pos)
22552258
case _ =>
22562259
}
22572260

compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
5656
}
5757
.expect { (ictx, messages) =>
5858
implicit val ctx: Context = ictx
59-
val defn = ictx.definitions
6059

6160
assertMessageCount(1, messages)
6261
val OverridesNothing(member) :: Nil = messages
@@ -78,7 +77,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
7877
}
7978
.expect { (ictx, messages) =>
8079
implicit val ctx: Context = ictx
81-
val defn = ictx.definitions
8280

8381
assertMessageCount(1, messages)
8482
val OverridesNothingButNameExists(member, sameName) :: Nil = messages
@@ -103,7 +101,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
103101
}
104102
.expect { (ictx, messages) =>
105103
implicit val ctx: Context = ictx
106-
val defn = ictx.definitions
107104

108105
assertMessageCount(1, messages)
109106
val ForwardReferenceExtendsOverDefinition(value, definition) :: Nil = messages
@@ -121,7 +118,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
121118
}
122119
.expect { (ictx, messages) =>
123120
implicit val ctx: Context = ictx
124-
val defn = ictx.definitions
125121

126122
assertMessageCount(1, messages)
127123
val ExpectedTokenButFound(expected, found) :: Nil = messages
@@ -153,7 +149,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
153149
}
154150
.expect { (ictx, messages) =>
155151
implicit val ctx: Context = ictx
156-
val defn = ictx.definitions
157152

158153
assertMessageCount(1, messages)
159154
val MixedLeftAndRightAssociativeOps(op1, op2, op2LeftAssoc) :: Nil = messages
@@ -173,7 +168,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
173168
}
174169
.expect { (ictx, messages) =>
175170
implicit val ctx: Context = ictx
176-
val defn = ictx.definitions
177171

178172
assertMessageCount(1, messages)
179173
val CantInstantiateAbstractClassOrTrait(cls, isTrait) :: Nil = messages
@@ -192,7 +186,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
192186
}
193187
.expect { (ictx, messages) =>
194188
implicit val ctx: Context = ictx
195-
val defn = ictx.definitions
196189

197190
assertMessageCount(1, messages)
198191
val CantInstantiateAbstractClassOrTrait(cls, isTrait) :: Nil = messages
@@ -211,7 +204,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
211204
}
212205
.expect { (ictx, messages) =>
213206
implicit val ctx: Context = ictx
214-
val defn = ictx.definitions
215207

216208
assertMessageCount(1, messages)
217209
val OverloadedOrRecursiveMethodNeedsResultType(treeName) :: Nil = messages
@@ -243,7 +235,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
243235
}
244236
.expect { (ictx, messages) =>
245237
implicit val ctx: Context = ictx
246-
val defn = ictx.definitions
247238

248239
assertMessageCount(1, messages)
249240
val OverloadedOrRecursiveMethodNeedsResultType(treeName) :: Nil = messages
@@ -260,7 +251,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
260251
}
261252
.expect { (ictx, messages) =>
262253
implicit val ctx: Context = ictx
263-
val defn = ictx.definitions
264254

265255
assertMessageCount(1, messages)
266256
val RecursiveValueNeedsResultType(tree) :: Nil = messages
@@ -278,7 +268,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
278268
}
279269
.expect { (ictx, messages) =>
280270
implicit val ctx: Context = ictx
281-
val defn = ictx.definitions
282271

283272
assertMessageCount(1, messages)
284273
val CyclicReferenceInvolving(denot) :: Nil = messages
@@ -299,7 +288,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
299288
}
300289
.expect { (ictx, messages) =>
301290
implicit val ctx: Context = ictx
302-
val defn = ictx.definitions
303291

304292
assertMessageCount(1, messages)
305293
val CyclicReferenceInvolvingImplicit(tree) :: Nil = messages
@@ -323,7 +311,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
323311
}
324312
.expect { (ictx, messages) =>
325313
implicit val ctx: Context = ictx
326-
val defn = ictx.definitions
327314

328315
assertMessageCount(1, messages)
329316
val SuperQualMustBeParent(qual, cls) :: Nil = messages
@@ -351,7 +338,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
351338
}
352339
.expect { (ictx, messages) =>
353340
implicit val ctx: Context = ictx
354-
val defn = ictx.definitions
355341

356342
import typer.Typer.BindingPrec._
357343

@@ -373,7 +359,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
373359
}
374360
.expect { (ictx, messages) =>
375361
implicit val ctx: Context = ictx
376-
val defn = ictx.definitions
377362

378363
assertMessageCount(1, messages)
379364
val MethodDoesNotTakeParameters(tree, methodPart) :: Nil = messages
@@ -393,7 +378,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
393378
}
394379
.expect { (ictx, messages) =>
395380
implicit val ctx: Context = ictx
396-
val defn = ictx.definitions
397381

398382
assertMessageCount(1, messages)
399383
val MethodDoesNotTakeParameters(tree, methodPart) :: Nil = messages
@@ -418,7 +402,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
418402
}
419403
.expect { (ictx, messages) =>
420404
implicit val ctx: Context = ictx
421-
val defn = ictx.definitions
422405

423406
assertMessageCount(1, messages)
424407
val AmbiguousOverload(tree, List(alt1, alt2), pt: WildcardType) :: Nil = messages
@@ -452,7 +435,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
452435
}
453436
.expect { (ictx, messages) =>
454437
implicit val ctx: Context = ictx
455-
val defn = ictx.definitions
456438

457439
assertMessageCount(1, messages)
458440
val TypeDoesNotTakeParameters(tpe, params) :: Nil = messages
@@ -468,7 +450,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
468450
}
469451
.expect { (ictx, messages) =>
470452
implicit val ctx: Context = ictx
471-
val defn = ictx.definitions
472453

473454
assertMessageCount(1, messages)
474455
val ParameterizedTypeLacksArguments(symbol) :: Nil = messages
@@ -824,11 +805,12 @@ class ErrorMessagesTests extends ErrorMessagesTest {
824805
checkMessagesAfter("refchecks") {
825806
"""
826807
|object AnonymousF {
827-
| val f = { case l@List(1,2,3) => Some(l); case _ => None }
808+
| val f = { case l@List(1,2,3) => Some(l); }
828809
|}""".stripMargin
829810
}
830811
.expect { (ictx, messages) =>
831812
implicit val ctx: Context = ictx
813+
832814
assertMessageCount(1, messages)
833815
val AnonymousFunctionMissingParamType(param, args, _, pt) :: Nil = messages
834816
assertEquals("x$1", param.show)
@@ -884,7 +866,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
884866
}
885867
.expect { (ictx, messages) =>
886868
implicit val ctx: Context = ictx
887-
val defn = ictx.definitions
888869

889870
assertMessageCount(1, messages)
890871
val err :: Nil = messages
@@ -901,7 +882,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
901882
}
902883
.expect { (ictx, messages) =>
903884
implicit val ctx: Context = ictx
904-
val defn = ictx.definitions
905885

906886
assertMessageCount(2, messages)
907887
messages.foreach(assertEquals(_, ImplicitFunctionTypeNeedsNonEmptyParameterList()))
@@ -916,7 +896,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
916896
}
917897
.expect { (ictx, messages) =>
918898
implicit val ctx: Context = ictx
919-
val defn = ictx.definitions
920899

921900
assertMessageCount(1, messages)
922901
val err :: Nil = messages
@@ -932,7 +911,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
932911
}
933912
.expect { (ictx, messages) =>
934913
implicit val ctx: Context = ictx
935-
val defn = ictx.definitions
936914

937915
assertMessageCount(1, messages)
938916
val err :: Nil = messages
@@ -946,7 +924,6 @@ class ErrorMessagesTests extends ErrorMessagesTest {
946924
}
947925
.expect { (ictx, messages) =>
948926
implicit val ctx: Context = ictx
949-
val defn = ictx.definitions
950927

951928
assertMessageCount(1, messages)
952929
val err :: Nil = messages

0 commit comments

Comments
 (0)