Skip to content

Commit 0f04f03

Browse files
author
dotnet-automerge-bot
authored
Merge pull request #7419 from dotnet/merges/release/dev16.3-to-release/dev16.4
Merge release/dev16.3 to release/dev16.4
2 parents 275510f + 650a166 commit 0f04f03

File tree

5 files changed

+51
-26
lines changed

5 files changed

+51
-26
lines changed

src/fsharp/LanguageFeatures.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ type LanguageVersion (specifiedVersion) =
5454
LanguageFeature.RelaxWhitespace, languageVersion47
5555
LanguageFeature.NameOf, previewVersion
5656
LanguageFeature.ImplicitYield, languageVersion47
57-
LanguageFeature.OpenStaticClasses, languageVersion47
57+
LanguageFeature.OpenStaticClasses, previewVersion
5858
|]
5959

6060
let specified =

src/fsharp/NameResolution.fs

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -758,14 +758,14 @@ let AddUnionCases2 bulkAddMode (eUnqualifiedItems: UnqualifiedItems) (ucrefs: Un
758758
let item = Item.UnionCase(GeneralizeUnionCaseRef ucref, false)
759759
acc.Add (ucref.CaseName, item))
760760

761-
let AddStaticContentOfTyconRefToNameEnv (g:TcGlobals) (amap: Import.ImportMap) m (nenv: NameResolutionEnv) (tcref:TyconRef) =
761+
let AddStaticContentOfTyconRefToNameEnv (g:TcGlobals) (amap: Import.ImportMap) ad m (nenv: NameResolutionEnv) (tcref:TyconRef) =
762762
// If OpenStaticClasses is not enabled then don't do this
763763
if amap.g.langVersion.SupportsFeature LanguageFeature.OpenStaticClasses then
764764
let ty = generalizedTyconRef tcref
765765
let infoReader = InfoReader(g,amap)
766766
let items =
767767
[| let methGroups =
768-
AllMethInfosOfTypeInScope ResultCollectionSettings.AllResults infoReader nenv None AccessorDomain.AccessibleFromSomeFSharpCode PreferOverrides m ty
768+
AllMethInfosOfTypeInScope ResultCollectionSettings.AllResults infoReader nenv None ad PreferOverrides m ty
769769
|> List.groupBy (fun m -> m.LogicalName)
770770

771771
for (methName, methGroup) in methGroups do
@@ -774,20 +774,30 @@ let AddStaticContentOfTyconRefToNameEnv (g:TcGlobals) (amap: Import.ImportMap) m
774774
yield KeyValuePair(methName, Item.MethodGroup(methName, methGroup, None))
775775

776776
let propInfos =
777-
AllPropInfosOfTypeInScope ResultCollectionSettings.AllResults infoReader nenv None AccessorDomain.AccessibleFromSomeFSharpCode PreferOverrides m ty
777+
AllPropInfosOfTypeInScope ResultCollectionSettings.AllResults infoReader nenv None ad PreferOverrides m ty
778778
|> List.groupBy (fun m -> m.PropertyName)
779779

780780
for (propName, propInfos) in propInfos do
781781
let propInfos = propInfos |> List.filter (fun m -> m.IsStatic)
782782
for propInfo in propInfos do
783-
yield KeyValuePair(propName , Item.Property(propName,[propInfo])) |]
783+
yield KeyValuePair(propName , Item.Property(propName,[propInfo]))
784+
785+
let fields =
786+
infoReader.GetILFieldInfosOfType(None, ad, m, ty)
787+
|> List.groupBy (fun f -> f.FieldName)
788+
789+
for (fieldName, fieldInfos) in fields do
790+
let fieldInfos = fieldInfos |> List.filter (fun fi -> fi.IsStatic)
791+
for fieldInfo in fieldInfos do
792+
yield KeyValuePair(fieldName, Item.ILField(fieldInfo))
793+
|]
784794

785795
{ nenv with eUnqualifiedItems = nenv.eUnqualifiedItems.AddAndMarkAsCollapsible items }
786796
else
787797
nenv
788798

789799
/// Add any implied contents of a type definition to the environment.
790-
let private AddPartsOfTyconRefToNameEnv bulkAddMode ownDefinition (g: TcGlobals) amap m nenv (tcref: TyconRef) =
800+
let private AddPartsOfTyconRefToNameEnv bulkAddMode ownDefinition (g: TcGlobals) amap ad m nenv (tcref: TyconRef) =
791801

792802
let isIL = tcref.IsILTycon
793803
let ucrefs = if isIL then [] else tcref.UnionCasesAsList |> List.map tcref.MakeNestedUnionCaseRef
@@ -860,16 +870,16 @@ let private AddPartsOfTyconRefToNameEnv bulkAddMode ownDefinition (g: TcGlobals)
860870

861871
let nenv =
862872
if TryFindFSharpBoolAttribute g g.attrib_AutoOpenAttribute tcref.Attribs = Some true && isStaticClass g tcref then
863-
AddStaticContentOfTyconRefToNameEnv g amap m nenv tcref
873+
AddStaticContentOfTyconRefToNameEnv g amap ad m nenv tcref
864874
else
865875
nenv
866876

867877
nenv
868878

869879
/// Add a set of type definitions to the name resolution environment
870-
let AddTyconRefsToNameEnv bulkAddMode ownDefinition g amap m root nenv tcrefs =
880+
let AddTyconRefsToNameEnv bulkAddMode ownDefinition g amap ad m root nenv tcrefs =
871881
if isNil tcrefs then nenv else
872-
let env = List.fold (AddPartsOfTyconRefToNameEnv bulkAddMode ownDefinition g amap m) nenv tcrefs
882+
let env = List.fold (AddPartsOfTyconRefToNameEnv bulkAddMode ownDefinition g amap ad m) nenv tcrefs
873883
// Add most of the contents of the tycons en-masse, then flatten the tables if we're opening a module or namespace
874884
let tcrefs = Array.ofList tcrefs
875885
{ env with
@@ -968,7 +978,7 @@ and AddModuleOrNamespaceContentsToNameEnv (g: TcGlobals) amap (ad: AccessorDomai
968978
let tcref = modref.NestedTyconRef tycon
969979
if IsEntityAccessible amap m ad tcref then Some tcref else None)
970980

971-
let nenv = (nenv, tcrefs) ||> AddTyconRefsToNameEnv BulkAdd.Yes false g amap m false
981+
let nenv = (nenv, tcrefs) ||> AddTyconRefsToNameEnv BulkAdd.Yes false g amap ad m false
972982
let vrefs =
973983
mty.AllValsAndMembers.ToList()
974984
|> List.choose (fun x -> if IsAccessible ad x.Accessibility then TryMkValRefInModRef modref x else None)
@@ -993,7 +1003,7 @@ and AddEntityContentsToNameEnv g amap ad m root nenv (modref: EntityRef) =
9931003
if modref.IsModuleOrNamespace then
9941004
AddModuleOrNamespaceContentsToNameEnv g amap ad m root nenv modref
9951005
else
996-
AddStaticContentOfTyconRefToNameEnv g amap m nenv modref
1006+
AddStaticContentOfTyconRefToNameEnv g amap ad m nenv modref
9971007

9981008
/// Add a single modules or namespace to the name resolution environment
9991009
let AddModuleOrNamespaceRefToNameEnv g amap m root ad nenv (modref: EntityRef) =

src/fsharp/NameResolution.fsi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ val internal AddValRefToNameEnv : NameResolutionEnv -> ValRef
187187
val internal AddActivePatternResultTagsToNameEnv : ActivePatternInfo -> NameResolutionEnv -> TType -> range -> NameResolutionEnv
188188

189189
/// Add a list of type definitions to the name resolution environment
190-
val internal AddTyconRefsToNameEnv : BulkAdd -> bool -> TcGlobals -> ImportMap -> range -> bool -> NameResolutionEnv -> TyconRef list -> NameResolutionEnv
190+
val internal AddTyconRefsToNameEnv : BulkAdd -> bool -> TcGlobals -> ImportMap -> AccessorDomain -> range -> bool -> NameResolutionEnv -> TyconRef list -> NameResolutionEnv
191191

192192
/// Add an F# exception definition to the name resolution environment
193193
val internal AddExceptionDeclsToNameEnv : BulkAdd -> NameResolutionEnv -> TyconRef -> NameResolutionEnv

src/fsharp/TypeChecker.fs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ let AddLocalExnDefnAndReport tcSink scopem env (exnc: Tycon) =
358358
/// Add a list of type definitions to TcEnv
359359
let AddLocalTyconRefs ownDefinition g amap m tcrefs env =
360360
if isNil tcrefs then env else
361-
{ env with eNameResEnv = AddTyconRefsToNameEnv BulkAdd.No ownDefinition g amap m false env.eNameResEnv tcrefs }
361+
{ env with eNameResEnv = AddTyconRefsToNameEnv BulkAdd.No ownDefinition g amap env.eAccessRights m false env.eNameResEnv tcrefs }
362362

363363
/// Add a list of type definitions to TcEnv
364364
let AddLocalTycons g amap m (tycons: Tycon list) env =
@@ -407,7 +407,7 @@ let AddNonLocalCcu g amap scopem env assemblyName (ccu: CcuThunk, internalsVisib
407407
let env = AddRootModuleOrNamespaceRefs g amap scopem env modrefs
408408
let env =
409409
if isNil tcrefs then env else
410-
{ env with eNameResEnv = AddTyconRefsToNameEnv BulkAdd.Yes false g amap scopem true env.eNameResEnv tcrefs }
410+
{ env with eNameResEnv = AddTyconRefsToNameEnv BulkAdd.Yes false g amap env.eAccessRights scopem true env.eNameResEnv tcrefs }
411411
env
412412

413413
/// Adjust the TcEnv to account for a fully processed "namespace" declaration in thie file
@@ -418,7 +418,7 @@ let AddLocalRootModuleOrNamespace tcSink g amap scopem env (mtyp: ModuleOrNamesp
418418
let tcrefs = mtyp.TypeAndExceptionDefinitions |> List.map mkLocalTyconRef
419419
let env = AddRootModuleOrNamespaceRefs g amap scopem env modrefs
420420
let env = { env with
421-
eNameResEnv = if isNil tcrefs then env.eNameResEnv else AddTyconRefsToNameEnv BulkAdd.No false g amap scopem true env.eNameResEnv tcrefs
421+
eNameResEnv = if isNil tcrefs then env.eNameResEnv else AddTyconRefsToNameEnv BulkAdd.No false g amap env.eAccessRights scopem true env.eNameResEnv tcrefs
422422
eUngeneralizableItems = addFreeItemOfModuleTy mtyp env.eUngeneralizableItems }
423423
CallEnvSink tcSink (scopem, env.NameEnv, env.eAccessRights)
424424
env

tests/fsharp/Compiler/Language/OpenStaticClasses.fs

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ open NUnit.Framework
88

99
(*
1010
Tests in this file evaluate whether the language supports accessing functions on static classes using open
11-
The feature was added in FSharp4.7, the test cases ensure that the original errors are reproduced when the langversion:4.6 is specified
11+
The feature was added in preview, the test cases ensure that the original errors are reproduced when the langversion:4.6 is specified
1212
*)
1313

1414
[<TestFixture>]
@@ -49,9 +49,9 @@ module OpenSystemMathOnce =
4949
|]
5050

5151
[<Test>]
52-
let ``OpenStaticClassesTests - OpenSystemMathOnce - langversion:v4.7`` () =
52+
let ``OpenStaticClassesTests - OpenSystemMathOnce - langversion:preview`` () =
5353
CompilerAssert.TypeCheckWithErrorsAndOptions
54-
[| "--langversion:4.7" |]
54+
[| "--langversion:preview" |]
5555
(baseModule + """
5656
module OpenSystemMathOnce =
5757
@@ -79,9 +79,9 @@ module OpenSystemMathTwice =
7979
|]
8080

8181
[<Test>]
82-
let ``OpenStaticClassesTests - OpenSystemMathTwice - langversion:v4.7`` () =
82+
let ``OpenStaticClassesTests - OpenSystemMathTwice - langversion:preview`` () =
8383
CompilerAssert.TypeCheckWithErrorsAndOptions
84-
[| "--langversion:4.7" |]
84+
[| "--langversion:preview" |]
8585
(baseModule + """
8686
module OpenSystemMathOnce =
8787
@@ -106,9 +106,9 @@ module OpenMyMathOnce =
106106
|]
107107

108108
[<Test>]
109-
let ``OpenStaticClassesTests - OpenMyMathOnce - langversion:v4.7`` () =
109+
let ``OpenStaticClassesTests - OpenMyMathOnce - langversion:preview`` () =
110110
CompilerAssert.TypeCheckWithErrorsAndOptions
111-
[| "--langversion:4.7" |]
111+
[| "--langversion:preview" |]
112112
(baseModule + """
113113
module OpenMyMathOnce =
114114
@@ -132,9 +132,9 @@ module DontOpenAutoMath =
132132
|]
133133

134134
[<Test>]
135-
let ``OpenStaticClassesTests - DontOpenAutoMath - langversion:v4.7`` () =
135+
let ``OpenStaticClassesTests - DontOpenAutoMath - langversion:preview`` () =
136136
CompilerAssert.TypeCheckWithErrorsAndOptions
137-
[| "--langversion:4.7" |]
137+
[| "--langversion:preview" |]
138138
(baseModule + """
139139
module DontOpenAutoMath =
140140
@@ -160,9 +160,9 @@ module OpenAutoMath =
160160
|]
161161

162162
[<Test>]
163-
let ``OpenStaticClassesTests - OpenAutoMath - langversion:v4.7`` () =
163+
let ``OpenStaticClassesTests - OpenAutoMath - langversion:preview`` () =
164164
CompilerAssert.TypeCheckWithErrorsAndOptions
165-
[| "--langversion:4.7" |]
165+
[| "--langversion:preview" |]
166166
(baseModule + """
167167
module OpenAutoMath =
168168
open AutoOpenMyMath
@@ -171,3 +171,18 @@ module OpenAutoMath =
171171
let x = AutoMin(1.0, 2.0)
172172
let x2 = AutoMin(1, 2)""")
173173
[| |]
174+
175+
[<Test>]
176+
let ``OpenStaticClassesTests - OpenAccessibleFields - langversion:preview`` () =
177+
CompilerAssert.TypeCheckWithErrorsAndOptions
178+
[| "--langversion:preview" |]
179+
(baseModule + """
180+
module OpenAFieldFromMath =
181+
open System.Math
182+
183+
let pi = PI""")
184+
[||]
185+
186+
// TODO - wait for Will's integration of testing changes that makes this easlier
187+
// [<Test>]
188+
// let ``OpenStaticClassesTests - InternalsVisibleWhenHavingAnIVT - langversion:preview``() = ...

0 commit comments

Comments
 (0)