Skip to content

Commit f755dc5

Browse files
committed
Merge commit 'cdc7c66cfd' into merge/2.12.x-to-2.13.x-20190923
2 parents de90d5a + cdc7c66 commit f755dc5

File tree

1 file changed

+23
-10
lines changed

1 file changed

+23
-10
lines changed

src/compiler/scala/tools/nsc/typechecker/Typers.scala

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper
552552
* (illegal type applications in pre will be skipped -- that's why typedSelect wraps the resulting tree in a TreeWithDeferredChecks)
553553
* @return modified tree and new prefix type
554554
*/
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)*/ =
556556
if (!unit.isJava && context.isInPackageObject(sym, pre.typeSymbol)) {
557557
if (pre.typeSymbol == ScalaPackageClass && sym.isTerm) {
558558
// short cut some aliases. It seems pattern matching needs this
@@ -589,7 +589,7 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper
589589
}
590590
(checkAccessible(tree1, sym, qual.tpe, qual, unit.isJava), qual.tpe)
591591
} else {
592-
(checkAccessible(tree, sym, pre, site, unit.isJava), pre)
592+
checkAccessible(tree, sym, pre, site, unit.isJava)
593593
}
594594

595595
/** Post-process an identifier or selection node, performing the following:
@@ -5222,14 +5222,19 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper
52225222
case Select(_, _) => treeCopy.Select(tree, qual, name)
52235223
case SelectFromTypeTree(_, _) => treeCopy.SelectFromTypeTree(tree, qual, name)
52245224
}
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 {
52265228
case SilentTypeError(err: AccessTypeError) =>
5227-
(tree1, Some(err))
5229+
accessibleError = err
5230+
tree1
52285231
case SilentTypeError(err) =>
52295232
SelectWithUnderlyingError(tree, err)
52305233
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)
52335238
}
52345239

52355240
result match {
@@ -5243,7 +5248,7 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper
52435248
qual // you only get to see the wrapped tree after running this check :-p
52445249
}) setType qual.tpe setPos qual.pos,
52455250
name)
5246-
case _ if accessibleError.isDefined =>
5251+
case _ if accessibleError != null =>
52475252
// don't adapt constructor, scala/bug#6074
52485253
val qual1 = if (name == nme.CONSTRUCTOR) qual
52495254
else adaptToMemberWithArgs(tree, qual, name, mode, reportAmbiguous = false, saveErrors = false)
@@ -5252,7 +5257,7 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper
52525257
else
52535258
// before failing due to access, try a dynamic call.
52545259
asDynamicCall getOrElse {
5255-
context.issue(accessibleError.get)
5260+
context.issue(accessibleError)
52565261
setError(tree)
52575262
}
52585263
case _ =>
@@ -5363,7 +5368,15 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper
53635368
val pos = tree.pos
53645369
Select(atPos(pos.focusStart)(qual), name).setPos(pos)
53655370
}
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+
}
53675380
// scala/bug#5967 Important to replace param type A* with Seq[A] when seen from from a reference, to avoid
53685381
// inference errors in pattern matching.
53695382
stabilize(tree2, pre2, mode, pt) modifyType dropIllegalStarTypes
@@ -5892,7 +5905,7 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper
58925905
if (tree1.tpe eq null)
58935906
return setError(tree)
58945907

5895-
tree1 modifyType (pluginsTyped(_, this, tree1, mode, ptPlugins))
5908+
tree1 setType pluginsTyped(tree1.tpe, this, tree1, mode, ptPlugins)
58965909

58975910
val result =
58985911
if (tree1.isEmpty) tree1

0 commit comments

Comments
 (0)