@@ -552,7 +552,7 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper
552
552
* (illegal type applications in pre will be skipped -- that's why typedSelect wraps the resulting tree in a TreeWithDeferredChecks)
553
553
* @return modified tree and new prefix type
554
554
*/
555
- private def makeAccessible (tree : Tree , sym : Symbol , pre : Type , site : Tree ): (Tree , Type ) =
555
+ private def makeAccessible (tree : Tree , sym : Symbol , pre : Type , site : Tree ): Any /* Type | (Tree, Type)*/ =
556
556
if (! unit.isJava && context.isInPackageObject(sym, pre.typeSymbol)) {
557
557
if (pre.typeSymbol == ScalaPackageClass && sym.isTerm) {
558
558
// short cut some aliases. It seems pattern matching needs this
@@ -589,7 +589,7 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper
589
589
}
590
590
(checkAccessible(tree1, sym, qual.tpe, qual, unit.isJava), qual.tpe)
591
591
} else {
592
- ( checkAccessible(tree, sym, pre, site, unit.isJava), pre )
592
+ checkAccessible(tree, sym, pre, site, unit.isJava)
593
593
}
594
594
595
595
/** Post-process an identifier or selection node, performing the following:
@@ -5222,14 +5222,19 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper
5222
5222
case Select (_, _) => treeCopy.Select (tree, qual, name)
5223
5223
case SelectFromTypeTree (_, _) => treeCopy.SelectFromTypeTree (tree, qual, name)
5224
5224
}
5225
- val (result, accessibleError) = silent(_.makeAccessible(tree1, sym, qual.tpe, qual)) match {
5225
+ val pre = qual.tpe
5226
+ var accessibleError : AccessTypeError = null
5227
+ val result = silent(_.makeAccessible(tree1, sym, pre, qual)) match {
5226
5228
case SilentTypeError (err : AccessTypeError ) =>
5227
- (tree1, Some (err))
5229
+ accessibleError = err
5230
+ tree1
5228
5231
case SilentTypeError (err) =>
5229
5232
SelectWithUnderlyingError (tree, err)
5230
5233
return tree
5231
- case SilentResultValue ((qual, pre)) =>
5232
- (stabilize(qual, pre, mode, pt), None )
5234
+ case SilentResultValue ((qual : Tree , pre1 : Type )) =>
5235
+ stabilize(qual, pre1, mode, pt)
5236
+ case SilentResultValue (qual : Tree ) =>
5237
+ stabilize(qual, pre, mode, pt)
5233
5238
}
5234
5239
5235
5240
result match {
@@ -5243,7 +5248,7 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper
5243
5248
qual // you only get to see the wrapped tree after running this check :-p
5244
5249
}) setType qual.tpe setPos qual.pos,
5245
5250
name)
5246
- case _ if accessibleError.isDefined =>
5251
+ case _ if accessibleError != null =>
5247
5252
// don't adapt constructor, scala/bug#6074
5248
5253
val qual1 = if (name == nme.CONSTRUCTOR ) qual
5249
5254
else adaptToMemberWithArgs(tree, qual, name, mode, reportAmbiguous = false , saveErrors = false )
@@ -5252,7 +5257,7 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper
5252
5257
else
5253
5258
// before failing due to access, try a dynamic call.
5254
5259
asDynamicCall getOrElse {
5255
- context.issue(accessibleError.get )
5260
+ context.issue(accessibleError)
5256
5261
setError(tree)
5257
5262
}
5258
5263
case _ =>
@@ -5363,7 +5368,15 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper
5363
5368
val pos = tree.pos
5364
5369
Select (atPos(pos.focusStart)(qual), name).setPos(pos)
5365
5370
}
5366
- val (tree2, pre2) = makeAccessible(tree1, sym, pre1, qual)
5371
+ var tree2 : Tree = null
5372
+ var pre2 : Type = pre1
5373
+ makeAccessible(tree1, sym, pre1, qual) match {
5374
+ case (t : Tree , tp : Type ) =>
5375
+ tree2 = t
5376
+ pre2 = tp
5377
+ case t : Tree =>
5378
+ tree2 = t
5379
+ }
5367
5380
// scala/bug#5967 Important to replace param type A* with Seq[A] when seen from from a reference, to avoid
5368
5381
// inference errors in pattern matching.
5369
5382
stabilize(tree2, pre2, mode, pt) modifyType dropIllegalStarTypes
@@ -5892,7 +5905,7 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper
5892
5905
if (tree1.tpe eq null )
5893
5906
return setError(tree)
5894
5907
5895
- tree1 modifyType ( pluginsTyped(_ , this , tree1, mode, ptPlugins) )
5908
+ tree1 setType pluginsTyped(tree1.tpe , this , tree1, mode, ptPlugins)
5896
5909
5897
5910
val result =
5898
5911
if (tree1.isEmpty) tree1
0 commit comments