• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Sholtee / proxygen / 1046

27 Apr 2025 01:21PM UTC coverage: 92.705% (+0.6%) from 92.112%
1046

push

appveyor

Sholtee
Merge branch 'v10-preview1'

4791 of 5168 relevant lines covered (92.71%)

0.93 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

95.52
/SRC/Private/SyntaxFactories/ClassSyntaxFactoryBase.Member.cs
1
/********************************************************************************
2
* ClassSyntaxFactoryBase.Member.cs                                              *
3
*                                                                               *
4
* Author: Denes Solti                                                           *
5
********************************************************************************/
6
using System;
7
using System.Diagnostics;
8
using System.Linq;
9

10
using Microsoft.CodeAnalysis.CSharp;
11
using Microsoft.CodeAnalysis.CSharp.Syntax;
12

13
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
14

15
namespace Solti.Utils.Proxy.Internals
16
{
17
    using Properties;
18

19
    internal partial class ClassSyntaxFactoryBase
20
    {
21
        private ExpressionSyntax AmendTarget(ExpressionSyntax? target, IMemberInfo member, ITypeInfo? castTargetTo)
22
        {
1✔
23
            target ??= member.IsStatic ? ResolveType(member.DeclaringType) : (ExpressionSyntax) ThisExpression();
1✔
24

25
            if (castTargetTo is not null)
1✔
26
            {
1✔
27
                Debug.Assert(!member.IsStatic);
1✔
28

29
                target = ParenthesizedExpression
1✔
30
                (
1✔
31
                    CastExpression(ResolveType(castTargetTo), target)
1✔
32
                );
1✔
33
            }
1✔
34

35
            return target;
1✔
36
        }
1✔
37

38
        /// <summary>
39
        /// Starting from .NET7.0 interfaces may have abstract static members. This method throw <see cref="NotSupportedException"/> in that case.
40
        /// </summary>
41
        private static void CheckNotStaticAbstract(IMemberInfo member)
42
        {
1✔
43
            if (member.IsAbstract && member.IsStatic)
1✔
44
                throw new NotSupportedException(Resources.ABSTRACT_STATIC_NOT_SUPPORTED);
×
45
        }
1✔
46

47
        protected static string EnsureUnused(ClassDeclarationSyntax cls, string member) => cls.Members.Any(m => m switch
1✔
48
        {
1✔
49
            MethodDeclarationSyntax method => method.Identifier.ValueText == member,
1✔
50
            PropertyDeclarationSyntax prop => prop.Identifier.ValueText == member,
1✔
51
            EventDeclarationSyntax evt => evt.Identifier.ValueText == member,
1✔
52
            FieldDeclarationSyntax fld => ResolveIdentifierName(fld).Identifier.ValueText == member,
1✔
53
            _ => false
1✔
54
        }) ? EnsureUnused(cls, $"_{member}") : member;
1✔
55

56
        #if DEBUG
57
        internal
58
        #endif
59
        protected static MemberAccessExpressionSyntax SimpleMemberAccess(ExpressionSyntax target, string member) => SimpleMemberAccess
1✔
60
        (
1✔
61
            target,
1✔
62
            IdentifierName(member)
1✔
63
        );
1✔
64

65
        #if DEBUG
66
        internal
67
        #endif
68
        protected static MemberAccessExpressionSyntax SimpleMemberAccess(ExpressionSyntax target, SimpleNameSyntax member) => MemberAccessExpression
1✔
69
        (
1✔
70
            SyntaxKind.SimpleMemberAccessExpression,
1✔
71
            target,
1✔
72
            member
1✔
73
        );
1✔
74

75
        #if DEBUG
76
        internal
77
        #endif
78
        protected static MemberAccessExpressionSyntax StaticMemberAccess(ClassDeclarationSyntax target, string member) => StaticMemberAccess
1✔
79
        (
1✔
80
            target,
1✔
81
            IdentifierName(member)
1✔
82
        );
1✔
83

84
        #if DEBUG
85
        internal
86
        #endif
87
        protected static MemberAccessExpressionSyntax StaticMemberAccess(ClassDeclarationSyntax target, SimpleNameSyntax member) => SimpleMemberAccess
1✔
88
        (
1✔
89
            AliasQualifiedName
1✔
90
            (
1✔
91
                IdentifierName
1✔
92
                (
1✔
93
                    Token(SyntaxKind.GlobalKeyword)
1✔
94
                ),
1✔
95
                IdentifierName(target.Identifier)
1✔
96
            ),
1✔
97
            member
1✔
98
        );
1✔
99

100
        #if DEBUG
101
        internal
102
        #endif
103
        protected static MemberAccessExpressionSyntax StaticMemberAccess(ClassDeclarationSyntax target, MemberDeclarationSyntax member) => StaticMemberAccess
1✔
104
        (
1✔
105
            target,
1✔
106
            member switch 
1✔
107
            {
1✔
108
                FieldDeclarationSyntax fld => ResolveIdentifierName(fld),
1✔
109
                ClassDeclarationSyntax cls => ResolveIdentifierName(cls),
×
110
                _ => throw new NotSupportedException() // TODO: method, prop, etc
×
111
            }
1✔
112
        );
1✔
113

114
        /// <summary>
115
        /// <code>
116
        /// [[(Type)] target | [(Type)] this | Namespace.Type].Member
117
        /// </code>
118
        /// </summary>
119
        #if DEBUG
120
        internal
121
        #endif
122
        protected MemberAccessExpressionSyntax MemberAccess(ExpressionSyntax? target, IMemberInfo member, ITypeInfo? castTargetTo = null) => SimpleMemberAccess
1✔
123
        (
1✔
124
            AmendTarget(target, member, castTargetTo),
1✔
125
            member.Name
1✔
126
        );
1✔
127
    }
128
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc