@@ -1078,10 +1078,9 @@ class TreeUnpickler(reader: TastyReader,
1078
1078
1079
1079
def accessibleDenot (qualType : Type , name : Name , sig : Signature , target : Name ) = {
1080
1080
val pre = ctx.typeAssigner.maybeSkolemizePrefix(qualType, name)
1081
- val d = qualType.decl(name).atSignature(sig, target)
1082
- if ! d.symbol.exists then d
1083
- else if d.symbol.isAccessibleFrom(pre) then d.asSeenFrom(pre)
1084
- else qualType.nonPrivateDecl(name).atSignature(sig, target).asSeenFrom(pre)
1081
+ val d = qualType.findMember(name, pre).atSignature(sig, target)
1082
+ if (! d.symbol.exists || d.symbol.isAccessibleFrom(pre)) d
1083
+ else qualType.findMember(name, pre, excluded = Private ).atSignature(sig, target)
1085
1084
}
1086
1085
1087
1086
def readSimpleTerm (): Tree = tag match {
@@ -1187,18 +1186,25 @@ class TreeUnpickler(reader: TastyReader,
1187
1186
val target = new BufferedOutputStream ( new FileOutputStream (file) );
1188
1187
try target.write(data.getBytes(StandardCharsets .UTF_8 )) finally target.close;
1189
1188
}
1190
- var sname = readName()
1189
+ var symname = readName()
1190
+ var precisesig = readName() match
1191
+ case SignedName (_, sig, _) => sig
1192
+ case _ => Signature .NotAMethod
1191
1193
val qual = readTerm()
1192
1194
val qualType = qual.tpe.widenIfUnstable
1193
1195
val space = if currentAddr == end then qualType else readType()
1194
1196
def selectAmbiguous (name : Name , pre : Type , denot : Denotation ) =
1195
1197
makeSelect(qual, name, denot.asSeenFrom(pre))
1196
1198
def select (name : Name , sig : Signature , target : Name ) =
1197
1199
makeSelect(qual, name, accessibleDenot(qualType, name, sig, target))
1198
- val res = sname match
1200
+ val res = symname match
1199
1201
case SignedName (name, sig, target) =>
1200
1202
val pre = ctx.typeAssigner.maybeSkolemizePrefix(qualType, name)
1201
- val isAmbiguous = pre.nonPrivateMember(name).isOverloaded
1203
+ assert(precisesig != Signature .NotAMethod )
1204
+ val isAmbiguous = pre.nonPrivateMember(name).match
1205
+ case d : MultiDenotation =>
1206
+ d.atSignature(precisesig, target).isInstanceOf [MultiDenotation ]
1207
+ case _ => false
1202
1208
if isAmbiguous then
1203
1209
// writeBytes(TastyPrinter.show(reader.bytes), new File("WOW123.txt"))
1204
1210
// val d0 = pre.nonPrivateMember(name)
@@ -1210,7 +1216,7 @@ class TreeUnpickler(reader: TastyReader,
1210
1216
// report.echo(s"[$d0, $d0_1, $d0_2] [$d1, $d1_1, $d1_2]")
1211
1217
makeSelect(qual, name, space.decl(name).atSignature(sig, target).asSeenFrom(pre))
1212
1218
else
1213
- select(name, sig , target)
1219
+ select(name, precisesig , target)
1214
1220
case name =>
1215
1221
select(name, Signature .NotAMethod , EmptyTermName )
1216
1222
res
0 commit comments