Skip to content

Commit 42fd913

Browse files
committed
Fix 93 - prefer accessible types over inaccessible types
1 parent 9b81e87 commit 42fd913

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

src/fsharp/NameResolution.fs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,7 +1022,7 @@ let ResolveProvidedTypeNameInEntity (amap, m, typeName, modref: ModuleOrNamespac
10221022
#endif
10231023

10241024
/// Lookup a type name in an entity.
1025-
let LookupTypeNameInEntityMaybeHaveArity (amap, m, nm, staticResInfo:TypeNameResolutionStaticArgsInfo, modref: ModuleOrNamespaceRef) =
1025+
let LookupTypeNameInEntityMaybeHaveArity (amap, m, ad, nm, staticResInfo:TypeNameResolutionStaticArgsInfo, modref: ModuleOrNamespaceRef) =
10261026
let mtyp = modref.ModuleOrNamespaceType
10271027
let tcrefs =
10281028
match staticResInfo with
@@ -1042,6 +1042,7 @@ let LookupTypeNameInEntityMaybeHaveArity (amap, m, nm, staticResInfo:TypeNameRes
10421042
#else
10431043
amap |> ignore
10441044
#endif
1045+
let tcrefs = tcrefs |> List.filter (IsEntityAccessible amap m ad)
10451046
tcrefs
10461047

10471048

@@ -1072,15 +1073,15 @@ let GetNestedTypesOfType (ad, ncenv:NameResolver, optFilter, staticResInfo, chec
10721073

10731074
match optFilter with
10741075
| Some nm ->
1075-
LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, m, nm, staticResInfo, tcref)
1076-
|> List.map (MakeNestedType ncenv tinst m)
1076+
let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, m, ad, nm, staticResInfo, tcref)
1077+
tcrefs |> List.map (MakeNestedType ncenv tinst m)
10771078
| None ->
10781079
#if EXTENSIONTYPING
10791080
match tycon.TypeReprInfo with
10801081
| TProvidedTypeExtensionPoint info ->
10811082
[ for nestedType in info.ProvidedType.PApplyArray((fun sty -> sty.GetNestedTypes()), "GetNestedTypes", m) do
10821083
let nestedTypeName = nestedType.PUntaint((fun t -> t.Name), m)
1083-
for nestedTcref in LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, m, nestedTypeName, staticResInfo, tcref) do
1084+
for nestedTcref in LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, m, ad, nestedTypeName, staticResInfo, tcref) do
10841085
yield MakeNestedType ncenv tinst m nestedTcref ]
10851086

10861087
| _ ->
@@ -1971,7 +1972,7 @@ let rec ResolveExprLongIdentInModuleOrNamespace (ncenv:NameResolver) nenv (typeN
19711972

19721973
// Something in a type?
19731974
let tyconSearch =
1974-
let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, id.idText, (if isNil rest then typeNameResInfo.StaticArgsInfo else TypeNameResolutionStaticArgsInfo.Indefinite), modref)
1975+
let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, ad, id.idText, (if isNil rest then typeNameResInfo.StaticArgsInfo else TypeNameResolutionStaticArgsInfo.Indefinite), modref)
19751976
let tcrefs = tcrefs |> List.map (fun tcref -> (resInfo,tcref))
19761977
if nonNil rest then
19771978
let tcrefs = CheckForTypeLegitimacyAndMultipleGenericTypeAmbiguities (tcrefs, TypeNameResolutionInfo (ResolveTypeNamesToTypeRefs,TypeNameResolutionStaticArgsInfo.Indefinite), PermitDirectReferenceToGeneratedType.No, unionRanges m id.idRange)
@@ -2181,7 +2182,7 @@ let rec ResolvePatternLongIdentInModuleOrNamespace (ncenv:NameResolver) nenv num
21812182
success(resInfo,Item.Value (mkNestedValRef modref vspec),rest)
21822183
| _ ->
21832184
// Something in a type? e.g. a literal field
2184-
let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, id.idText, TypeNameResolutionStaticArgsInfo.Indefinite, modref)
2185+
let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, ad, id.idText, TypeNameResolutionStaticArgsInfo.Indefinite, modref)
21852186
let tcrefs = tcrefs |> List.map (fun tcref -> (resInfo,tcref))
21862187
let tyconSearch =
21872188
match lid with
@@ -2300,7 +2301,7 @@ let rec ResolveTypeLongIdentInTyconRefPrim (ncenv:NameResolver) (typeNameResInfo
23002301
CheckForDirectReferenceToGeneratedType (tcref, PermitDirectReferenceToGeneratedType.No, m)
23012302
#endif
23022303
let m = unionRanges m id.idRange
2303-
let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, id.idText, typeNameResInfo.StaticArgsInfo, tcref)
2304+
let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, ad, id.idText, typeNameResInfo.StaticArgsInfo, tcref)
23042305
let tcrefs = tcrefs |> List.map (fun tcref -> (resInfo,tcref))
23052306
let tcrefs = CheckForTypeLegitimacyAndMultipleGenericTypeAmbiguities (tcrefs, typeNameResInfo, genOk, m)
23062307
match tcrefs with
@@ -2314,7 +2315,7 @@ let rec ResolveTypeLongIdentInTyconRefPrim (ncenv:NameResolver) (typeNameResInfo
23142315
let m = unionRanges m id.idRange
23152316
// Search nested types
23162317
let tyconSearch =
2317-
let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, id.idText, TypeNameResolutionStaticArgsInfo.Indefinite, tcref)
2318+
let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, ad, id.idText, TypeNameResolutionStaticArgsInfo.Indefinite, tcref)
23182319
let tcrefs = tcrefs |> List.map (fun tcref -> (resInfo,tcref))
23192320
let tcrefs = CheckForTypeLegitimacyAndMultipleGenericTypeAmbiguities (tcrefs, typeNameResInfo.DropStaticArgsInfo, genOk, m)
23202321
match tcrefs with
@@ -2347,7 +2348,7 @@ let rec private ResolveTypeLongIdentInModuleOrNamespace (ncenv:NameResolver) (ty
23472348
| [] -> error(Error(FSComp.SR.nrUnexpectedEmptyLongId(),m))
23482349
| [id] ->
23492350
// On all paths except error reporting we have isSome(staticResInfo), hence get at most one result back
2350-
let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, id.idText, typeNameResInfo.StaticArgsInfo, modref)
2351+
let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, ad, id.idText, typeNameResInfo.StaticArgsInfo, modref)
23512352
match tcrefs with
23522353
| _ :: _ -> tcrefs |> CollectResults (fun tcref -> success(resInfo,tcref))
23532354
| [] -> raze (SuggestTypeLongIdentInModuleOrNamespace depth modref id)
@@ -2361,7 +2362,7 @@ let rec private ResolveTypeLongIdentInModuleOrNamespace (ncenv:NameResolver) (ty
23612362
| _ ->
23622363
raze (UndefinedName(depth,FSComp.SR.undefinedNameNamespaceOrModule,id,NoPredictions))
23632364
let tyconSearch =
2364-
let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, id.idText, TypeNameResolutionStaticArgsInfo.Indefinite, modref)
2365+
let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, ad, id.idText, TypeNameResolutionStaticArgsInfo.Indefinite, modref)
23652366
match tcrefs with
23662367
| _ :: _ -> tcrefs |> CollectResults (fun tcref -> ResolveTypeLongIdentInTyconRefPrim ncenv typeNameResInfo ad resInfo genOk (depth+1) m tcref rest)
23672368
| [] -> raze (UndefinedName(depth,FSComp.SR.undefinedNameType,id,NoPredictions))
@@ -2469,7 +2470,7 @@ let rec ResolveFieldInModuleOrNamespace (ncenv:NameResolver) nenv ad (resInfo:Re
24692470
let tyconSearch =
24702471
match lid with
24712472
| _tn:: rest when nonNil rest ->
2472-
let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, id.idText, TypeNameResolutionStaticArgsInfo.Indefinite, modref)
2473+
let tcrefs = LookupTypeNameInEntityMaybeHaveArity (ncenv.amap, id.idRange, ad, id.idText, TypeNameResolutionStaticArgsInfo.Indefinite, modref)
24732474
let tcrefs = tcrefs |> List.map (fun tcref -> (ResolutionInfo.Empty,tcref))
24742475
let tyconSearch = ResolveLongIdentInTyconRefs ncenv nenv LookupKind.RecdField (depth+1) m ad rest typeNameResInfo id.idRange tcrefs
24752476
// choose only fields

0 commit comments

Comments
 (0)