Skip to content

Commit a1cc8b7

Browse files
authored
Fix finding references to CtorGroup (#15884)
1 parent aaf4c11 commit a1cc8b7

File tree

4 files changed

+35
-7
lines changed

4 files changed

+35
-7
lines changed

src/Compiler/Checking/NameResolution.fs

+6-1
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,12 @@ type Item =
271271
| Item.Property(name = nm) -> nm |> ConvertValLogicalNameToDisplayNameCore
272272
| Item.MethodGroup(_, FSMeth(_, _, v, _) :: _, _) -> v.DisplayNameCore
273273
| Item.MethodGroup(nm, _, _) -> nm |> ConvertValLogicalNameToDisplayNameCore
274-
| Item.CtorGroup(nm, _) -> nm |> DemangleGenericTypeName
274+
| Item.CtorGroup(nm, ILMeth(_, ilMethInfo, _) :: _) ->
275+
match ilMethInfo.ApparentEnclosingType |> tryNiceEntityRefOfTy with
276+
| ValueSome tcref -> tcref.DisplayNameCore
277+
| _ -> nm
278+
|> DemangleGenericTypeName
279+
| Item.CtorGroup(nm, _) -> nm |> DemangleGenericTypeName
275280
| Item.FakeInterfaceCtor ty
276281
| Item.DelegateCtor ty ->
277282
match ty with

src/Compiler/Service/ItemKey.fs

+6-5
Original file line numberDiff line numberDiff line change
@@ -415,11 +415,12 @@ and [<Sealed>] ItemKeyStoreBuilder() =
415415
match info with
416416
| FSMeth (_, ty, vref, _) when vref.IsConstructor -> writeType true ty
417417
| FSMeth (_, _, vref, _) -> writeValue vref
418-
| ILMeth (_, info, _) ->
419-
info.ILMethodRef.ArgTypes |> List.iter writeILType
420-
writeILType info.ILMethodRef.ReturnType
421-
writeString info.ILName
422-
writeType false info.ApparentEnclosingType
418+
| ILMeth (_, ilMethInfo, _) when info.IsConstructor -> writeType true ilMethInfo.ApparentEnclosingType
419+
| ILMeth (_, ilMethInfo, _) ->
420+
ilMethInfo.ILMethodRef.ArgTypes |> List.iter writeILType
421+
writeILType ilMethInfo.ILMethodRef.ReturnType
422+
writeString ilMethInfo.ILName
423+
writeType false ilMethInfo.ApparentEnclosingType
423424
| _ ->
424425
writeString ItemKeyTags.itemValueMember
425426
writeEntityRef info.DeclaringTyconRef

tests/FSharp.Compiler.ComponentTests/FSharpChecker/FindReferences.fs

+22
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,28 @@ let foo x = x ++ 4""" })
152152
])
153153
}
154154

155+
[<Theory>]
156+
[<InlineData("First")>]
157+
[<InlineData("Second")>]
158+
let ``We find disposable constructors`` searchIn =
159+
let source1 = "type MyReader = System.IO.StreamReader"
160+
let source2 = """open ModuleFirst
161+
let reader = MyReader "test.txt"
162+
"""
163+
{ SyntheticProject.Create(
164+
{ sourceFile "First" [] with Source = source1 },
165+
{ sourceFile "Second" [] with Source = source2 })
166+
with SkipInitialCheck = true }
167+
168+
.Workflow {
169+
placeCursor searchIn "MyReader"
170+
findAllReferences (expectToFind [
171+
"FileFirst.fs", 2, 5, 13
172+
"FileSecond.fs", 3, 13, 21
173+
])
174+
}
175+
176+
155177
module Parameters =
156178

157179
[<Fact>]

tests/service/ProjectAnalysisTests.fs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3070,7 +3070,7 @@ let ``Test Project21 all symbols`` () =
30703070
("unit", "unit", "file1", ((12, 43), (12, 47)), ["type"], ["abbrev"]);
30713071
("val raise", "raise", "file1", ((13, 18), (13, 23)), [], ["val"]);
30723072
("System", "System", "file1", ((13, 25), (13, 31)), [], ["namespace"]);
3073-
("member .ctor", "``.ctor``", "file1", ((13, 25), (13, 55)), [], ["member"]);
3073+
("member .ctor", "NotImplementedException", "file1", ((13, 25), (13, 55)), [], ["member"]);
30743074
("Impl", "Impl", "file1", ((2, 7), (2, 11)), ["defn"], ["module"])|]
30753075

30763076
//-----------------------------------------------------------------------------------------

0 commit comments

Comments
 (0)