diff --git a/ReSharper.FSharp/src/FSharp.Psi.Daemon/src/Stages/FcsErrorsStageProcessBase.fs b/ReSharper.FSharp/src/FSharp.Psi.Daemon/src/Stages/FcsErrorsStageProcessBase.fs index a73cea2a62..1cd4d08f14 100644 --- a/ReSharper.FSharp/src/FSharp.Psi.Daemon/src/Stages/FcsErrorsStageProcessBase.fs +++ b/ReSharper.FSharp/src/FSharp.Psi.Daemon/src/Stages/FcsErrorsStageProcessBase.fs @@ -319,6 +319,12 @@ type FcsErrorsStageProcessBase(fsFile, daemonProcess) = | ValueNotContainedMutability -> if error.Message.EndsWith("The mutability attributes differ") then createHighlightingFromNodeWithMessage ValueNotContainedMutabilityAttributesDifferError range error + elif error.Message.EndsWith("The accessibility specified in the signature is more than that specified in the implementation") then + let refHighlighting = createHighlightingFromNodeWithMessage ValueNotContainedMutabilityAccessibilityMoreInBindingError range error + let memberHighlighting = createHighlightingFromParentNodeWithMessage ValueNotContainedMutabilityAccessibilityMoreInMemberError range error + if isNotNull refHighlighting then refHighlighting + elif isNotNull memberHighlighting then memberHighlighting + else createGenericHighlighting error range else createGenericHighlighting error range diff --git a/ReSharper.FSharp/src/FSharp.Psi.Features/src/Parsing/FSharpTreeBuilderBase.fs b/ReSharper.FSharp/src/FSharp.Psi.Features/src/Parsing/FSharpTreeBuilderBase.fs index 4a10f72810..87d9ac142c 100644 --- a/ReSharper.FSharp/src/FSharp.Psi.Features/src/Parsing/FSharpTreeBuilderBase.fs +++ b/ReSharper.FSharp/src/FSharp.Psi.Features/src/Parsing/FSharpTreeBuilderBase.fs @@ -927,17 +927,24 @@ type FSharpTreeBuilderBase(lexer, document: IDocument, lifetime, path: VirtualFi member x.ProcessTypeMemberSignature(memberSig) = match memberSig with - | SynMemberSig.Member(SynValSig(attrs, _, _, synType, arity, _, _, XmlDoc xmlDoc, _, _, _, trivia), flags, range, _) -> + | SynMemberSig.Member(SynValSig(attrs, _, _, synType, arity, _, _, XmlDoc xmlDoc, _, _, _, valSigTrivia), flags, range, memberTrivia) -> let mark = x.MarkAndProcessIntro(attrs, xmlDoc, null, range) x.ProcessReturnTypeInfo(arity, synType) let elementType = if flags.IsDispatchSlot then - x.ProcessAccessorsNamesClause(trivia, range) + x.ProcessAccessorsNamesClause(valSigTrivia, range) ElementType.ABSTRACT_MEMBER_DECLARATION else match flags.MemberKind with | SynMemberKind.Constructor -> ElementType.CONSTRUCTOR_SIGNATURE | _ -> ElementType.MEMBER_SIGNATURE + + match valSigTrivia.WithKeyword, memberTrivia.GetSetKeywords with + | Some withKw, Some getSetKeywords -> + let m = Range.unionRanges withKw getSetKeywords.Range + x.MarkAndDone(m, ElementType.ACCESSOR_DECLARATION) + | _ -> () + x.Done(range, mark, elementType) | SynMemberSig.ValField(SynField(attrs, _, id, synType, _, XmlDoc xmlDoc, _, _, _), range) -> diff --git a/ReSharper.FSharp/src/FSharp.Psi.Intentions/FSharp.Psi.Intentions.fsproj b/ReSharper.FSharp/src/FSharp.Psi.Intentions/FSharp.Psi.Intentions.fsproj index 5c9e7bc265..2049d2e566 100644 --- a/ReSharper.FSharp/src/FSharp.Psi.Intentions/FSharp.Psi.Intentions.fsproj +++ b/ReSharper.FSharp/src/FSharp.Psi.Intentions/FSharp.Psi.Intentions.fsproj @@ -101,6 +101,8 @@ + + QUICKFIX JetBrains.ReSharper.Plugins.FSharp.Psi.Features.Daemon.QuickFixes diff --git a/ReSharper.FSharp/src/FSharp.Psi.Intentions/src/QuickFixes/UpdateAccessibilityInSignatureBindingFix.fs b/ReSharper.FSharp/src/FSharp.Psi.Intentions/src/QuickFixes/UpdateAccessibilityInSignatureBindingFix.fs new file mode 100644 index 0000000000..e579162415 --- /dev/null +++ b/ReSharper.FSharp/src/FSharp.Psi.Intentions/src/QuickFixes/UpdateAccessibilityInSignatureBindingFix.fs @@ -0,0 +1,51 @@ +namespace JetBrains.ReSharper.Plugins.FSharp.Psi.Features.Daemon.QuickFixes + +open JetBrains.ReSharper.Plugins.FSharp.Psi.Tree +open JetBrains.ReSharper.Plugins.FSharp.Psi.Features.Daemon.Highlightings +open JetBrains.ReSharper.Psi +open JetBrains.ReSharper.Resources.Shell +open JetBrains.ReSharper.Plugins.FSharp.Psi + +type UpdateAccessibilityInSignatureBindingFix(error: ValueNotContainedMutabilityAccessibilityMoreInBindingError) = + inherit FSharpQuickFixBase() + + let tryFindBindingSignatureAccessRights (declaredElement: IFSharpMember) = + declaredElement.GetDeclarations() + |> Seq.tryPick (function + | :? IReferencePat as pat when pat.IsFSharpSigFile() -> + match pat.DeclaredElement.As() with + | null -> None + | sigMember -> + let bindingSignature = BindingSignatureNavigator.GetByHeadPattern(pat) + if isNull bindingSignature then None else + Some (bindingSignature, sigMember.GetAccessRights()) + | _ -> None + ) + + let tryFindImplementationBindingInfo (pat: ITopReferencePat) = + if isNull pat then None else + + match pat.DeclaredElement.As() with + | null -> None + | fsMember -> Some fsMember + + let mutable implAccessRights = AccessRights.NONE + let mutable bindingSignature = null + + override x.Text = $"Update accessibility for {error.ReferenceName.Identifier.Name} in signature" + + override x.IsAvailable _ = + let topPat = TopReferencePatNavigator.GetByReferenceName(error.ReferenceName) + match tryFindImplementationBindingInfo topPat with + | None -> false + | Some implDeclaredElement -> + match tryFindBindingSignatureAccessRights implDeclaredElement with + | None -> false + | Some (bindingSig, sigAccessRights) -> + implAccessRights <- implDeclaredElement.GetAccessRights() + bindingSignature <- bindingSig + implAccessRights <> sigAccessRights + + override x.ExecutePsiTransaction _ = + use writeCookie = WriteLockCookie.Create(error.ReferenceName.IsPhysical()) + bindingSignature.SetAccessModifier(implAccessRights) diff --git a/ReSharper.FSharp/src/FSharp.Psi.Intentions/src/QuickFixes/UpdateAccessibilityInSignatureMemberFix.fs b/ReSharper.FSharp/src/FSharp.Psi.Intentions/src/QuickFixes/UpdateAccessibilityInSignatureMemberFix.fs new file mode 100644 index 0000000000..1bbcf69377 --- /dev/null +++ b/ReSharper.FSharp/src/FSharp.Psi.Intentions/src/QuickFixes/UpdateAccessibilityInSignatureMemberFix.fs @@ -0,0 +1,82 @@ +namespace JetBrains.ReSharper.Plugins.FSharp.Psi.Features.Daemon.QuickFixes + +open JetBrains.ReSharper.Plugins.FSharp.Psi +open JetBrains.ReSharper.Plugins.FSharp.Psi.Tree +open JetBrains.ReSharper.Plugins.FSharp.Psi.Features.Daemon.Highlightings +open JetBrains.ReSharper.Psi +open JetBrains.ReSharper.Psi.Tree +open JetBrains.ReSharper.Resources.Shell + +type UpdateAccessibilityInSignatureMemberFix(error: ValueNotContainedMutabilityAccessibilityMoreInMemberError) = + inherit FSharpQuickFixBase() + + let tryFindSignatureMemberAccessRights (memberDeclaration: IOverridableMemberDeclaration) = + if isNull memberDeclaration.DeclaredElement then None else + memberDeclaration.DeclaredElement.GetDeclarations() + |> Seq.tryPick (function + | :? IMemberSignature as memberSig -> Some (memberSig, memberSig.GetAccessRights()) + | _ -> None) + + let tryFindSignatureMemberInPropertyAccessRights (memberDeclaration: IMemberDeclaration) (accessorDeclaration:IAccessorDeclaration) = + if isNull memberDeclaration.DeclaredElement then None else + let implAccessRights = accessorDeclaration.GetAccessRights() + + let allDeclarations : IDeclaration array = memberDeclaration.DeclaredElement.GetDeclarations() |> Seq.toArray + let allDeclarations = + if allDeclarations.Length > 1 then allDeclarations else + + // Search via the parent + let fm = memberDeclaration.DeclaredElement.As() + if isNull fm then Array.empty else + + fm.ContainingType.GetDeclarations() + |> Seq.tryPick (fun t -> + match t with + | :? IFSharpTypeDeclaration as td when td.IsFSharpSigFile() -> + td.TypeMembers + |> Seq.choose (function | :? IDeclaration as decl -> Some decl | _ -> None) + |> Seq.toArray + |> Some + | _ -> None) + |> Option.defaultValue Array.empty + + allDeclarations + |> Seq.tryPick (function + | :? IMemberSignature as memberSig -> + memberSig.AccessorDeclarationsEnumerable + |> Seq.tryFind (fun ad -> ad.DeclaredName = accessorDeclaration.DeclaredName) + |> Option.bind (fun _ -> + if implAccessRights <> memberSig.GetAccessRights() then + Some (memberSig, accessorDeclaration.DeclaredName, implAccessRights) + else None) + | _ -> None) + + let updatableSignatures : ResizeArray = ResizeArray() + + override x.Text = $"Update accessibility for {error.MemberDeclaration.Identifier.GetText()} in signature" + + override x.IsAvailable _ = + if isNull error.MemberDeclaration then false else + // If both the get and set of a property are reported, IsAvailable will be called twice. + if updatableSignatures.Count > 0 then true else + + match error.MemberDeclaration with + | :? IMemberDeclaration as md when md.AccessorDeclarations.Count = 2 -> + // property with get/set + md.AccessorDeclarationsEnumerable + |> Seq.choose (tryFindSignatureMemberInPropertyAccessRights md) + |> Seq.iter (fun (memberSig, _declName, implAccR) -> updatableSignatures.Add (memberSig, implAccR)) + | _ -> + match tryFindSignatureMemberAccessRights error.MemberDeclaration with + | None -> () + | Some (ms, sigAccessRights) -> + let implAccessRights = error.MemberDeclaration.GetAccessRights() + if implAccessRights <> sigAccessRights then + updatableSignatures.Add (ms, implAccessRights) + + updatableSignatures.Count > 0 + + override x.ExecutePsiTransaction _ = + use writeCookie = WriteLockCookie.Create(error.MemberDeclaration.IsPhysical()) + for memberSignature, implAccessRights in updatableSignatures do + memberSignature.SetAccessModifier(implAccessRights) diff --git a/ReSharper.FSharp/src/FSharp.Psi.Services/src/Daemon/Highlightings/FcsErrors.xml b/ReSharper.FSharp/src/FSharp.Psi.Services/src/Daemon/Highlightings/FcsErrors.xml index 891563e5b0..1b989c12f1 100644 --- a/ReSharper.FSharp/src/FSharp.Psi.Services/src/Daemon/Highlightings/FcsErrors.xml +++ b/ReSharper.FSharp/src/FSharp.Psi.Services/src/Daemon/Highlightings/FcsErrors.xml @@ -218,6 +218,28 @@ UpdateMutabilityInSignatureFix + + + + referenceName.GetNavigationRange() + + fcsMessage + + + UpdateAccessibilityInSignatureBindingFix + + + + + + memberDeclaration.GetNavigationRange() + + fcsMessage + + + UpdateAccessibilityInSignatureMemberFix + + diff --git a/ReSharper.FSharp/src/FSharp.Psi/src/FSharp.psi b/ReSharper.FSharp/src/FSharp.Psi/src/FSharp.psi index aef607808c..1fc69db256 100644 --- a/ReSharper.FSharp/src/FSharp.Psi/src/FSharp.psi +++ b/ReSharper.FSharp/src/FSharp.Psi/src/FSharp.psi @@ -1317,6 +1317,7 @@ memberSignature options { stubBase="FSharpProperTypeMemberDeclarationBase"; } e attributeList* STATIC? memberKeyword{MEMBER_KEYWORD, MemberKeyword} + INLINE? accessModifier{ACCESS_MODIFIER, AccessModifier}? identOrOpName{IDENTIFIER, Identifier} postfixTypeParameterDeclarationList? @@ -1369,6 +1370,8 @@ autoPropertyDeclaration options { stubBase="FSharpProperTypeMemberDeclarationBas STATIC? memberKeyword{MEMBER, MemberKeyword} VAL + MUTABLE? + accessModifier{ACCESS_MODIFIER, AccessModifier}? IDENTIFIER EQUALS chameleonExpression diff --git a/ReSharper.FSharp/src/FSharp.Psi/src/Impl/ModifiersUtil.cs b/ReSharper.FSharp/src/FSharp.Psi/src/Impl/ModifiersUtil.cs index b7087faa59..f779a1c0dd 100644 --- a/ReSharper.FSharp/src/FSharp.Psi/src/Impl/ModifiersUtil.cs +++ b/ReSharper.FSharp/src/FSharp.Psi/src/Impl/ModifiersUtil.cs @@ -5,6 +5,7 @@ using JetBrains.ReSharper.Plugins.FSharp.Psi.Tree; using JetBrains.ReSharper.Psi; using JetBrains.ReSharper.Psi.ExtensionsAPI.Caches2; +using JetBrains.ReSharper.Psi.ExtensionsAPI.Tree; using JetBrains.ReSharper.Psi.Tree; namespace JetBrains.ReSharper.Plugins.FSharp.Psi.Impl @@ -121,5 +122,15 @@ public static AccessRights GetAccessRights([CanBeNull] ITokenNode accessModifier return AccessRights.PUBLIC; } + + public static ITreeNode GetAccessNode(AccessRights accessRights) + { + return accessRights switch + { + AccessRights.PRIVATE => FSharpTokenType.PRIVATE.CreateTreeElement(), + AccessRights.INTERNAL => FSharpTokenType.INTERNAL.CreateTreeElement(), + _ => FSharpTokenType.PUBLIC.CreateTreeElement() + }; + } } } diff --git a/ReSharper.FSharp/src/FSharp.Psi/src/Impl/Tree/AutoPropertyDeclaration.cs b/ReSharper.FSharp/src/FSharp.Psi/src/Impl/Tree/AutoPropertyDeclaration.cs index 4e6d5b1eaf..caeb2cb091 100644 --- a/ReSharper.FSharp/src/FSharp.Psi/src/Impl/Tree/AutoPropertyDeclaration.cs +++ b/ReSharper.FSharp/src/FSharp.Psi/src/Impl/Tree/AutoPropertyDeclaration.cs @@ -29,5 +29,6 @@ protected override IDeclaredElement CreateDeclaredElement(FSharpSymbol fcsSymbol public override bool IsOverride => this.IsOverride(); public override bool IsExplicitImplementation => this.IsExplicitImplementation(); + public override AccessRights GetAccessRights() => ModifiersUtil.GetAccessRights(AccessModifier); } } diff --git a/ReSharper.FSharp/src/FSharp.Psi/src/Impl/Tree/BindingSignature.cs b/ReSharper.FSharp/src/FSharp.Psi/src/Impl/Tree/BindingSignature.cs index b398945633..4db40a0a42 100644 --- a/ReSharper.FSharp/src/FSharp.Psi/src/Impl/Tree/BindingSignature.cs +++ b/ReSharper.FSharp/src/FSharp.Psi/src/Impl/Tree/BindingSignature.cs @@ -1,4 +1,5 @@ using JetBrains.ReSharper.Plugins.FSharp.Psi.Parsing; +using JetBrains.ReSharper.Psi; using JetBrains.ReSharper.Psi.ExtensionsAPI.Tree; namespace JetBrains.ReSharper.Plugins.FSharp.Psi.Impl.Tree @@ -22,5 +23,18 @@ public void SetIsMutable(bool value) if (headPat != null) FSharpImplUtil.AddTokenBefore(headPat, FSharpTokenType.MUTABLE); } + + public void SetAccessModifier(AccessRights accessModifier) + { + // TODO: check for AccessRights.NONE + if (AccessModifier == null) + { + ModificationUtil.AddChildAfter(BindingKeyword, ModifiersUtil.GetAccessNode(accessModifier)); + } + else + { + ModificationUtil.ReplaceChild(AccessModifier, ModifiersUtil.GetAccessNode(accessModifier)); + } + } } } diff --git a/ReSharper.FSharp/src/FSharp.Psi/src/Impl/Tree/MemberSignature.cs b/ReSharper.FSharp/src/FSharp.Psi/src/Impl/Tree/MemberSignature.cs index 37a79dce91..d1876bb4c5 100644 --- a/ReSharper.FSharp/src/FSharp.Psi/src/Impl/Tree/MemberSignature.cs +++ b/ReSharper.FSharp/src/FSharp.Psi/src/Impl/Tree/MemberSignature.cs @@ -2,6 +2,7 @@ using JetBrains.ReSharper.Plugins.FSharp.Psi.Parsing; using JetBrains.ReSharper.Plugins.FSharp.Psi.Tree; using JetBrains.ReSharper.Psi; +using JetBrains.ReSharper.Psi.ExtensionsAPI.Tree; namespace JetBrains.ReSharper.Plugins.FSharp.Psi.Impl.Tree { @@ -27,9 +28,21 @@ protected override IDeclaredElement CreateDeclaredElement(FSharpSymbol fcsSymbol this.CreateMemberDeclaredElement(fcsSymbol); public bool IsIndexer => this.IsIndexer(); + public void SetAccessModifier(AccessRights accessModifier) + { + if (AccessModifier == null) + { + ModificationUtil.AddChildAfter(InlineKeyword ?? MemberKeyword, ModifiersUtil.GetAccessNode(accessModifier)); + } + else + { + ModificationUtil.ReplaceChild(AccessModifier, ModifiersUtil.GetAccessNode(accessModifier)); + } + } public override bool IsStatic => StaticKeyword != null; public override bool IsVirtual => MemberKeyword?.GetTokenType() == FSharpTokenType.DEFAULT; public override bool IsOverride => this.IsOverride(); + public override AccessRights GetAccessRights() => ModifiersUtil.GetAccessRights(AccessModifier); } } diff --git a/ReSharper.FSharp/src/FSharp.Psi/src/Tree/IBindingSignature.cs b/ReSharper.FSharp/src/FSharp.Psi/src/Tree/IBindingSignature.cs new file mode 100644 index 0000000000..67483a1d39 --- /dev/null +++ b/ReSharper.FSharp/src/FSharp.Psi/src/Tree/IBindingSignature.cs @@ -0,0 +1,9 @@ +using JetBrains.ReSharper.Psi; + +namespace JetBrains.ReSharper.Plugins.FSharp.Psi.Tree +{ + public partial interface IBindingSignature + { + void SetAccessModifier(AccessRights accessModifier); + } +} diff --git a/ReSharper.FSharp/src/FSharp.Psi/src/Tree/IMemberSignature.cs b/ReSharper.FSharp/src/FSharp.Psi/src/Tree/IMemberSignature.cs new file mode 100644 index 0000000000..fb8d5a79f4 --- /dev/null +++ b/ReSharper.FSharp/src/FSharp.Psi/src/Tree/IMemberSignature.cs @@ -0,0 +1,9 @@ +using JetBrains.ReSharper.Psi; + +namespace JetBrains.ReSharper.Plugins.FSharp.Psi.Tree +{ + public partial interface IMemberSignature + { + void SetAccessModifier(AccessRights accessModifier); + } +} diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 01.fs b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 01.fs new file mode 100644 index 0000000000..6834fdaa81 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 01.fs @@ -0,0 +1,3 @@ +module A + +let private a{caret} = 0 diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 01.fs.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 01.fs.gold new file mode 100644 index 0000000000..6834fdaa81 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 01.fs.gold @@ -0,0 +1,3 @@ +module A + +let private a{caret} = 0 diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 01.fsi b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 01.fsi new file mode 100644 index 0000000000..c186b48986 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 01.fsi @@ -0,0 +1,3 @@ +module A + +val internal a: int diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 01.fsi.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 01.fsi.gold new file mode 100644 index 0000000000..3e1989afdd --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 01.fsi.gold @@ -0,0 +1,3 @@ +module A + +val private a: int diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 02.fs b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 02.fs new file mode 100644 index 0000000000..38bae14239 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 02.fs @@ -0,0 +1,3 @@ +module A + +let internal a{caret} = 0 diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 02.fs.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 02.fs.gold new file mode 100644 index 0000000000..38bae14239 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 02.fs.gold @@ -0,0 +1,3 @@ +module A + +let internal a{caret} = 0 diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 02.fsi b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 02.fsi new file mode 100644 index 0000000000..ecb2230752 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 02.fsi @@ -0,0 +1,3 @@ +module A + +val a: int diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 02.fsi.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 02.fsi.gold new file mode 100644 index 0000000000..9fd34442ef --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 02.fsi.gold @@ -0,0 +1,3 @@ +module A + +val internal a: int diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 03.fs b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 03.fs new file mode 100644 index 0000000000..374651c526 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 03.fs @@ -0,0 +1,3 @@ +module A + +let inline private a{caret} b = () diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 03.fs.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 03.fs.gold new file mode 100644 index 0000000000..374651c526 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 03.fs.gold @@ -0,0 +1,3 @@ +module A + +let inline private a{caret} b = () diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 03.fsi b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 03.fsi new file mode 100644 index 0000000000..c7cfe72551 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 03.fsi @@ -0,0 +1,3 @@ +module A + +val inline public a: b: 't -> unit diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 03.fsi.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 03.fsi.gold new file mode 100644 index 0000000000..a71d4689c7 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 03.fsi.gold @@ -0,0 +1,3 @@ +module A + +val inline private a: b: 't -> unit diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 04.fs b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 04.fs new file mode 100644 index 0000000000..d7eef5488c --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 04.fs @@ -0,0 +1,3 @@ +module A + +let mutable private a{caret} = 4 diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 04.fs.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 04.fs.gold new file mode 100644 index 0000000000..d7eef5488c --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 04.fs.gold @@ -0,0 +1,3 @@ +module A + +let mutable private a{caret} = 4 diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 04.fsi b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 04.fsi new file mode 100644 index 0000000000..343f1eb9ba --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 04.fsi @@ -0,0 +1,3 @@ +module A + +val mutable public a: int diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 04.fsi.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 04.fsi.gold new file mode 100644 index 0000000000..8eb129387f --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureBindingFix/Binding - 04.fsi.gold @@ -0,0 +1,3 @@ +module A + +val mutable private a: int diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/AutoProperty - 01.fs b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/AutoProperty - 01.fs new file mode 100644 index 0000000000..8c4349c3a4 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/AutoProperty - 01.fs @@ -0,0 +1,4 @@ +module A + +type B() = + member val private Foo{caret} = 1 with get,set diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/AutoProperty - 01.fs.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/AutoProperty - 01.fs.gold new file mode 100644 index 0000000000..8c4349c3a4 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/AutoProperty - 01.fs.gold @@ -0,0 +1,4 @@ +module A + +type B() = + member val private Foo{caret} = 1 with get,set diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/AutoProperty - 01.fsi b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/AutoProperty - 01.fsi new file mode 100644 index 0000000000..6df7d1a626 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/AutoProperty - 01.fsi @@ -0,0 +1,5 @@ +module A + +type B = + new: unit -> B + member Foo: int with get,set diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/AutoProperty - 01.fsi.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/AutoProperty - 01.fsi.gold new file mode 100644 index 0000000000..1ec9dafda7 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/AutoProperty - 01.fsi.gold @@ -0,0 +1,5 @@ +module A + +type B = + new: unit -> B + member private Foo: int with get,set diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 01.fs b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 01.fs new file mode 100644 index 0000000000..430bc71e15 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 01.fs @@ -0,0 +1,4 @@ +module A + +type B() = + member private this.Foo{caret}() = 1 diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 01.fs.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 01.fs.gold new file mode 100644 index 0000000000..430bc71e15 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 01.fs.gold @@ -0,0 +1,4 @@ +module A + +type B() = + member private this.Foo{caret}() = 1 diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 01.fsi b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 01.fsi new file mode 100644 index 0000000000..e466eaa4cb --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 01.fsi @@ -0,0 +1,5 @@ +module A + +type B = + new: unit -> B + member internal Foo: unit -> int diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 01.fsi.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 01.fsi.gold new file mode 100644 index 0000000000..d257281a06 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 01.fsi.gold @@ -0,0 +1,5 @@ +module A + +type B = + new: unit -> B + member private Foo: unit -> int diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 02.fs b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 02.fs new file mode 100644 index 0000000000..32ad7c9484 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 02.fs @@ -0,0 +1,4 @@ +module A + +type B() = + static member private Foo{caret}() = 1 diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 02.fs.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 02.fs.gold new file mode 100644 index 0000000000..32ad7c9484 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 02.fs.gold @@ -0,0 +1,4 @@ +module A + +type B() = + static member private Foo{caret}() = 1 diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 02.fsi b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 02.fsi new file mode 100644 index 0000000000..ba943c6e3f --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 02.fsi @@ -0,0 +1,5 @@ +module A + +type B = + new: unit -> B + static member public Foo: unit -> int diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 02.fsi.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 02.fsi.gold new file mode 100644 index 0000000000..581dab478a --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 02.fsi.gold @@ -0,0 +1,5 @@ +module A + +type B = + new: unit -> B + static member private Foo: unit -> int diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 03.fs b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 03.fs new file mode 100644 index 0000000000..4dbb32cacc --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 03.fs @@ -0,0 +1,4 @@ +module A + +type B() = + static member inline private Foo{caret}() = 1 diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 03.fs.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 03.fs.gold new file mode 100644 index 0000000000..4dbb32cacc --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 03.fs.gold @@ -0,0 +1,4 @@ +module A + +type B() = + static member inline private Foo{caret}() = 1 diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 03.fsi b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 03.fsi new file mode 100644 index 0000000000..f19e345ad8 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 03.fsi @@ -0,0 +1,5 @@ +module A + +type B = + new: unit -> B + static member inline Foo: unit -> int diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 03.fsi.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 03.fsi.gold new file mode 100644 index 0000000000..cb67a27f8d --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Member - 03.fsi.gold @@ -0,0 +1,5 @@ +module A + +type B = + new: unit -> B + static member inline private Foo: unit -> int diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 01.fs b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 01.fs new file mode 100644 index 0000000000..23bfc44577 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 01.fs @@ -0,0 +1,4 @@ +module A + +type B() = + member this.Foo{caret} with get () = 1 and private set (v: int) = () diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 01.fs.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 01.fs.gold new file mode 100644 index 0000000000..23bfc44577 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 01.fs.gold @@ -0,0 +1,4 @@ +module A + +type B() = + member this.Foo{caret} with get () = 1 and private set (v: int) = () diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 01.fsi b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 01.fsi new file mode 100644 index 0000000000..b48867d5f8 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 01.fsi @@ -0,0 +1,6 @@ +module A + +type B = + new: unit -> B + member Foo: int with get + member internal Foo: int with set diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 01.fsi.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 01.fsi.gold new file mode 100644 index 0000000000..bf468b2f4f --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 01.fsi.gold @@ -0,0 +1,6 @@ +module A + +type B = + new: unit -> B + member Foo: int with get + member private Foo: int with set diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 02.fs b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 02.fs new file mode 100644 index 0000000000..6eb1fa0a94 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 02.fs @@ -0,0 +1,4 @@ +module A + +type B() = + member this.Foo{caret} with private get () = 1 and internal set (v: int) = () diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 02.fs.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 02.fs.gold new file mode 100644 index 0000000000..6eb1fa0a94 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 02.fs.gold @@ -0,0 +1,4 @@ +module A + +type B() = + member this.Foo{caret} with private get () = 1 and internal set (v: int) = () diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 02.fsi b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 02.fsi new file mode 100644 index 0000000000..915701d806 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 02.fsi @@ -0,0 +1,6 @@ +module A + +type B = + new: unit -> B + member Foo: int with get + member Foo: int with set diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 02.fsi.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 02.fsi.gold new file mode 100644 index 0000000000..1d00910ec3 --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 02.fsi.gold @@ -0,0 +1,6 @@ +module A + +type B = + new: unit -> B + member private Foo: int with get + member internal Foo: int with set diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 03.fs b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 03.fs new file mode 100644 index 0000000000..3cf3d4db7a --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 03.fs @@ -0,0 +1,4 @@ +module A + +type B() = + member this.Foo{caret} with private get (i:int) = 1 and private set (i:int) v = () diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 03.fs.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 03.fs.gold new file mode 100644 index 0000000000..3cf3d4db7a --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 03.fs.gold @@ -0,0 +1,4 @@ +module A + +type B() = + member this.Foo{caret} with private get (i:int) = 1 and private set (i:int) v = () diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 03.fsi b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 03.fsi new file mode 100644 index 0000000000..38bf571e7f --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 03.fsi @@ -0,0 +1,6 @@ +module A + +type B = + new: unit -> B + member public Foo: int -> int with get + member Foo: int -> int with set diff --git a/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 03.fsi.gold b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 03.fsi.gold new file mode 100644 index 0000000000..2e99550a7f --- /dev/null +++ b/ReSharper.FSharp/test/data/features/quickFixes/updateAccessibilityInSignatureMemberFix/Property - 03.fsi.gold @@ -0,0 +1,6 @@ +module A + +type B = + new: unit -> B + member private Foo: int -> int with get + member private Foo: int -> int with set diff --git a/ReSharper.FSharp/test/src/FSharp.Intentions.Tests/FSharp.Intentions.Tests.fsproj b/ReSharper.FSharp/test/src/FSharp.Intentions.Tests/FSharp.Intentions.Tests.fsproj index 851df9608e..e68d64e2a9 100644 --- a/ReSharper.FSharp/test/src/FSharp.Intentions.Tests/FSharp.Intentions.Tests.fsproj +++ b/ReSharper.FSharp/test/src/FSharp.Intentions.Tests/FSharp.Intentions.Tests.fsproj @@ -118,6 +118,8 @@ + + diff --git a/ReSharper.FSharp/test/src/FSharp.Intentions.Tests/src/QuickFixes/UpdateAccessibilityInSignatureBindingFixTest.fs b/ReSharper.FSharp/test/src/FSharp.Intentions.Tests/src/QuickFixes/UpdateAccessibilityInSignatureBindingFixTest.fs new file mode 100644 index 0000000000..7d891d40dc --- /dev/null +++ b/ReSharper.FSharp/test/src/FSharp.Intentions.Tests/src/QuickFixes/UpdateAccessibilityInSignatureBindingFixTest.fs @@ -0,0 +1,16 @@ +namespace JetBrains.ReSharper.Plugins.FSharp.Tests.Intentions.QuickFixes + +open JetBrains.ReSharper.Plugins.FSharp.Psi.Features.Daemon.QuickFixes +open JetBrains.ReSharper.Plugins.FSharp.Tests +open NUnit.Framework + +[] +type UpdateAccessibilityInSignatureBindingFixTest() = + inherit FSharpQuickFixTestBase() + + override x.RelativeTestDataPath = "features/quickFixes/updateAccessibilityInSignatureBindingFix" + + [] member x.``Binding - 01`` () = x.DoNamedTestWithSignature() + [] member x.``Binding - 02`` () = x.DoNamedTestWithSignature() + [] member x.``Binding - 03`` () = x.DoNamedTestWithSignature() + [] member x.``Binding - 04`` () = x.DoNamedTestWithSignature() diff --git a/ReSharper.FSharp/test/src/FSharp.Intentions.Tests/src/QuickFixes/UpdateAccessibilityInSignatureMemberFixTest.fs b/ReSharper.FSharp/test/src/FSharp.Intentions.Tests/src/QuickFixes/UpdateAccessibilityInSignatureMemberFixTest.fs new file mode 100644 index 0000000000..d8c72bd514 --- /dev/null +++ b/ReSharper.FSharp/test/src/FSharp.Intentions.Tests/src/QuickFixes/UpdateAccessibilityInSignatureMemberFixTest.fs @@ -0,0 +1,21 @@ +namespace JetBrains.ReSharper.Plugins.FSharp.Tests.Intentions.QuickFixes + +open JetBrains.ReSharper.Plugins.FSharp.Psi.Features.Daemon.QuickFixes +open JetBrains.ReSharper.Plugins.FSharp.Tests +open NUnit.Framework + +[] +type UpdateAccessibilityInSignatureMemberFixTest() = + inherit FSharpQuickFixTestBase() + + override x.RelativeTestDataPath = "features/quickFixes/updateAccessibilityInSignatureMemberFix" + + [] member x.``Member - 01`` () = x.DoNamedTestWithSignature() + [] member x.``Member - 02`` () = x.DoNamedTestWithSignature() + [] member x.``Member - 03`` () = x.DoNamedTestWithSignature() + + [] member x.``AutoProperty - 01`` () = x.DoNamedTestWithSignature() + + [] member x.``Property - 01`` () = x.DoNamedTestWithSignature() + [] member x.``Property - 02`` () = x.DoNamedTestWithSignature() + [] member x.``Property - 03`` () = x.DoNamedTestWithSignature()