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