@@ -363,45 +363,42 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit
363
363
else tree
364
364
365
365
def typedSelect (tree : untpd.Select , pt : Type )(implicit ctx : Context ): Tree = track(" typedSelect" ) {
366
- def typeAsIs (implicit ctx : Context ): Tree = {
367
- if (tree.qualifier.isType) {
368
- val qual1 = typedType(tree.qualifier, selectionProto(tree.name, pt, this ))
369
- assignType(cpy.Select (tree)(qual1, tree.name), qual1)
370
- }
371
- else {
372
- val qual1 = typedExpr(tree.qualifier, selectionProto(tree.name, pt, this ))
373
- if (tree.name.isTypeName) checkStable(qual1.tpe, qual1.pos)
374
- val select = typedSelect(tree, pt, qual1)
375
- if (select.tpe ne TryDynamicCallType ) select
376
- else if (pt.isInstanceOf [PolyProto ] || pt.isInstanceOf [FunProto ] || pt == AssignProto ) select
377
- else typedDynamicSelect(tree, Nil , pt)
378
- }
366
+ def typeSelectOnTerm (implicit ctx : Context ): Tree = {
367
+ val qual1 = typedExpr(tree.qualifier, selectionProto(tree.name, pt, this ))
368
+ if (tree.name.isTypeName) checkStable(qual1.tpe, qual1.pos)
369
+ val select = typedSelect(tree, pt, qual1)
370
+ if (select.tpe ne TryDynamicCallType ) select
371
+ else if (pt.isInstanceOf [PolyProto ] || pt.isInstanceOf [FunProto ] || pt == AssignProto ) select
372
+ else typedDynamicSelect(tree, Nil , pt)
379
373
}
380
374
381
- def asJavaSelectFromType (implicit ctx : Context ): Tree = {
382
- def typeSelectOnType (qual : untpd.Tree ) =
383
- typedSelect(untpd.cpy.Select (tree)(qual, tree.name.toTypeName), pt)
384
- tree.qualifier match {
385
- case Select (qual, name) => typeSelectOnType(untpd.Select (qual, name.toTypeName))
386
- case Ident (name) => typeSelectOnType(untpd.Ident (name.toTypeName))
387
- case _ => errorTree(tree, " cannot convert to type selection" ) // will never be printed due to fallback
388
- }
375
+ def typeSelectOnType (qual : untpd.Tree )(implicit ctx : Context ) =
376
+ typedSelect(untpd.cpy.Select (tree)(qual, tree.name.toTypeName), pt)
377
+
378
+ def tryJavaSelectOnType (implicit ctx : Context ): Tree = tree.qualifier match {
379
+ case Select (qual, name) => typeSelectOnType(untpd.Select (qual, name.toTypeName))
380
+ case Ident (name) => typeSelectOnType(untpd.Ident (name.toTypeName))
381
+ case _ => errorTree(tree, " cannot convert to type selection" ) // will never be printed due to fallback
389
382
}
390
383
391
384
def selectWithFallback (fallBack : Context => Tree ) =
392
- tryAlternatively(typeAsIs (_))(fallBack)
385
+ tryAlternatively(typeSelectOnTerm (_))(fallBack)
393
386
394
- if (ctx.compilationUnit.isJava && tree.name.isTypeName)
387
+ if (tree.qualifier.isType) {
388
+ val qual1 = typedType(tree.qualifier, selectionProto(tree.name, pt, this ))
389
+ assignType(cpy.Select (tree)(qual1, tree.name), qual1)
390
+ }
391
+ else if (ctx.compilationUnit.isJava && tree.name.isTypeName)
395
392
// SI-3120 Java uses the same syntax, A.B, to express selection from the
396
393
// value A and from the type A. We have to try both.
397
- selectWithFallback(asJavaSelectFromType (_)) // !!! possibly exponential bcs of qualifier retyping
394
+ selectWithFallback(tryJavaSelectOnType (_)) // !!! possibly exponential bcs of qualifier retyping
398
395
else if (tree.name == nme.withFilter && tree.getAttachment(desugar.MaybeFilter ).isDefined)
399
396
selectWithFallback {
400
397
implicit ctx =>
401
398
typedSelect(untpd.cpy.Select (tree)(tree.qualifier, nme.filter), pt) // !!! possibly exponential bcs of qualifier retyping
402
399
}
403
400
else
404
- typeAsIs (ctx)
401
+ typeSelectOnTerm (ctx)
405
402
}
406
403
407
404
def typedThis (tree : untpd.This )(implicit ctx : Context ): Tree = track(" typedThis" ) {
0 commit comments